Instantiation

Create business objects

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)

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)

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:

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

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:

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

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)

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)

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