aboutsummaryrefslogtreecommitdiffstats
path: root/heat/vFW_CNF_CDS/automation/instantiate.py
diff options
context:
space:
mode:
Diffstat (limited to 'heat/vFW_CNF_CDS/automation/instantiate.py')
-rwxr-xr-xheat/vFW_CNF_CDS/automation/instantiate.py209
1 files changed, 209 insertions, 0 deletions
diff --git a/heat/vFW_CNF_CDS/automation/instantiate.py b/heat/vFW_CNF_CDS/automation/instantiate.py
new file mode 100755
index 00000000..0316f113
--- /dev/null
+++ b/heat/vFW_CNF_CDS/automation/instantiate.py
@@ -0,0 +1,209 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2020 Orange
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# ============LICENSE_END=========================================================
+
+import logging
+import zipfile
+from io import BytesIO
+from uuid import uuid4
+
+import oyaml as yaml
+
+from config import Config
+from onapsdk.aai.cloud_infrastructure import (
+ CloudRegion,
+)
+from onapsdk.aai.business import (
+ Customer,
+ OwningEntity as AaiOwningEntity
+)
+from onapsdk.msb.k8s import Definition
+
+from onapsdk.so.instantiation import (
+ ServiceInstantiation,
+ InstantiationParameter, VnfParameters, VfmoduleParameters)
+from onapsdk.sdc.service import Service
+from onapsdk.vid import LineOfBusiness, OwningEntity, Platform, Project
+
+logger = logging.getLogger("")
+logger.setLevel(logging.DEBUG)
+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)
+
+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 == Config.GLOBAL_CUSTOMER_ID:
+ logger.info("Customer %s found", found_customer.subscriber_name)
+ customer = found_customer
+ break
+if not customer:
+ customer = Customer.create(Config.GLOBAL_CUSTOMER_ID, Config.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 == Config.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", Config.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 == Config.SERVICENAME:
+ logger.info("Service %s subscribed", Config.SERVICENAME)
+ service_subscription = service_sub
+ break
+
+if not service_subscription:
+ logger.info("******** Subscribe Service *******")
+ customer.subscribe_service(service)
+
+logger.info("******** Get Tenant *******")
+cloud_region = CloudRegion(cloud_owner=Config.CLOUD_OWNER, cloud_region_id=Config.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 == Config.TENANT_NAME:
+ logger.info("Found my Tenant %s", found_tenant.name)
+ tenant = found_tenant
+ break
+
+if not tenant:
+ logger.error("tenant %s not found", Config.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 == Config.SERVICENAME:
+ logger.info("Service %s subscribed", Config.SERVICENAME)
+ service_subscription = service_sub
+ break
+
+if not service_subscription:
+ logger.error("Service subscription %s is not found", Config.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(Config.OWNING_ENTITY)
+vid_project = Project.create(Config.PROJECT)
+vid_platform = Platform.create(Config.PLATFORM)
+vid_line_of_business = LineOfBusiness.create(Config.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("******** Delete old profiles ********")
+for vnf in service.vnfs:
+ for vf_module in vnf.vf_modules:
+ definition = Definition.get_definition_by_name_version(vf_module.metadata["vfModuleModelInvariantUUID"],
+ vf_module.metadata["vfModuleModelUUID"])
+ vf_module_label = vf_module.properties["vf_module_label"]
+ if vf_module_label == "base_template_dummy_ignore":
+ continue
+ profile_name = Config.VF_MODULE_LIST[vf_module_label]["k8s-rb-profile-name"]
+ try:
+ profile = definition.get_profile_by_name(profile_name)
+ if profile.namespace != Config.VF_MODULE_LIST[vf_module_label]["k8s-rb-profile-namespace"]:
+ profile.delete()
+ logger.info("Profile: " + profile_name + " for " + vf_module.name + " deleted")
+ else:
+ logger.info("No need to delete Profile " + profile_name +
+ " for " + vf_module.name + ". Namespace is fine")
+ except ValueError:
+ logger.info("Profile: " + profile_name + " for " + vf_module.name + " not found")
+
+# Read SDNC MODEL NAME and VERSION from CBA.zip
+logger.info("*******************************")
+logger.info("Retrieving SDNC MODEL NAME and VERSION")
+logger.info("*******************************")
+with zipfile.ZipFile(Config.VSPFILE, 'r') as package:
+ cba_io = BytesIO(package.read("CBA.zip"))
+ with zipfile.ZipFile(cba_io) as cba:
+ with cba.open('TOSCA-Metadata/TOSCA.meta') as meta_file:
+ tosca_meta = yaml.load(meta_file, Loader=yaml.FullLoader)
+ SDNC_MODEL_NAME = tosca_meta.get("Template-Name")
+ SDNC_MODEL_VERSION = tosca_meta.get("Template-Version")
+
+logger.info("******** Instantiate Service *******")
+service_instance = None
+service_instantiation = None
+for se in service_subscription.service_instances:
+ if se.instance_name == Config.SERVICE_INSTANCE_NAME:
+ service_instance = se
+ break
+if not service_instance:
+ logger.info("******** Service Instance not existing: Instantiate *******")
+ # Instantiate service
+ vfmodules_list = Config.VF_MODULE_LIST
+
+ vnf_param = [
+ InstantiationParameter(name="sdnc_model_name", value=SDNC_MODEL_NAME),
+ InstantiationParameter(name="sdnc_model_version", value=SDNC_MODEL_VERSION),
+ InstantiationParameter(name="sdnc_artifact_name", value=Config.SDNC_ARTIFACT_NAME)]
+
+ vfmodules_param = []
+ for vfmodule in vfmodules_list:
+ params = [
+ InstantiationParameter(name="k8s-rb-profile-name", value=vfmodules_list[vfmodule]["k8s-rb-profile-name"]),
+ InstantiationParameter(name="k8s-rb-profile-namespace", value=vfmodules_list[vfmodule]["k8s-rb-profile-namespace"]),
+ InstantiationParameter(name="sdnc_model_name", value=SDNC_MODEL_NAME),
+ InstantiationParameter(name="sdnc_model_version", value=SDNC_MODEL_VERSION),
+ InstantiationParameter(name="vf_module_label", value=vfmodules_list[vfmodule]["name"])]
+
+ vfmodules_param.append(VfmoduleParameters(vfmodules_list[vfmodule]["name"], params))
+
+ vnf_params = VnfParameters(name=Config.VFNAME, vnf_parameters=vnf_param, vfmodule_parameters=vfmodules_param)
+
+ service_instantiation = ServiceInstantiation.instantiate_macro(
+ sdc_service=service,
+ cloud_region=cloud_region,
+ tenant=tenant,
+ customer=customer,
+ owning_entity=owning_entity,
+ project=vid_project,
+ line_of_business=vid_line_of_business,
+ platform=vid_platform,
+ service_instance_name=Config.SERVICE_INSTANCE_NAME,
+ vnf_parameters=[vnf_params]
+ )