Brownfield Service Migrations from NFMP to NSP

Introduction

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

Pre-requisites

  1. The required service intent types have been created in Intent Manager and have been imported into Service Fulfillment and assigned to a template.
  2. Verify that the attributes of the service to be migrated are supported by the intent type. This can be achieved by comparing the CLI of the service to the yang module attributes of the intent either using the yang module in the intent or by checking the configuration form for the intent.

    If the pre-defined intent does not support all attributes, then the yang model for the service should be extended and the nfmp-mapper.js file enhanced to support the additional attributes.

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

Service Migration

Step 1: Create Customer

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"
        }
   ]
}

Step 2: Identify brownfield service

SF GUI
From the SERVICES tab, search for the service name with an Unknown Life Cycle State.

SF_step1

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
    }
}

Step 3: Service stitching of MD nodes

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}}"]
    }
}

Step 4: Associate service with template

SF GUI

Use the action menu to associate a template with the service

SF_step2

From the pop up menu select the appropriate template and click CONFIRM

SF_step2-1

The service will now be managed by SF and will enter a deployed and aligned state

SF_step2-2

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"
  }
}

Step 5: Audit the service

SF GUI

From the action menu, run an Audit config on the service

SF_step3-1

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

SF_step3-2

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"
        }
    }
}

Step 6: Align Service

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

SF_step4

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"
  }
}

Step 7: Check Status

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
    }
}

On this page