You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

References

CPS-837 - Getting issue details... STATUS

Issues/Decisions

#IssueNotesDecision
1Add/Remove/Update properties as part of CM-handle registration update.

Scope

  • Within the NCMP CM-Handle registration post request add functionality to add/remove properties of an existing CM-Handle.
  • Properties are removed by setting the value to null in the update registration request. (Only applicable when updatedCmHandles json tag is present)
  • Both Additional and Public properties should be taken care off as part of the update.

Analysis

Proposal

ScenarioURIPayload/Input RequestSuggested Code / ChangesComments
Request to create the cmHandle

POST

{ncmpRoot}/ncmpInventory/v1/ch/

{
  "dmiPlugin": "onap.dmi.plugin",      
  "createdCmHandles": [
    {
      "cmHandle": "myHandle1",
      "cmHandleProperties": {
        "prop1": "value1",
        "prop2": "value2",
        "prop3": "value3"
      }
    }
  ]
}

No Impact. It will create the cmHandle.Existing behaviour.
Request has updatedCmHandles tag present in the incoming request.

POST

{ncmpRoot}/ncmpInventory/v1/ch/

{
  "dmiPlugin": "onap.dmi.plugin",     
  "updatedCmHandles": [
    {
      "cmHandle": "myHandle1",
      "cmHandleProperties": {
        "prop1": null,       //case-1
        "prop2": "newValue2", //case-2
        "prop4": "value4"       //case-3 
      }
    }
  ]
}

case-1 : Property which needs to be removed must be explicitly set to null 

case-2: Property which needs to be updated can have the new values in the incoming request.

case-3: Property which needs to be added can be present in the form of "name" : "value" as seen above.

  1. Since the incoming request has updatedCmHandles tag hence we need to check if there are properties eligible to be updated.

  2. Iterate over the incoming cmHandles and for each cmHandle do the following.
    1. Form the xpath from the incoming request.

      Form xpath
      final String targetXpath = "/dmi-registry/cm-handles[@id='" + cmHandleID + "']";
      eg : "/dmi-registry/cm-handles[@id=myHandle1]"
    2. Get the dataNodes using the above xpath been created including all the leaves (leaves denotes the attributes).

      Get Data Nodes using xpath
      final DataNode dataNode = cpsDataService.getDataNode(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, targetXpath, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS);
    3. Get handle of the leaves(with existing data) and apply the changes only to the attribute which are present in the incoming request. The attributes which are explicitly set to null will be removed  and others which are present will be updated. The attributes which are not specified will not be touched.

      Core logic to add or remove attributes
      if (leaves.containsKey(targetAttributeKey)) {
                  if (targetAttributeValue == null) {
                      log.info("Removing the attribute with ( key : {} , existingValue : {} )", targetAttributeKey,
                              leaves.get(targetAttributeKey));
                      leaves.remove(targetAttributeKey);
                  } else {
                      log.info("Updating the attribute with ( key : {} , existingValue : {} to newValue : {}",
                              targetAttributeKey, leaves.get(targetAttributeKey), targetAttributeValue);
                      leaves.put(targetAttributeKey, targetAttributeValue);
                  }
              }



  3. Perform step-2 for all the cmHandles and collect the updated dataNodes.
  4. Now since from step-3 we have a Collection<DataNode> which have the updated changes , we can make use of replaceListContent method to apply our changes.

    public void replaceListContent(final String dataspaceName, final String anchorName, final String parentNodeXpath, final Collection<DataNode> dataNodes, final OffsetDateTime observedTimestamp)
    @Override
        public void replaceListContent(final String dataspaceName, final String anchorName, final String parentNodeXpath,
                                       final Collection<DataNode> dataNodes, final OffsetDateTime observedTimestamp) {
            cpsDataPersistenceService.replaceListContent(dataspaceName, anchorName, parentNodeXpath, dataNodes);
            processDataUpdatedEventAsync(dataspaceName, anchorName, observedTimestamp, parentNodeXpath, Operation.UPDATE);
        }







Requirement URI
Comment

NCMP-008

Register or update public cmhandle properties


{ncmpRoot}/ncmpInventory/v1/ch/
Scenario : DMI notifies NCMP of new, updated or removed cmhandles
Method : POST
URI : {ncmpRoot}/ncmpInventory/v1/ch/
Header :
Content-Type: application/json


Request Body

Request Body : {
      "dmiPlugin" : "onap.dmi.plugin",
      "createdCmHandles" : [ {   "cmHandle" : "cmHandle1",
                                 "cmHandleProperties" : {
                                    "prop1" : "value1",
                                    "prop2" : "value2",


                                    "prop3" : "value3"
                                  }        

                                                                         "publicCmHandleProperties" :  {     
                                                                                "hostedBy" : "cmhandle-5678"                                                                                       
                                                                                 "samplePropertyName2" : "samplePropertyValue2

                                  }

                             },
                             {..}
                           ],

      "updatedCmHandles" : [
                             {

                                 "cmHandle" : "ds4errr77",
                                 "cmHandleProperties" : { # To remove a property, set the value to null
                                    "samplePropertyName1" : "updatedSamplePropertyValue1",
                                    "samplePropertyName2" : null  # This property will be removed
                                  }        

                                                                         "publicCmHandleProperties" :  {      # To remove a property, set the value to null
                                                                               "hostedBy" : "cmhandle-11213",
                                                                                "samplePublicPropertyName1" : "updatedSamplePublicPropertyValue2"

                                  }


                             },
                             {..}

                           ],
      "removedCmHandles" : [ "node-1", "node-2" , ... ]
  }



json attributes:

  • "dmiPlugin" resolvable servicename
  • "createdCmHandles" used for initial cm handle registrations or subsequent
    cmhandle creations
  • "updatedCmHandles"
    Used for updates to cmhandles. Same structure as for create handles
  • "removedCmHandles"  array of cmhandles that have been deleted
    from the network (no additional properties


December 2021 Yang Model for Public Properties Support


December 2021 Yang Model
module dmi-registry {

  yang-version 1.1;

  namespace \"org:onap:cps:ncmp\";

  prefix dmi-reg;

  organization \"Nordix Foundation\";

  contact \"rahul.tyagi@est.tech\";

  revision \"2021-12-13\" {
   description
   \"Added support for new list of public additional properties for a Cm-Handle which are exposed to clients of the NCMP interface. \";
  }

  container dmi-registry {

    list cm-handles {

      key \"id\";

      leaf id {
        type string;
      }

      leaf dmi-service-name {
        type string;
      }

      leaf dmi-data-service-name {
        type string;
      }

      leaf dmi-model-service-name {
        type string;
      }

      list additional-properties {
        key \"name\";
        leaf name {
          type string;
        }
        leaf value {
          type string;
        }
      }
      list public-properties {
        key \"name\";
        leaf name {
          type string;
        }
        leaf value {
          type string;
        }
      }
    }
  }
}  
  • No labels