This tutorial will show how to migrate the management of existing services from NFMP to NSP.
Each step of the process will be demonstrated using the NSP Service Fulfillment GUI and the RESTCONF API
Note
This tutorial has been tested with and supported for NSP 23.4
Note
Failure to verify that the intent type supports the service attributes can result in missing configuration if the service is synchronized with the intent (push-to-network)
All of the requests used in the tutorial are in the Brownfield Service Migration collection
SF GUI
Navigate to the INVENTORY tab and select Customers from the drop down menu. Click the + CREATE button to bring up the open the Create a customer form. Complete the required fields and select CREATE
OSS GUI
Use the following request to create the required customer
POST /restconf/data/nsp-customer:customers
{
"customer": [
{
"id" : 1,
"name" : "Default_Customer",
"description" : "Default Customer for Service Fulfillment",
"phone-number" : "1-800-555-1234",
"contact" : "Customer Name"
}
]
}
SF GUI
From the SERVICES tab, search for the service name with an Unknown Life Cycle State.
OSS
Use the following request to identify the service-id of the service to be migrated. (See the tutorial postman collection for examples to identify other service types)
Request:
POST /restconf/operations/nsp-inventory:find
{
"nsp-inventory:input": {
"xpath-filter": "/nsp-service:services/service-layer/eline[containsIgnoreCase(name,\"Brownfield EPIPE test\")]",
"depth": "4",
"filter-ext": [
{
"name": "service_slc_state_equals_unknown",
"params": [
{
"name": "sourceSystem",
"value-string": "fdn:realm:sam"
}
]
}
],
"fields":"admin-state;description;name;composite-service;ne-service-id;oper-state;service-id"
}
}
Response:
{
"nsp-inventory:output": {
"data": [
{
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']",
"nsp-model:last-modified-time": "2023-04-12T10:28:01.436Z",
"nsp-model:sources": [
"fdn:realm:sam:svc-mgr:service-3"
]
},
"service-id": "Brownfield EPIPE test:3:sam",
"name": "Brownfield EPIPE test",
"oper-state": "disabled",
"description": "N/A",
"admin-state": "unlocked",
"ne-service-id": "3"
}
],
"end-index": 0,
"start-index": 0,
"total-count": 1
}
}
If the services being onboarded contain objects that exist on MDC managed devices, then it is necessary to perform service stitching. The following request can be used to check the orphan sites table to check if service stitching is required. The service-type and algorithm used need to align with the service being stitched. See Service Fulfillment Service Stitching for more info
POST /restconf/operations/nsp-inventory:find
{
"input" : {
"xpath-filter": "/nsp-sync:sites"
}
}
If any sites are found in the orphaned sites table, use the following request to stitch the service
POST /restconf/data/nsp-service-intent:stitchservices
{
"input": {
"service-type":"eline",
"algorithm":"vcid",
"sites":["{{nodeA}}", "{{nodeB}}"]
}
}
SF GUI
Use the action menu to associate a template with the service
From the pop up menu select the appropriate template and click CONFIRM
The service will now be managed by SF and will enter a deployed and aligned state
OSS
Use the following request to associate the appropriate template with the service-id
Note: One or more services can be associated with the same template using the same request
POST /restconf/data/nsp-service-intent:create-intent-from-services
{
"input": {
"template-name": "epipe",
"service-ids": [
"Brownfield EPIPE test:3:sam"
]
}
}
When the service has been successfully associated with a service template, the following notification will be seen on the nsp-yang-model.change-notif topic
{
"nsp-model-notification:object-modification": {
"changes": [
{
"name": "olc-state",
"old-value": "saved",
"new-value": "deployed"
}
],
"schema-nodeid": "/nsp-service-intent:intent-base/intent",
"instance-id": "/nsp-service-intent:intent-base/intent[service-name\u003d\u0027Brownfield EPIPE test:3:sam\u0027][intent-type\u003d\u0027epipe\u0027]",
"context": "sf_app",
"tree": {
"/nsp-service-intent:intent-base/intent": {
"@": {
"nsp-model:schema-nodeid": "/nsp-service-intent:intent-base/intent",
"nsp-model:identifier": "/nsp-service-intent:intent-base/intent[service-name\u003d\u0027Brownfield EPIPE test:3:sam\u0027][intent-type\u003d\u0027epipe\u0027]"
}
}
},
"event-time": "2023-04-12T10:35:41.883Z"
}
}
SF GUI
From the action menu, run an Audit config on the service
If the service audit is successful, then the Alignment State will remain Aligned, however if the audit discovers a discrepancy a pop up window will appear detailing the misaligned object and the service will enter a Misaligned state
OSS
Use the following request to perform an audit on the service
Request:
POST /restconf/data/nsp-service-intent:audit
{
"input": {
"intent-type": "epipe",
"service-name": "Brownfield EPIPE test:3:sam"
}
}
If the service aligned, the following response will be received
Response:
{
"ibn:output": {
"audit-report": {
"intent-type": "epipe",
"target": "Brownfield EPIPE test:3:sam"
}
}
}
When the intent has been audited successfully, the following notification will be seen on the nsp-yang-model.change-notif topic
{
"nsp-model-notification:object-modification": {
"changes": [
{
"name": "misaligned",
"old-value": true,
"new-value": false
}
],
"schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc",
"instance-id": "/nsp-service:services/service-layer/eline[service-id\u003d\u0027Brownfield EPIPE test:3:sam\u0027]/service-extension:eline-svc",
"context": "sf_app",
"tree": {
"/nsp-service:services/service-layer/eline/service-extension:eline-svc": {
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id\u003d\u0027Brownfield EPIPE test:3:sam\u0027]/service-extension:eline-svc",
"nsp-model:sources": []
}
}
},
"event-time": "2023-04-12T10:37:21.161Z"
}
}
If the service audit discovers a desicrepancy, the response will show the misaligned objects
{
"ibn:output": {
"audit-report": {
"misaligned-attribute": [
{
"device-name": "Brownfield EPIPE test:75:sam",
"name": "epipe.Site|svc-mgr:service-83:10.10.10.1|mtu",
"expected-value": "1400",
"actual-value": "1450"
}
],
"intent-type": "epipe",
"target": "Brownfield EPIPE test:83:sam"
}
}
}
If a misalignment was detected at step 5, the discrepancy should be investigated to determine if the misalignment should be aligned with the intent (push-to-network) or the intent should be updated from the network (pull-from-network)
SF GUI
From the Action menu, Align the service either by pushing the config to the network or by pulling the config from the network
OSS
The following request can be used to synchronize the service to the intent ( push-to-network)
Request:
POST /restconf/data/nsp-service-intent:synchronize
{
"input": {
"intent-type": "epipe",
"service-name": "Brownfield EPIPE test:3:sam"
}
}
Successful Response:
{
"response": {
"data": {},
"errors": {}
}
}
When the intent has been aligned successfully, the following notification will be seen on the nsp-yang-model.change-notif topic
{
"nsp-model-notification:object-modification": {
"changes": [
{
"name": "task-response",
"old-value": null,
"new-value": "success"
}
],
"schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/deployer-job-details/task-details",
"instance-id": "/nsp-service:services/service-layer/eline[service-id\u003d\u0027Brownfield EPIPE test:3:sam\u0027]/service-extension:eline-svc/deployer-job-details/task-details[task-name\u003d\u0027Node-NFMP-1-1681296327325\u0027]",
"context": "sf_app",
"tree": {
"/nsp-service:services/service-layer/eline/service-extension:eline-svc/deployer-job-details/task-details": {
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/deployer-job-details/task-details",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id\u003d\u0027Brownfield EPIPE test:3:sam\u0027]/service-extension:eline-svc/deployer-job-details/task-details[task-name\u003d\u0027Node-NFMP-1-1681296327325\u0027]",
"nsp-model:sources": []
}
}
},
"event-time": "2023-04-12T10:45:30.944Z"
}
}
The following request can be used to synchronize the intent from the network data (pull-from-network)
POST /restconf/data/nsp-service-intent:create-intent-from-services
{
"input": {
"template-name": "epipe",
"service-ids": [
"Brownfield EPIPE test:3:sam"
]
}
}
Response:
{
"response": {
"status": 0,
"startRow": 0,
"endRow": 0,
"totalRows": 1,
"data": {
"jobs-successfully-created": [
{
"service-id": "Brownfield EPIPE test:3:sam",
"job-name": "map-service:Brownfield EPIPE test:3:sam:epipe-1681297038844",
"template-name": "epipe"
}
],
"jobs-failed-creation": []
},
"errors": []
}
}
When the intent has been aligned successfully, the following notification will be seen on the nsp-yang-model.change-notif topic
{
"nsp-model-notification:object-modification": {
"changes": [
{
"name": "last-audited-time",
"old-value": "2023-04-12T10:37:21.075Z",
"new-value": "2023-04-12T10:57:28.320Z"
},
{
"name": "logs",
"old-value": [
"Service pull from network completed"
],
"new-value": [
"Service pull from network completed",
"Successfully completed service audit at 2023-04-12T10:57:28.340Z"
]
}
],
"schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/slc-details",
"instance-id": "/nsp-service:services/service-layer/eline[service-id\u003d\u0027Brownfield EPIPE test:3:sam\u0027]/service-extension:eline-svc/slc-details",
"context": "sf_app",
"tree": {
"/nsp-service:services/service-layer/eline/service-extension:eline-svc/slc-details": {
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/slc-details",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id\u003d\u0027Brownfield EPIPE test:3:sam\u0027]/service-extension:eline-svc/slc-details",
"nsp-model:sources": []
}
}
},
"event-time": "2023-04-12T10:57:28.391Z"
}
}
The following request can be used to check the status of the service
POST /restconf/operations/nsp-inventory:find
{
"input": {
"xpath-filter": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']",
"fields": "admin-state;description;name;composite-service;ne-service-id;oper-state;service-id;tenant;id;service-extension:cline-svc;service-extension:eline-svc;service-extension:elan-svc;service-extension:l3vpn-svc;service-extension:ies-svc;service-extension:mpr-backhaul-svc;service-extension:apipe-svc;service-extension:fpipe-svc;service-extension:ipipe-svc;service-extension:hpipe-svc;service-extension:mvpls-svc;custom-ui-extension:cline-svc;custom-ui-extension:eline-svc;custom-ui-extension:elan-svc;custom-ui-extension:l3vpn-svc;custom-ui-extension:ies-svc;custom-ui-extension:mpr-backhaul-svc;custom-ui-extension:apipe-svc;custom-ui-extension:fpipe-svc;custom-ui-extension:ipipe-svc;custom-ui-extension:hpipe-svc;custom-ui-extension:mvpls-svc"
}
}
Response:
{
"nsp-inventory:output": {
"data": [
{
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']",
"nsp-model:last-modified-time": "2023-04-12T10:28:01.436Z",
"nsp-model:sources": [
"fdn:realm:sam:svc-mgr:service-3"
]
},
"service-id": "Brownfield EPIPE test:3:sam",
"service-extension:eline-svc": {
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']/service-extension:eline-svc",
"nsp-model:creation-time": "2023-04-12T10:31:55+00:00",
"nsp-model:last-modified-time": "2023-04-12T10:45:28+00:00",
"nsp-model:sources": []
},
"slc-state": "deployed",
"job-id": "",
"intent-type": "epipe",
"intent-type-version": "1",
"intent-instance-identifier": "Brownfield EPIPE test:3:sam",
"template-name": "epipe",
"misaligned": false,
"composite-service": null,
"deployer-job-details": {
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/deployer-job-details",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']/service-extension:eline-svc/deployer-job-details",
"nsp-model:creation-time": "2023-04-12T10:45:27+00:00",
"nsp-model:last-modified-time": "2023-04-12T10:45:27+00:00",
"nsp-model:sources": []
},
"job-name": "epipe_Brownfield EPIPE test:3:sam_1681296327327",
"reference": "{\"intenttype\":\"epipe\",\"intentversion\":\"1\",\"target\":\"Brownfield EPIPE test:3:sam\"}",
"task-details": [
{
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/deployer-job-details/task-details",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']/service-extension:eline-svc/deployer-job-details/task-details[task-name='Node-NFMP-1-1681296327325']",
"nsp-model:creation-time": "2023-04-12T10:45:27+00:00",
"nsp-model:last-modified-time": "2023-04-12T10:45:30+00:00",
"nsp-model:sources": []
},
"task-name": "Node-NFMP-1-1681296327325",
"request-id": null,
"task-response": "success",
"deployer-response": null,
"edit-ids": []
}
]
},
"deployer-details": {
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/deployer-details",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']/service-extension:eline-svc/deployer-details",
"nsp-model:creation-time": "2023-04-12T10:45:27+00:00",
"nsp-model:last-modified-time": "2023-04-12T10:45:30+00:00",
"nsp-model:sources": []
},
"overall-deployer-state": "success",
"deployer-info": [
{
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/deployer-details/deployer-info",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']/service-extension:eline-svc/deployer-details/deployer-info[deployer-id='Node-NFMP-1-1681296327325']",
"nsp-model:creation-time": "2023-04-12T10:45:30+00:00",
"nsp-model:last-modified-time": "2023-04-12T10:45:30+00:00",
"nsp-model:sources": []
},
"deployer-id": "Node-NFMP-1-1681296327325",
"deployer-state": "success",
"ne-id": null,
"additional-info": "success"
}
]
},
"slc-details": {
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/service-extension:eline-svc/slc-details",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']/service-extension:eline-svc/slc-details",
"nsp-model:creation-time": "2023-04-12T10:31:56+00:00",
"nsp-model:last-modified-time": "2023-04-12T10:45:28+00:00",
"nsp-model:sources": []
},
"creation-time": "2023-04-12T10:35:39.759Z",
"created-by": "admin",
"last-updated-time": "2023-04-12T10:45:27.972Z",
"updated-by": "admin",
"occurred-at": "2023-04-12T10:35:41.922Z",
"last-saved-by": "admin",
"last-saved-time": "2023-04-12T10:35:39.759Z",
"from-state": "deployed",
"to-state": "deployed",
"workflow-id": null,
"blocking": false,
"workflow-execution-id": null,
"workflow-execution-state": null,
"workflow-execution-time": 0,
"workflow-execution-timeout": 0,
"last-audited-by": "admin",
"last-audited-time": "2023-04-12T10:37:21.075Z",
"last-alignment-action": "push-to-network",
"last-alignment-by": "admin",
"last-alignment-time": "2023-04-12T10:45:27.972Z",
"logs": [
"Service pull from network completed",
"not able to parse errornull",
"Successfully completed service audit at 2023-04-12T10:37:21.093Z",
"Successfully synchronized service to network at 2023-04-12T10:44:39.272Z",
"Service deployment failed : {\"response\":\"com.nokia.nsp.mdt.mediator.sbi.InvalidSbiUrlException: Cannot find NFM-P SBI URL in Zookeeper.\",\"objectFullName\":\"\"}",
"Successfully synchronized service to network at 2023-04-12T10:45:28.002Z"
]
}
},
"name": "Brownfield EPIPE test",
"oper-state": "disabled",
"description": "N/A",
"admin-state": "unlocked",
"id": "3",
"ne-service-id": "3",
"tenant": [
{
"@": {
"nsp-model:schema-nodeid": "/nsp-service:services/service-layer/eline/tenant",
"nsp-model:identifier": "/nsp-service:services/service-layer/eline[service-id='Brownfield EPIPE test:3:sam']/tenant[id='1']",
"nsp-model:last-modified-time": "2023-04-12T10:44:34.271Z",
"nsp-model:sources": [
"fdn:realm:sam:svc-mgr:service-3@customerDetails"
]
},
"name": "Default",
"id": "1"
}
]
}
],
"end-index": 0,
"start-index": 0,
"total-count": 1
}
}