Automation scripts for vFW_CNF_CDS usecase
[demo.git] / heat / vFW_CNF_CDS / automation / onboard.py
diff --git a/heat/vFW_CNF_CDS/automation/onboard.py b/heat/vFW_CNF_CDS/automation/onboard.py
new file mode 100755 (executable)
index 0000000..c97b351
--- /dev/null
@@ -0,0 +1,98 @@
+# ============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 time
+import zipfile
+from io import BytesIO
+
+import oyaml as yaml
+
+from config import Config
+from onapsdk.sdc.properties import Property
+
+from onapsdk.sdc.vendor import Vendor
+from onapsdk.sdc.vsp import Vsp
+from onapsdk.sdc.vf import Vf
+from onapsdk.sdc.service import Service, ServiceInstantiationType
+
+import os
+
+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)
+
+# 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("*******************************")
+logger.info("******** SERVICE DESIGN *******")
+logger.info("*******************************")
+
+logger.info("******** Onboard Vendor *******")
+vendor = Vendor(name=Config.VENDOR)
+vendor.onboard()
+
+logger.info("******** Onboard VSP *******")
+mypath = os.path.dirname(os.path.realpath(__file__))
+myvspfile = os.path.join(mypath, Config.VSPFILE)
+vsp = Vsp(name=Config.VSPNAME, vendor=vendor, package=open(myvspfile, 'rb'))
+vsp.onboard()
+
+logger.info("******** Onboard VF *******")
+vf = Vf(name=Config.VFNAME, properties=[
+    Property(name="sdnc_model_name", property_type="string", value=SDNC_MODEL_NAME),
+    Property(name="sdnc_model_version", property_type="string", value=SDNC_MODEL_VERSION),
+    Property(name="sdnc_artifact_name", property_type="string", value=Config.SDNC_ARTIFACT_NAME)
+]
+        )
+vf.vsp = vsp
+vf.onboard()
+
+logger.info("******** Onboard Service *******")
+svc = Service(name=Config.SERVICENAME, resources=[vf], instantiation_type=ServiceInstantiationType.MACRO)
+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 successfully 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)