docs/examples/e2e_net_instantiation.rst
E2E Instantiation of a simple Network
#####################################
.. code:: Python
import logging
import time
from uuid import uuid4
from onapsdk.aai.aai_element import AaiElement
from onapsdk.aai.cloud_infrastructure import (
CloudRegion,
Complex,
Tenant
)
from onapsdk.aai.service_design_and_creation import (
Service as AaiService
)
from onapsdk.aai.business import (
ServiceInstance,
ServiceSubscription,
Customer,
OwningEntity as AaiOwningEntity
)
from onapsdk.so.instantiation import (
ServiceInstantiation,
Subnet
)
from onapsdk.sdc.service import Service
from onapsdk.sdc.vl import Vl
import onapsdk.constants as const
import os
from onapsdk.vid import LineOfBusiness, OwningEntity, Platform, Project
logger = logging.getLogger("")
logger.setLevel(logging.INFO)
fh = logging.StreamHandler()
fh_formatter = logging.Formatter('%(asctime)s %(levelname)s %(lineno)d:%(filename)s(%(process)d) - %(message)s')
fh.setFormatter(fh_formatter)
logger.addHandler(fh)
# Create required A&AI resources
VL_NAME = "Generic NeutronNet"
SERVICENAME = "net_SERVICE"
GLOBAL_CUSTOMER_ID = "" # FILL ME
COMPLEX_PHYSICAL_LOCATION_ID = "" # FILL ME
COMPLEX_DATA_CENTER_CODE = "" # FILL ME
CLOUD_OWNER = "" # FILL ME
CLOUD_REGION = "" # FILL ME
VIM_USERNAME = "" # FILL ME
VIM_PASSWORD = "" # FILL ME
VIM_SERVICE_URL = "" # FILL ME
TENANT_NAME = "" # FILL ME
OWNING_ENTITY = "" # FILL ME
PROJECT = "" # FILL ME
PLATFORM = "" # FILL ME
LINE_OF_BUSINESS = "" # FILL ME
SERVICE_INSTANCE_NAME = "net-Instance"
SERVICE_DELETION = True
logger.info("*******************************")
logger.info("******** SERVICE DESIGN *******")
logger.info("*******************************")
logger.info("******** Get VL *******")
vl = Vl(VL_NAME)
logger.info("******** Onboard Service *******")
svc = Service(name=SERVICENAME, resources=[vl])
svc.onboard()
logger.info("******** Check Service Distribution *******")
distribution_completed = False
nb_try = 0
nb_try_max = 10
while distribution_completed is False and nb_try < nb_try_max:
distribution_completed = svc.distributed
if distribution_completed is True:
logger.info("Service Distribution for %s is sucessfully finished",svc.name)
break
logger.info("Service Distribution for %s ongoing, Wait for 60 s",svc.name)
time.sleep(60)
nb_try += 1
if distribution_completed is False:
logger.error("Service Distribution for %s failed !!",svc.name)
exit(1)
logger.info("*******************************")
logger.info("***** RUNTIME PREPARATION *****")
logger.info("*******************************")
logger.info("******** Create Complex *******")
cmplx = Complex.create(
physical_location_id=COMPLEX_PHYSICAL_LOCATION_ID,
data_center_code=COMPLEX_DATA_CENTER_CODE,
name=COMPLEX_PHYSICAL_LOCATION_ID
)
logger.info("******** Create CloudRegion *******")
cloud_region = CloudRegion.create(
cloud_owner=CLOUD_OWNER,
cloud_region_id=CLOUD_REGION,
orchestration_disabled=False,
in_maint=False,
cloud_type="openstack",
cloud_region_version="titanium_cloud",
cloud_zone="z1",
complex_name=COMPLEX_PHYSICAL_LOCATION_ID
)
logger.info("******** Link Complex to CloudRegion *******")
cloud_region.link_to_complex(cmplx)
logger.info("******** Add ESR Info to CloudRegion *******")
cloud_region.add_esr_system_info(
esr_system_info_id=str(uuid4()),
user_name=VIM_USERNAME,
password=VIM_PASSWORD,
system_type="VIM",
service_url=VIM_SERVICE_URL,
cloud_domain="Default",
ssl_insecure=False,
system_status="active",
default_tenant=TENANT_NAME
)
logger.info("******** Register CloudRegion to MultiCloud *******")
cloud_region.register_to_multicloud()
logger.info("******** Check MultiCloud Registration *******")
time.sleep(60)
registration_completed = False
nb_try = 0
nb_try_max = 10
while registration_completed is False and nb_try < nb_try_max:
for tenant in cloud_region.tenants:
logger.debug("Tenant %s found in %s_%s",tenant.name,cloud_region.cloud_owner,cloud_region.cloud_region_id)
registration_completed = True
if registration_completed is False:
time.sleep(60)
nb_try += 1
if registration_completed is False:
logger.error("Registration of Cloud %s_%s failed !!",cloud_region.cloud_owner,cloud_region.cloud_region_id)
exit(1)
else:
logger.info("Registration of Cloud %s_%s successful !!",cloud_region.cloud_owner,cloud_region.cloud_region_id)
logger.info("*******************************")
logger.info("**** SERVICE INSTANTIATION ****")
logger.info("*******************************")
logger.info("******** Create Customer *******")
customer = None
for found_customer in list(Customer.get_all()):
logger.debug("Customer %s found", found_customer.subscriber_name)
if found_customer.subscriber_name == GLOBAL_CUSTOMER_ID:
logger.info("Customer %s found", found_customer.subscriber_name)
customer = found_customer
break
if not customer:
customer = Customer.create(GLOBAL_CUSTOMER_ID,GLOBAL_CUSTOMER_ID, "INFRA")
logger.info("******** Find Service in SDC *******")
service = None
services = Service.get_all()
for found_service in services:
logger.debug("Service %s is found, distribution %s",found_service.name, found_service.distribution_status)
if found_service.name == SERVICENAME:
logger.info("Found Service %s in SDC",found_service.name)
service = found_service
break
if not service:
logger.error("Service %s not found in SDC",SERVICENAME)
exit(1)
logger.info("******** Check Service Subscription *******")
service_subscription = None
for service_sub in customer.service_subscriptions:
logger.debug("Service subscription %s is found",service_sub.service_type)
if service_sub.service_type == SERVICENAME:
logger.info("Service %s subscribed",SERVICENAME)
service_subscription = service_sub
break
if not service_subscription:
logger.info("******** Subscribe Service *******")
customer.subscribe_service(SERVICENAME)
logger.info("******** Get Tenant *******")
cloud_region = CloudRegion(cloud_owner=CLOUD_OWNER, cloud_region_id=CLOUD_REGION,
orchestration_disabled=True, in_maint=False)
tenant = None
for found_tenant in cloud_region.tenants:
logger.debug("Tenant %s found in %s_%s",found_tenant.name,cloud_region.cloud_owner,cloud_region.cloud_region_id)
if found_tenant.name == TENANT_NAME:
logger.info("Found my Tenant %s",found_tenant.name)
tenant = found_tenant
break
if not tenant:
logger.error("tenant %s not found",TENANT_NAME)
exit(1)
logger.info("******** Connect Service to Tenant *******")
service_subscription = None
for service_sub in customer.service_subscriptions:
logger.debug("Service subscription %s is found",service_sub.service_type)
if service_sub.service_type == SERVICENAME:
logger.info("Service %s subscribed",SERVICENAME)
service_subscription = service_sub
break
if not service_subscription:
logger.error("Service subscription %s is not found",SERVICENAME)
exit(1)
service_subscription.link_to_cloud_region_and_tenant(cloud_region, tenant)
logger.info("******** Add Business Objects (OE, P, Pl, LoB) in VID *******")
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)
logger.info("******** Add Owning Entity in AAI *******")
owning_entity = None
for oe in AaiOwningEntity.get_all():
if oe.name == vid_owning_entity.name:
owning_entity = oe
break
if not owning_entity:
logger.info("******** Owning Entity not existing: create *******")
owning_entity = AaiOwningEntity.create(vid_owning_entity.name, str(uuid4()))
logger.info("******** Instantiate Service *******")
service_instance = None
service_instantiation = None
for se in service_subscription.service_instances:
if se.instance_name == SERVICE_INSTANCE_NAME:
service_instance = se
break
if not service_instance:
logger.info("******** Service Instance not existing: Instantiate *******")
# Instantiate service
service_instantiation = ServiceInstantiation.instantiate_so_ala_carte(
service,
cloud_region,
tenant,
customer,
owning_entity,
vid_project,
service_instance_name=SERVICE_INSTANCE_NAME
)
time.sleep(60)
else:
logger.info("******** Service Instance already existing *******")
service_instance = None
for se in service_subscription.service_instances:
if se.instance_name == SERVICE_INSTANCE_NAME:
service_instance = se
break
if not service_instance:
logger.error("******** Service %s instantiation failed",SERVICE_INSTANCE_NAME)
exit(1)
nb_try = 0
nb_try_max = 10
service_active = False
while service_active is False and nb_try < nb_try_max:
if service_instance.orchestration_status == "Active":
logger.info("******** Service Instance %s is active *******",service_instance.name)
service_active = True
break
logger.info("Service %s instantiation not complete,Status:%s, wait 10s",service_instance.name,service_instance.orchestration_status)
time.sleep(10)
nb_try += 1
if service_active is False:
logger.error("Service %s instantiation failed",service_instance.name)
exit(1)
logger.info("******** Get Networks in Service Model *******")
networks = service_instance.service_subscription.sdc_service.networks
logger.info("******** Create Network *******")
sn=Subnet(name="test", start_address="127.0.0.0", gateway_address="127.0.0.1")
for network in networks:
logger.debug("Check if Network instance of class %s exist", network.name)
network_found = False
for network_instance in service_instance.network_instances:
logger.debug("Network instance %s found in Service Instance ",network_intance.name)
network_found = True
if network_found is False:
network_instantiation = service_instance.add_network(network, vid_line_of_business, vid_platform, subnets=[sn])
network_instantiation.wait_for_finish()
if SERVICE_DELETION is False:
logger.info("*****************************************")
logger.info("**** No Deletion requested, finished ****")
logger.info("*****************************************")
exit(0)
logger.info("*******************************")
logger.info("**** SERVICE DELETION *********")
logger.info("*******************************")
time.sleep(30)
for network_instance in service_instance.network_instances:
logger.debug("Network instance %s found in Service Instance ",network_instance.name)
logger.info("******** Delete Network %s *******",network_instance.name)
network_deletion = network_instance.delete()
network_deletion.wait_for_finish()
logger.info("******** Delete Service %s *******",service_instance.name)
service_deletion = service_instance.delete()
service_deletion.wait_for_finish()