diff options
Diffstat (limited to 'docs/examples/e2e_net_instantiation.rst')
-rw-r--r-- | docs/examples/e2e_net_instantiation.rst | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/docs/examples/e2e_net_instantiation.rst b/docs/examples/e2e_net_instantiation.rst new file mode 100644 index 0000000..bfa4346 --- /dev/null +++ b/docs/examples/e2e_net_instantiation.rst @@ -0,0 +1,332 @@ +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() + + |