.. This work is licensed under a Creative Commons Attribution 4.0 .. International License. http://creativecommons.org/licenses/by/4.0 .. Copyright 2019 ONAP Contributors. All rights reserved. .. _doc_guide_user_ser_inst_so1: A La Carte mode Service Instantiation via ONAP SO API ===================================================== Using ONAP SO API in "A La Carte" mode, you need to send several requests, depending on the service model composition. For example, if your service model is composed of 2 VNF and a Network, you will have to build and send : * a request to SO to create the "service instance" object * a request to SO to create the VNF 1 instance object * a request to SDNC to declare VNF 1 instance parameters and values (SDNC preload) * a request to SO to create the Vf-module 1 instance object * a request to SO to create the VNF 2 instance object * a request to SDNC to declare VNF 2 instance parameters and values (SDNC preload) * a request to SO to create the Vf-module 2 instance object * a request to SO to create the Network instance object Example to request a service instance directly to ONAP SO TO BE COMPLETED In the response, you will obtain the serviceOrderId value. Then you have the possibility to check about the SO request (here after the requestId=e3ad8df6-ea0d-4384-be95-bcb7dd39bbde). This will allow you to get the serviceOrder Status (completed, failed...) :: curl -X GET \ http://so.api.simpledemo.onap.org:30277/onap/so/infra/orchestrationRequests/v6/e3ad8df6-ea0d-4384-be95-bcb7dd39bbde \ -H 'Accept: application/json' \ -H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \ -H 'Content-Type: application/json' \ -H 'X-FromAppId: AAI' \ -H 'X-TransactionId: get_aai_subscr' \ -H 'cache-control: no-cache' To instantiate a VNF, you need to build a complex request. All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model. :: curl -X POST \ http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/vnfs \ -H 'Accept: application/json' \ -H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \ -H 'Content-Type: application/json' \ -H 'X-FromAppId: AAI' \ -H 'X-TransactionId: get_aai_subscr' \ -H 'cache-control: no-cache' \ -d '{ "requestDetails": { "requestInfo": { "productFamilyId": "0d463b0c-e559-4def-8d7b-df64cfbd3159", "instanceName": "my_service_vnf_instance_001", "source": "VID", "suppressRollback": false, "requestorId": "test" }, "modelInfo": { "modelType": "vnf", "modelInvariantId": "4e66bb92-c597-439e-822d-75aaa69b13d4", "modelVersionId": "3b6ba59c-287c-449e-a1da-2db49984a087", "modelName": "my_service_VF", "modelVersion": "1.0", "modelCustomizationId": "", "modelCustomizationName": "" }, "requestParameters": { "userParams": [], "aLaCarte": true, "testApi": "VNF_API" }, "cloudConfiguration": { "lcpCloudRegionId": "my_cloud_site", "tenantId": "5906b9b8fd9642df9ba1c9e290063439" }, "lineOfBusiness": { "lineOfBusinessName": "test_LOB" }, "platform": { "platformName": "test_platform" }, "relatedInstanceList": [{ "relatedInstance": { "instanceId": "95762b50-0244-4723-8fde-35f911db9263", "modelInfo": { "modelType": "service", "modelName": "my-service-model", "modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da", "modelVersion": "1.0", "modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159" } } }] } }' To instantiate a VF module, you need to build two complex requests All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model. 1st request is called a "SDNC-preload" for a VNF object and is used to store in SDNC some VNF parameters values that will be needed for the instantiation :: curl -X POST \ http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-vnf-topology-operation \ -H 'Accept: application/json' \ -H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \ -H 'Content-Type: application/json' \ -H 'X-FromAppId: API client' \ -H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \ -H 'cache-control: no-cache' \ -d '{ "input": { "request-information": { "notification-url": "onap.org", "order-number": "1", "order-version": "1", "request-action": "PreloadVNFRequest", "request-id": "test" }, "sdnc-request-header": { "svc-action": "reserve", "svc-notification-url": "http:\/\/onap.org:8080\/adapters\/rest\/SDNCNotify", "svc-request-id": "test" }, "vnf-topology-information": { "vnf-assignments": { "availability-zones": [], "vnf-networks": [], "vnf-vms": [] }, "vnf-parameters": [], "vnf-topology-identifier": { "generic-vnf-name": "my_service_vnf_instance_001", "generic-vnf-type": "", "service-type": "95762b50-0244-4723-8fde-35f911db9263", "vnf-name": "my_service_vfmodule_001", "vnf-type": "" } } } }' The 2nd request is to instantiate the VF module via ONAP SO (instance name must be identical in both requests) :: curl -X POST \ http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/vnfs/vfModules \ -H 'Accept: application/json' \ -H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \ -H 'Content-Type: application/json' \ -H 'X-FromAppId: AAI' \ -H 'X-TransactionId: get_aai_subscr' \ -H 'cache-control: no-cache' \ -d '{ "requestDetails": { "requestInfo": { "instanceName": "my_vfmodule_001", "source": "VID", "suppressRollback": false, "requestorId": "test" }, "modelInfo": { "modelType": "vfModule", "modelInvariantId": "", "modelVersionId": "", "modelName": "", "modelVersion": "1", "modelCustomizationId": "", "modelCustomizationName": "" }, "requestParameters": { "userParams": [], "testApi": "VNF_API", "usePreload": true }, "cloudConfiguration": { "lcpCloudRegionId": "my_cloud_site", "tenantId": "5906b9b8fd9642df9ba1c9e290063439" }, "relatedInstanceList": [{ "relatedInstance": { "instanceId": "95762b50-0244-4723-8fde-35f911db9263", "modelInfo": { "modelType": "service", "modelName": "my-service-model", "modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da", "modelVersion": "1.0", "modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159" } } }, { "relatedInstance": { "instanceId": "", "modelInfo": { "modelType": "vnf", "modelName": "my_service_model_VF", "modelInvariantId": "4e66bb92-c597-439e-822d-75aaa69b13d4", "modelVersion": "1.0", "modelVersionId": "3b6ba59c-287c-449e-a1da-2db49984a087", "modelCustomizationId": "", "modelCustomizationName": "" } } }] } }' To instantiate a Neutron Network, you need to build two complex request. All necessary parameters are available in the Tosca service template generated by SDC when you defined your service model. 1st request is the "SDNC-preload" for a network object: :: curl -X POST \ http://sdnc.api.simpledemo.onap.org:30202/restconf/operations/VNF-API:preload-network-topology-operation \ -H 'Accept: application/json' \ -H 'Authorization: Basic YWRtaW46S3A4Yko0U1hzek0wV1hsaGFrM2VIbGNzZTJnQXc4NHZhb0dHbUp2VXkyVQ==' \ -H 'Content-Type: application/json' \ -H 'X-FromAppId: API client' \ -H 'X-TransactionId: 0a3f6713-ba96-4971-a6f8-c2da85a3176e' \ -H 'cache-control: no-cache' \ -d '{ "input": { "request-information": { "request-id": "postman001", "notification-url": "http://so.onap.org", "order-number": "postman001", "request-sub-action": "SUPP", "request-action": "PreloadNetworkRequest", "source": "postman", "order-version": "1.0" }, "network-topology-information": { "network-policy": [], "route-table-reference": [], "vpn-bindings": [], "network-topology-identifier": { "network-role": "integration_test_net", "network-technology": "neutron", "service-type": "my-service-2", "network-name": "my_network_01", "network-type": "Generic NeutronNet" }, "provider-network-information": { "is-external-network": "false", "is-provider-network": "false", "is-shared-network": "false" }, "subnets": [ { "subnet-name": "my_subnet_01", "subnet-role": "OAM", "start-address": "192.168.90.0", "cidr-mask": "24", "ip-version": "4", "dhcp-enabled": "Y", "dhcp-start-address": "", "dhcp-end-address": "", "gateway-address": "192.168.90.1", "host-routes":[] } ] }, "sdnc-request-header": { "svc-action": "reserve", "svc-notification-url": "http://so.onap.org", "svc-request-id": "postman001" } } }' 2nd request is to instantiate the network via ONAP SO (instance name must be identical in both requests) :: curl -X POST \ http://so.api.simpledemo.onap.org:30277/onap/so/infra/serviceInstances/v6/95762b50-0244-4723-8fde-35f911db9263/networks \ -H 'Accept: application/json' \ -H 'Authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==' \ -H 'Content-Type: application/json' \ -H 'X-FromAppId: AAI' \ -H 'X-TransactionId: get_aai_subscr' \ -H 'cache-control: no-cache' \ -d '{ "requestDetails": { "requestInfo": { "instanceName": "my_network_01", "source": "VID", "suppressRollback": false, "requestorId": "demo", "productFamilyId": "b9ac88f7-0e1b-462d-84ac-74c3c533217c" }, "modelInfo": { "modelType": "network", "modelInvariantId": "0070b65c-48cb-4985-b4df-7c67ca99cd95", "modelVersionId": "4f738bed-e804-4765-8d22-07bb4d11f14b", "modelName": "Generic NeutronNet", "modelVersion": "1.0", "modelCustomizationId": "95534a95-dc8d-4ffb-89c7-091e2c49b55d", "modelCustomizationName": "Generic NeutronNet 0" }, "requestParameters": { "userParams": [], "aLaCarte": true, "testApi": "VNF_API" }, "cloudConfiguration": { "lcpCloudRegionId": "my_cloud_site", "tenantId": "5906b9b8fd9642df9ba1c9e290063439" }, "lineOfBusiness": { "lineOfBusinessName": "Test_LOB" }, "platform": { "platformName": "Test_platform" }, "relatedInstanceList": [{ "relatedInstance": { "instanceId": "95762b50-0244-4723-8fde-35f911db9263", "modelInfo": { "modelType": "service", "modelName": "my_service_model_name", "modelInvariantId": "11265d8c-2cc2-40e5-95d8-57cad81c18da", "modelVersion": "1.0", "modelVersionId": "0d463b0c-e559-4def-8d7b-df64cfbd3159" } } }] } }'