Fixes bug 1489 by adding inline cloud-init to SOL006 VDUs
[osm/IM.git] / osm_im / im_translation.py
index 9216f45..8abf942 100644 (file)
@@ -61,6 +61,7 @@ def translate_im_vnfd_to_sol006(im_vnfd):
     _add_im_kdus_to_sol006_vnfd(im_vnfd, sol006_vnfd)
     _add_im_k8s_clusters_to_sol006_vnfd(im_vnfd, sol006_vnfd)
     _add_im_placement_groups_to_sol006_vnfd(im_vnfd, sol006_vnfd)
+    _cleanup_juju_in_configurations(sol006_vnfd)
     return {"vnfd": sol006_vnfd}
 
 
@@ -268,6 +269,8 @@ def _add_im_vdus_to_sol006_vnfd(im_vnfd, sol006_vnfd):
             vdu_descriptor["name"] = vdu["name"]
         if vdu.get("cloud-init-file"):
             vdu_descriptor["cloud-init-file"] = vdu["cloud-init-file"]
+        if vdu.get("cloud-init"):
+            vdu_descriptor["cloud-init"] = vdu["cloud-init"]
         if vdu.get("supplemental-boot-data"):
             vdu_descriptor["supplemental-boot-data"] = vdu["supplemental-boot-data"]
         if vdu.get("alarm"):
@@ -286,7 +289,7 @@ def _add_im_vdus_to_sol006_vnfd(im_vnfd, sol006_vnfd):
         vdu_level = _get_instantiation_level_vdu_level_from_im_vdu(vdu)
         if vdu.get("vdu-configuration"):
             vdu_configuration = vdu["vdu-configuration"]
-            vdu_configuration["id"] = "{}-vdu-configuration".format(vdu["id"])
+            vdu_configuration["id"] = vdu["id"]
             vdu_configurations.append(vdu_configuration)
         df["vdu-profile"].append(vdu_profile)
         df["instantiation-level"][0]["vdu-level"].append(vdu_level)
@@ -299,7 +302,8 @@ def _add_im_vdus_to_sol006_vnfd(im_vnfd, sol006_vnfd):
     if len(ext_cpds) > 0:
         sol006_vnfd["ext-cpd"] = ext_cpds
     if len(vdu_configurations) > 0:
-        sol006_vnfd["vdu-configuration"] = vdu_configurations
+        _prepare_dict_entries_for_configurations(sol006_vnfd)
+        sol006_vnfd["df"][0]["lcm-operations-configuration"]["operate-vnf-op-config"]["day1-2"].extend(vdu_configurations)
 
 
 def _add_im_vdu_images_to_sol006_vdu(im_vdu, sol006_vdu):
@@ -365,8 +369,6 @@ def _get_vdu_profile_from_im_vdu(im_vdu, im_vnfd):
                 sgd_min_instances = int(scaling_group_descriptor.get("min-instance-count", 0))
                 vdu_profile["min-number-of-instances"] = sgd_min_instances + initial_instances
                 vdu_profile["max-number-of-instances"] = sgd_max_instances + initial_instances
-    if im_vdu.get("vdu-configuration"):
-        vdu_profile["vdu-configuration-id"] = "{}-vdu-configuration".format(im_vdu["id"])
     return vdu_profile
 
 
@@ -409,14 +411,51 @@ def _add_im_internal_vld_connection_point_refs_to_sol006_vnfd(ivld, im_vnfd, sol
                 if int_cpd["id"] == sol006_int_cpd_id:
                     int_cpd["int-virtual-link-desc"] = ivld["id"]
 
+def _prepare_dict_entries_for_configurations(sol006_vnfd):
+    sol006_vnfd["df"] = sol006_vnfd.get("df", [{}])
+    if not sol006_vnfd["df"][0].get("lcm-operations-configuration"):
+        sol006_vnfd["df"][0]["lcm-operations-configuration"] = {
+            "operate-vnf-op-config": {
+                "day1-2": []
+            }
+        }
+
+def _cleanup_juju_in_configurations(sol006_vnfd):
+    configs = sol006_vnfd["df"][0].get("lcm-operations-configuration")
+    if configs:
+        for day12_config in configs["operate-vnf-op-config"]["day1-2"]:
+            if "juju" in day12_config:
+                ee_name = _create_execution_environment_for_juju(day12_config, day12_config["juju"]["charm"])
+                for primitive in day12_config.get("config-primitive", []):
+                    primitive["execution-environment-ref"] = ee_name
+                for primitive in day12_config.get("initial-config-primitive", []):
+                    primitive["execution-environment-ref"] = ee_name
+                for primitive in day12_config.get("terminate-config-primitive", []):
+                    primitive["execution-environment-ref"] = ee_name
+                day12_config.pop("juju", None)
+
+def _create_execution_environment_for_juju(day12_config, charm_name):
+    if not "execution-environment-list" in day12_config:
+        day12_config["execution-environment-list"] = []
+
+    day12_config["execution-environment-list"].append(
+        {
+            "id": charm_name + "-ee",
+            "juju": {
+                "charm": charm_name
+            }
+        }
+    )
+
+    return charm_name + "-ee"
 
 def _add_im_vnf_configuration_to_sol006_vnfd(im_vnfd, sol006_vnfd):
     vnf_configuration = im_vnfd.get("vnf-configuration")
     if not vnf_configuration:
         return
-    vnf_configuration["id"] = "default-vnf-configuration"
-    sol006_vnfd["vnf-configuration"] = [vnf_configuration]
-    sol006_vnfd["df"][0]["vnf-configuration-id"] = vnf_configuration["id"]
+    vnf_configuration["id"] = im_vnfd.get("id")
+    _prepare_dict_entries_for_configurations(sol006_vnfd)
+    sol006_vnfd["df"][0]["lcm-operations-configuration"]["operate-vnf-op-config"]["day1-2"].append(vnf_configuration)
 
 
 def _add_im_ip_profiles_to_sol006_vnfd(im_vnfd, sol006_vnfd):
@@ -513,8 +552,18 @@ def _add_im_scaling_group_descriptors_to_sol006_vnfd(im_vnfd, sol006_vnfd):
 def _add_im_kdus_to_sol006_vnfd(im_vnfd, sol006_vnfd):
     if im_vnfd.get("kdu"):
         sol006_vnfd["kdu"] = im_vnfd["kdu"]
+        kdu_configs = []
+        for a_kdu in sol006_vnfd["kdu"]:
+            if "kdu-configuration" in a_kdu:
+                kdu_config = a_kdu.pop("kdu-configuration")
+                kdu_config["id"] = a_kdu["name"]
+                kdu_configs.append(kdu_config)
         if len(sol006_vnfd.get("df", ())) == 0:
             sol006_vnfd["df"] = [{"id": "default-df"}]
+        if len(kdu_configs) > 0:
+            _prepare_dict_entries_for_configurations(sol006_vnfd)
+            sol006_vnfd["df"][0]["lcm-operations-configuration"]["operate-vnf-op-config"]["day1-2"].extend(kdu_configs)
+
 
 
 def _add_im_k8s_clusters_to_sol006_vnfd(im_vnfd, sol006_vnfd):