Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Jira
serverONAP Jira
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-505


Background

When a new CM handle is encountered by the DMI plugin, NCMP is notified via REST. Once NCMP picks up the new CM handle it needs to determine what modules exist for it in the database and figure out which modules are missing. DMI plugin is contacted for all modules for this new node and they are matched to what CPS has. Missing modules are then retrieved from DMI and entered into the database.


View file
nameDMI NCMP Model Sync.pptx
height250


High Level Proposal of Work to be done

  1. Call dmi–plugin rest endpoint to retrieve all modules on new node (depends CPS-483 and CPS-531)
  2. Call CPS-Core rest endpoint to get all existing modules in cps-core (depends CPS-506)
  3. Calculate difference (delta) 
  4. Call dmi–plugin rest endpoint to retrieve missing modules CPS-483
  5. Add missing modules to cps-core to anchor (cm handle) (depends CPS-508)

Implementation Proposal

Within the DMI plugin there is a method where cm handles are sent to a registration method in NCMP.

From: DmiServiceImpl.registerCmHandlesWithNcmp(final String jsonData) To: NetworkCmProxyController.updateDmiPluginRegistration() 


Code Block
languagejava
titleDmi Plugin Service
collapsetrue
 @Override
    public void registerCmHandles(final List<String> cmHandles) {
        final CmHandleOperation cmHandleOperation = new CmHandleOperation();
        cmHandleOperation.setDmiPlugin(dmiPluginProperties.getDmiServiceName());
        final List<CreatedCmHandle> createdCmHandleList = new ArrayList<>();
        for (final String cmHandle: cmHandles) {
            final CreatedCmHandle createdCmHandle = new CreatedCmHandle();
            createdCmHandle.setCmHandle(cmHandle);
            createdCmHandleList.add(createdCmHandle);
        }
        cmHandleOperation.setCreatedCmHandles(createdCmHandleList);
        final String cmHandlesJson;
        try {
            cmHandlesJson = objectMapper.writeValueAsString(cmHandleOperation);
        } catch (final JsonProcessingException e) {
            log.error("Parsing error occurred while converting cm-handles to JSON {}", cmHandles);
            throw new DmiException("Internal Server Error.",
                    "Parsing error occurred while converting given cm-handles object list to JSON ");
        }
        final ResponseEntity<String> responseEntity = ncmpRestClient.registerCmHandlesWithNcmp(cmHandlesJson);
        if (!(responseEntity.getStatusCode() == HttpStatus.CREATED)) {
            throw new CmHandleRegistrationException(responseEntity.getBody());
        }
    }


Code Block
languagejava
titleDMI Plugin REST
collapsetrue
/**
     * Register a cmHandle with NCMP using a HTTP call.
     * @param jsonData json data
     * @return the response entity
     */
    public ResponseEntity<String> registerCmHandlesWithNcmp(final String jsonData) {
        final var ncmpRegistrationUrl = buildNcmpRegistrationUrl();
        final var httpHeaders = new HttpHeaders();
        httpHeaders.setBasicAuth(cpsProperties.getAuthUsername(), cpsProperties.getAuthPassword());
        httpHeaders.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
        final var httpEntity = new HttpEntity<>(jsonData, httpHeaders);
        return restTemplate.postForEntity(ncmpRegistrationUrl, httpEntity, String.class);
    }

    private String buildNcmpRegistrationUrl() {
        return UriComponentsBuilder
            .fromHttpUrl(cpsProperties.getBaseUrl())
            .path(cpsProperties.getDmiRegistrationUrl())
            .toUriString();
    }



Code Block
languagejava
titleNCMP REST
collapsetrue
 /**
     * Update DMI Plugin Registration (used for first registration also).
     * @param restDmiPluginRegistration the registration data
     */
    @Override
    public ResponseEntity<Void> updateDmiPluginRegistration(
        final @Valid RestDmiPluginRegistration restDmiPluginRegistration) {
        final DmiPluginRegistration dmiPluginRegistration =
            convertRestObjectToJavaApiObject(restDmiPluginRegistration);
        networkCmProxyDataService.updateDmiPluginRegistration(dmiPluginRegistration);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }



Code Block
languagejava
titleNCMP Service
collapsetrue
 @Override
    public void updateDmiPluginRegistration(final DmiPluginRegistration dmiPluginRegistration) {
        try {
            final List<PersistenceCmHandle> persistenceCmHandles =
                new ArrayList<>();
            for (final CmHandle cmHandle: dmiPluginRegistration.getCreatedCmHandles()) {
                final PersistenceCmHandle persistenceCmHandle = new PersistenceCmHandle();
                persistenceCmHandle.setDmiServiceName(dmiPluginRegistration.getDmiPlugin());
                persistenceCmHandle.setId(cmHandle.getCmHandle());
                persistenceCmHandle.setAdditionalProperties(cmHandle.getCmHandleProperties());
                persistenceCmHandles.add(persistenceCmHandle);
            }
            final PersistenceCmHandlesList persistenceCmHandlesList = new PersistenceCmHandlesList();
            persistenceCmHandlesList.setCmHandles(persistenceCmHandles);
            final String cmHandleJsonData = objectMapper.writeValueAsString(persistenceCmHandlesList);
            cpsDataService.saveListNodeData(NCMP_DATASPACE_NAME, NCMP_ANCHOR_NAME, NCMP_DATA_TOP_PATH,
                cmHandleJsonData);
        } catch (final JsonProcessingException e) {
            throw new DataValidationException(
                "Parsing error occurred while processing DMI Plugin Registration" + dmiPluginRegistration, e
                .getMessage(), e);
        }
    }


Return cmHandleJsonData from updateDmiPluginRegistration() in NetworkCmProxyDataService

Append deriving modules after line 127 in method updateDmiPluginRegistration() in NetworkCmProxyDataController

deriveModulesForCmHandle(cmHandleJsonData);


get cm handles from string
call dmi to get modules for this cmhandle
compare with cps and get delta
call dmi for delta modules
return 
Map<String, String> newYangResourcesModuleNameToContentMap