Fix inject files can not inject to vm 93/45193/1
authorHaibin Huang <haibin.huang@intel.com>
Wed, 25 Apr 2018 16:24:56 +0000 (00:24 +0800)
committerHaibin Huang <haibin.huang@intel.com>
Sat, 28 Apr 2018 07:59:42 +0000 (15:59 +0800)
Change-Id: I99359c17ae4ba3fd752f0cf5b14a70256db9ce98
Issue-ID: VFC-657
Signed-off-by: Haibin Huang <haibin.huang@intel.com>
catalog/pub/utils/toscaparser/vnfdmodel.py

index 524cf85..7934a84 100644 (file)
@@ -14,6 +14,7 @@
 
 import functools
 import logging
+import os
 from catalog.pub.utils.toscaparser import EtsiNsdInfoModel
 logger = logging.getLogger(__name__)
 
@@ -31,6 +32,7 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
         nodeTemplates = map(functools.partial(self.buildNode, tosca=tosca),
                             tosca.nodetemplates)
         node_types = tosca.topology_template.custom_defs
+        self.basepath = self._get_base_path(tosca)
         self.services = self._get_all_services(nodeTemplates)
         self.vcloud = self._get_all_vcloud(nodeTemplates)
         self.vcenter = self._get_all_vcenter(nodeTemplates)
@@ -48,6 +50,10 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
         self.vnf_exposed = self.get_all_endpoint_exposed(tosca.topology_template)
         self.vnf_flavours = self.get_all_flavour(tosca.topology_template.groups)
 
+    def _get_base_path(self, tosca):
+        fpath, fname = os.path.split(tosca.path)
+        return fpath
+
     def _get_all_services(self, nodeTemplates):
         ret = []
         for node in nodeTemplates:
@@ -169,6 +175,13 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
                 if 'description' in node:
                     ret['description'] = node['description']
                 ret['properties'] = node['properties']
+                for inject_file in ret['properties']['inject_files']:
+                    source_path = os.path.join(self.basepath, inject_file['source_path'])
+                    with open(source_path, "rb") as f:
+                        source_data = f.read()
+                        source_data_base64 = source_data.encode("base64")
+                        inject_file["source_data_base64"] = source_data_base64
+
                 ret['image_file'] = self.get_node_image_file(node)
                 local_storages = self.getRequirementByName(node, 'local_storage')
                 ret['local_storages'] = map(lambda x: self.get_requirement_node_name(x), local_storages)