diff options
Diffstat (limited to 'docs/usage/usage/instantiation.rst')
-rw-r--r-- | docs/usage/usage/instantiation.rst | 485 |
1 files changed, 485 insertions, 0 deletions
diff --git a/docs/usage/usage/instantiation.rst b/docs/usage/usage/instantiation.rst new file mode 100644 index 0000000..642439e --- /dev/null +++ b/docs/usage/usage/instantiation.rst @@ -0,0 +1,485 @@ +Instantiation +############# + +Create business objects +----------------------- + +.. code:: Python + + from onapsdk.vid import LineOfBusiness, OwningEntity, Platform, Project + + vid_owning_entity = OwningEntity.create(OWNING_ENTITY) + vid_project = Project.create(PROJECT) + vid_platform = Platform.create(PLATFORM) + vid_line_of_business = LineOfBusiness.create(LINE_OF_BUSINESS) + +Instantiate a service (ALaCarte) +-------------------------------- + +.. code:: Python + + import time + from onapsdk.aai.cloud_infrastructure import CloudRegion, Tenant + from onapsdk.aai.business import Customer + from onapsdk.service import Service + from onapsdk.vid import LineOfBusiness, OwningEntity, Platform, Project + from onapsdk.so.instantiation import ServiceInstantiation + + # We assume that: + # - service is onboarded, + # - cloud region, customer, owning_entity and project have been already created, + # - cloud region has at least one tenant + # - customer has service subscription + # - service subscription is connected with cloud region and tenant + SERVICE_INSTANCE_NAME = "vFW-AlaCarte-1" + + service = Service(name="myService") + customer = Customer.get_by_global_customer_id(GLOBAL_CUSTOMER_ID) + cloud_region = CloudRegion.get_by_id( + cloud_owner=CLOUD_OWNER, + cloud_region_id=CLOUD_REGION + ) + tenant = next(cloud_region.tenants) + vid_owning_entity = OwningEntity(OWNING_ENTITY) + owning_entity = AaiOwningEntity.get_by_owning_entity_name(OWNING_ENTITY) + vid_project = Project(PROJECT) + + service_instantiation = ServiceInstantiation.instantiate_so_ala_carte( + service, + cloud_region, + tenant, + customer, + owning_entity, + vid_project, + service_instance_name=SERVICE_INSTANCE_NAME + ) + service_instantiation.wait_for_finish(): + print("Success") + else: + print("Instantiation failed, check logs") + +Instantiate a service (Macro) +----------------------------- + +.. code:: Python + + import time + from onapsdk.aai.cloud_infrastructure import CloudRegion, Tenant + from onapsdk.aai.business import Customer + from onapsdk.service import Service + from onapsdk.vid import LineOfBusiness, OwningEntity, Platform, Project + from onapsdk.so.instantiation import ( + ServiceInstantiation, + VnfInstantiation, + InstantiationParameter, + VnfParameters, + VfmoduleParameters + ) + + ... + VSPNAME = "vfwcds_VS" + VFNAME = "vfwcds_VF" + ... + vf = Vf(name=VFNAME) + ... + + # We assume that: + # - service is onboarded, + # - cloud region, customer, owning_entity and project have been already created, + # - cloud region has at least one tenant + # - customer has service subscription + # - service subscription is connected with cloud region and tenant + SERVICE_INSTANCE_NAME = "vFW-Macro-1" + + service = Service(name="myMacroService") + customer = Customer.get_by_global_customer_id(GLOBAL_CUSTOMER_ID) + cloud_region = CloudRegion.get_by_id( + cloud_owner=CLOUD_OWNER, + cloud_region_id=CLOUD_REGION + ) + tenant = next(cloud_region.tenants) + vid_owning_entity = OwningEntity(OWNING_ENTITY) + owning_entity = AaiOwningEntity.get_by_owning_entity_name(OWNING_ENTITY) + vid_project = Project(PROJECT) + + ########################################################################### + ######## VFModule parameters ############################################## + ########################################################################### + vfm_base=[ + InstantiationParameter(name="sec_group", value=TENANT_SEC_GROUP), + InstantiationParameter(name="public_net_id", value=PUBLIC_NET) + ] + + vfm_vsn=[ + InstantiationParameter(name="sec_group", value=TENANT_SEC_GROUP), + InstantiationParameter(name="public_net_id", value=PUBLIC_NET) + ] + + vfm_vfw=[ + InstantiationParameter(name="sec_group", value=TENANT_SEC_GROUP), + InstantiationParameter(name="public_net_id", value=PUBLIC_NET) + ] + + vfm_vpkg=[ + InstantiationParameter(name="sec_group", value=TENANT_SEC_GROUP), + InstantiationParameter(name="public_net_id", value=PUBLIC_NET) + ] + + base_paras=VfmoduleParameters("base_template",vfm_base) + vpkg_paras=VfmoduleParameters("vpkg",vfm_vpkg) + vsn_paras=VfmoduleParameters("vsn",vfm_vsn) + vfw_paras=VfmoduleParameters("vfw",vfm_vfw) + + ########################################################################### + ######## VNF parameters ################################################### + ########################################################################### + + vnf_vfw=[ + InstantiationParameter(name="onap_private_net_id", value=ONAP_PRIVATE_NET), + InstantiationParameter(name="onap_private_subnet_id", value=ONAP_PRIVATE_SUBNET), + InstantiationParameter(name="pub_key", value="ssh-rsa AAAAB3NzaC1yc2EAA\ + AADAQABAAABAQDFBOB1Ea2yej68aqIQw10kEsVf+rNoxT39qrV8JvvTK2yhkniQka1t2oD9h6DlXOL\ + M3HJ6nBegWjOasJmIbminKZ6wvmxZrDVFJXp9Sn1gni0vtEnlDgH14shRUrFDYO0PYjXRHoj7QXZMY\ + xtAdFSbzGuCsaTLcV/xchLBQmqZ4AGhMIiYMfJJF+Ygy0lbgcVmT+8DH7kUUt8SAdh2rRsYFwpKANn\ + QJyPV1dBNuTcD0OW1hEOhXnwqH28tjfb7uHJzTyGZlTmwTs544teTNz5B9L4yT3XiCAlMcaLOBMfBT\ + KRIse+NkiTb+tc60JNnEYR6MqZoqTea/w+YBQaIMcil"), + InstantiationParameter(name="image_name", value=IMAGE_NAME), + InstantiationParameter(name="flavor_name", value=FLAVOR_NAME), + InstantiationParameter(name="sec_group", value=TENANT_SEC_GROUP), + InstantiationParameter(name="install_script_version", value="1.4.0-SNAPSHOT"), + InstantiationParameter(name="demo_artifacts_version", value="1.4.0-SNAPSHOT"), + InstantiationParameter(name="cloud_env", value=CLOUD_TYPE), + InstantiationParameter(name="public_net_id", value=PUBLIC_NET), + InstantiationParameter(name="aic-cloud-region", value=CLOUD_REGION) + ] + + vnf_paras=VnfParameters("vfwcds_VF", vnf_vfw, + [base_paras, vpkg_paras, vsn_paras, vfw_paras]) + + # You must define for each VNF and its vFModule the parameters, + # otherwise they stay empty. + # The matching critera are: + # - VnfParameters.name must match VNF ModelInstanceName + # (see above "vfwcds_VF") + # - VfmoduleParameters.name must match substring in vfModule "instanceName" + # (e.g. "vfwcds_vf0..VfwcdsVf..vsn..module-1") + + service_instantiation = ServiceInstantiation.instantiate_macro( + service, + cloud_region, + tenant, + customer, + owning_entity, + vid_project, + vid_line_of_business, + vid_platform, + service_instance_name=SERVICE_INSTANCE_NAME, + vnf_parameters=[vnf_paras] + ) + + service_instantiation.wait_for_finish(): + print("Success") + else: + print("Instantiation failed, check logs") + +Instantiate a service using SO service template (Macro) +------------------------------------------------------- + +To provide more control on the SO macro instantiation, you can define your service as follows: + +.. code:: Yaml + + myservice: + subscription_service_type: myservice + vnfs: + - model_name: myvfmodel + instance_name: myfirstvnf + parameters: + param1: value1 + processing_priority: 1 + vf_modules: + - instance_name: mysecondvfm + model_name: base + processing_priority: 2 + parameters: + param-vfm1: value-vfm1 + - instance_name: myfirstvfm + model_name: base + processing_priority: 1 + parameters: + param-vfm1: value-vfm1 + - model_name: myvfmodel + instance_name: mysecondvnf + parameters: + param1: value1 + processing_priority: 2 + vf_modules: + - instance_name: myfirstvfm + model_name: base + processing_priority: 1 + parameters: + param-vfm1: value-vfm1 + - instance_name: mysecondvfm + model_name: base + processing_priority: 2 + parameters: + param-vfm1: value-vfm1 + +.. code:: Python + + from onapsdk.aai.business import Customer, OwningEntity, Project, LineOfBusiness, Platform + from onapsdk.aai.cloud_infrastructure import CloudRegion + from onapsdk.sdc.service import Service + from onapsdk.so.instantiation import ServiceInstantiation + from yaml import load + + so_yaml_service = "/path/to/yaml/service" + with open(so_yaml_service, "r") as yaml_template: + so_service_data = load(yaml_template) + + # We assume that: + # - service is onboarded, + # - cloud region, customer, owning_entity and project have been already created, + # - cloud region has at least one tenant + # - customer has service subscription + # - service subscription is connected with cloud region and tenant + + service = Service(next(iter(so_service_data.keys()))) + so_service = SoService.load(so_service_data[service.name]) + SERVICE_INSTANCE_NAME = "my_svc_instance_name" + + customer = Customer.get_by_global_customer_id(GLOBAL_CUSTOMER_ID) + cloud_region = CloudRegion.get_by_id( + cloud_owner=CLOUD_OWNER, + cloud_region_id=CLOUD_REGION + ) + tenant = next(cloud_region.tenants) + owning_entity = OwningEntity(OWNING_ENTITY) + project = Project(PROJECT) + line_of_business = LineOfBusiness(LINE_OF_BUSINESS) + platform = Platform(PLATFORM) + + service_instantiation = ServiceInstantiation.instantiate_macro( + sdc_service=service, + customer=customer, + owning_entity=owning_entity, + project=project, + line_of_business=line_of_business, + platform=platform, + cloud_region=cloud_region, + tenant=tenant, + service_instance_name=SERVICE_INSTANCE_NAME, + so_service=so_service + ) + + +Instantiate VNF (Macro) +--------------- + +Since ONAP Istanbul the creation or deletion of VNFs in macro mode is supported. Examples below: + +.. code:: Python + + import time + from onapsdk.aai.business import Customer + from onapsdk.vid import LineOfBusiness, Platform + + # We assume that + # - service has been already instantiated, + # - line of business and platform are created + + SERVICE_INSTANCE_NAME = "service_instance_demo" + VNF_INSTANCE_NAME = "new_vnf_instance" + + customer = Customer.get_by_global_customer_id(GLOBAL_CUSTOMER_ID) + service_subscription = next(customer.service_subscriptions) + service_instance = service_subscription.get_service_instance_by_name(SERVICE_INSTANCE_NAME) + vnf = service_subscription.sdc_service.vnfs[0] + vid_line_of_business = LineOfBusiness.create(LINE_OF_BUSINESS) + vid_platform = Platform.create(PLATFORM) + + ########################################################################### + ######## VFModule parameters ############################################## + ########################################################################### + + myfirstvfm_params = [ + InstantiationParameter(name="param-vfm1", value="value-vfm1") + ] + + vf1_params = VfmoduleParameters("myfirstvfm", myfirstvfm_params) + + ########################################################################### + ######## VNF parameters ################################################### + ########################################################################### + + vnf_param_list = [ + InstantiationParameter(name="param1", value="value1") + ] + + vnf_paras = VnfParameters("myvfmodel", vnf_param_list, [vf1_params]) + + vnf_instantiation = service_instance.add_vnf( + vnf=vnf, + line_of_business=vid_line_of_business, + platform=vid_platform, + vnf_instance_name=VNF_INSTANCE_NAME, + vnf_parameters=[vnf_paras], + a_la_carte=False + ) + + vnf_instantiation.wait_for_finish(): + print("Success") + else: + print("Instantiation failed, check logs") + + +Instantiate VNF using SO service template (Macro) +--------------- + +To provide more control on the SO macro instantiation for new vnf, you can define your vnf as follows: + +.. code:: Yaml + + model_name: myvfmodel + instance_name: mynewvnf + parameters: + param1: value1 + vf_modules: + - instance_name: mysecondvfm + model_name: base + processing_priority: 2 + parameters: + param-vfm1: value-vfm1 + - instance_name: myfirstvfm + model_name: base + processing_priority: 1 + parameters: + param-vfm1: value-vfm1 + +.. code:: Python + + import time + from onapsdk.aai.business import Customer + from onapsdk.vid import LineOfBusiness, Platform + + SERVICE_INSTANCE_NAME = "service_instance_demo" + VNF_INSTANCE_NAME = "new_vnf_instance" + + # We assume that + # - service has been already instantiated, + # - line of business and platform are created + + customer = Customer.get_by_global_customer_id(GLOBAL_CUSTOMER_ID) + service_subscription = next(customer.service_subscriptions) + service_instance = service_subscription.get_service_instance_by_name(SERVICE_INSTANCE_NAME) + vnf = service_subscription.sdc_service.vnfs[0] + vid_line_of_business = LineOfBusiness.create(LINE_OF_BUSINESS) + vid_platform = Platform.create(PLATFORM) + + so_yaml_vnf = "/path/to/yaml/vnf" + with open(so_yaml_vnf, "r") as yaml_template: + so_vnf_data = load(yaml_template) + + so_vnf = SoServiceVnf.load(so_vnf_data) + + vnf_instantiation = service_instance.add_vnf( + vnf=vnf, + line_of_business=vid_line_of_business, + platform=vid_platform, + vnf_instance_name=VNF_INSTANCE_NAME, + so_vnfs=so_vnfs, + a_la_carte=False + ) + + vnf_instantiation.wait_for_finish(): + print("Success") + else: + print("Instantiation failed, check logs") + + +Instantiate VNF (ALaCarte) +--------------- + +.. code:: Python + + import time + from onapsdk.aai.business import Customer + from onapsdk.vid import LineOfBusiness, Platform + + # We assume that + # - service has been already instantiated, + # - line of business and platform are created + + customer = Customer.get_by_global_customer_id(GLOBAL_CUSTOMER_ID) + service_subscription = next(customer.service_subscriptions) + service_instance = service_subscription.get_service_instance_by_name(SERVICE_INSTANCE_NAME) + vnf = service_subscription.sdc_service.vnfs[0] + vid_line_of_business = LineOfBusiness.create(LINE_OF_BUSINESS) + vid_platform = Platform.create(PLATFORM) + vnf_instantiation = service_instance.add_vnf(vnf, vid_line_of_business, vid_platform) + vnf_instantiation.wait_for_finish(): + print("Success") + else: + print("Instantiation failed, check logs") + +Instantiate Vf module (ALaCarte) +--------------------- + +.. code:: Python + + import time + from onapsdk.aai.business import Customer + + customer = Customer.get_by_global_customer_id(GLOBAL_CUSTOMER_ID) + service_subscription = next(customer.service_subscriptions) + service_instance = service_subscription.get_service_instance_by_name(SERVICE_INSTANCE_NAME) + vnf_instance = next(service_instance.vnf_instances) + vf_module = vnf_instance.vnf.vf_module + vf_module_instantiation = vnf_instance.add_vf_module( + vf_module, + vnf_parameters=[ + VnfParameter(name="parameter1", value="parameter1_value"), + VnfParameter(name="parameter2", value="parameter2_value + ] + ) + vf_module_instantiation.wait_for_finish(): + print("Success") + else: + print("Instantiation failed, check logs") + +Instantiate Vl module (ALaCarte) +--------------------- + +.. code:: Python + + import time + from onapsdk.aai.business import Customer + from onapsdk.vid import LineOfBusiness, Platform + + # We assume that + # - service has been already instantiated, + # - line of business and platform are created + + customer = Customer.get_by_global_customer_id(GLOBAL_CUSTOMER_ID) + service_subscription = next(customer.service_subscriptions) + service_instance = service_subscription.get_service_instance_by_name(SERVICE_INSTANCE_NAME) + + logger.info("******** Get 1st Network in Service Model *******") + network = service_subscription.sdc_service.networks[0] + + logger.info("******** Create Network *******") + sn=Subnet(name="my_subnet", + start_address="10.0.0.1", + cidr_mask="24", + gateway_address="10.0.0.1) + + vid_line_of_business = LineOfBusiness.create(LINE_OF_BUSINESS) + vid_platform = Platform.create(PLATFORM) + + network_instantiation = service_instance.add_network(network, vid_line_of_business, + vid_platform, network_instance_name="my_net", subnets=[sn]) + + if network_instantiation.wait_for_finish(): + print("Success") + else: + print("Instantiation failed, check logs") |