From e7310fb508784f72f54fbad5762cec67b134241b Mon Sep 17 00:00:00 2001 From: yangyan Date: Tue, 21 May 2019 16:38:42 +0800 Subject: [PATCH] update code of genericparser Change-Id: Ie8e9ee79ddf5f74d3b8ff4621698eb3651415b62 Issue-ID: VFC-1391 Signed-off-by: yangyan --- docker/build_image.sh | 2 +- genericparser/pub/utils/toscaparsers/basemodel.py | 23 ++++-- .../toscaparsers/testdata/vnf/vcpesriov/vgw.csar | Bin 15054 -> 23182 bytes genericparser/pub/utils/toscaparsers/vnfdmodel.py | 2 +- .../utils/toscaparsers/vnfdparser/vnfd_sol_251.py | 78 ++++++++++++++------- pom.xml | 2 +- run.sh | 9 +-- stop.sh | 2 +- version.properties | 2 +- 9 files changed, 77 insertions(+), 43 deletions(-) diff --git a/docker/build_image.sh b/docker/build_image.sh index e4538d0..597cbe1 100755 --- a/docker/build_image.sh +++ b/docker/build_image.sh @@ -6,7 +6,7 @@ cd ${DOCKER_BUILD_DIR} BUILD_ARGS="--no-cache" ORG="onap" -VERSION="1.0.1" +VERSION="1.0.2" PROJECT="modeling" IMAGE="genericparser" DOCKER_REPOSITORY="nexus3.onap.org:10003" diff --git a/genericparser/pub/utils/toscaparsers/basemodel.py b/genericparser/pub/utils/toscaparsers/basemodel.py index a5c1f45..2b21456 100644 --- a/genericparser/pub/utils/toscaparsers/basemodel.py +++ b/genericparser/pub/utils/toscaparsers/basemodel.py @@ -515,10 +515,23 @@ class BaseInfoModel(object): metadata = None substitution_mappings = tosca.tpl['topology_template'].get('substitution_mappings', None) if substitution_mappings: - node['type'] = substitution_mappings['node_type'] - node['properties'] = substitution_mappings.get('properties', {}) - node['requirements'] = substitution_mappings.get('requirements', {}) - node['capabilities'] = substitution_mappings.get('capabilities', {}) - metadata = substitution_mappings.get('metadata', {}) + nodeType = substitution_mappings['node_type'] + logger.debug("nodeType %s", nodeType) + if "node_types" in tosca.tpl: + node_types = tosca.tpl['node_types'].get(nodeType, None) + derivedFrom = node_types.get('derived_from', "") + node['type'] = derivedFrom + node['properties'] = node_types.get('properties', {}) + node['requirements'] = node_types.get('requirements', {}) + node['capabilities'] = node_types.get('capabilities', {}) + metadata = node_types.get('metadata', {}) + + if "type" not in node or node['type'] == "": + node['type'] = nodeType + node['properties'] = substitution_mappings.get('properties', {}) + node['requirements'] = substitution_mappings.get('requirements', {}) + node['capabilities'] = substitution_mappings.get('capabilities', {}) + metadata = substitution_mappings.get('metadata', {}) + node['metadata'] = metadata if metadata and metadata != {} else self.buildMetadata(tosca) return node diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vgw.csar b/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vgw.csar index 5e47b7715bbff131d90a8cf7f5c2ff51b5736e37..79e0d2012d09784fef48c89ae3ef6e0240d0f08c 100644 GIT binary patch literal 23182 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 W6)W&0VFm_1AbbKmS9nSYhz9@^r6-sG literal 15054 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 F{{v>b-=F{h diff --git a/genericparser/pub/utils/toscaparsers/vnfdmodel.py b/genericparser/pub/utils/toscaparsers/vnfdmodel.py index 37a6472..95ae2c1 100644 --- a/genericparser/pub/utils/toscaparsers/vnfdmodel.py +++ b/genericparser/pub/utils/toscaparsers/vnfdmodel.py @@ -17,7 +17,7 @@ import logging from genericparser.pub.config.config import VNFD_SCHEMA_VERSION_DEFAULT from genericparser.pub.utils.toscaparsers.basemodel import BaseInfoModel from genericparser.pub.utils.toscaparsers.vnfdparser import CreateVnfdSOLParser -# from genericparser.pub.exceptions import CatalogException + logger = logging.getLogger(__name__) diff --git a/genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_251.py b/genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_251.py index d2f1229..6ad26e8 100644 --- a/genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_251.py +++ b/genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_251.py @@ -32,31 +32,52 @@ class VnfdSOL251(): vnf = self.model.get_substitution_mappings(tosca) properties = vnf.get("properties", {}) metadata = vnf.get("metadata", {}) - if properties.get("descriptor_id", "") == "": - descriptor_id = metadata.get("descriptor_id", "") - if descriptor_id == "": - descriptor_id = metadata.get("id", "") - if descriptor_id == "": - descriptor_id = metadata.get("UUID", "") - properties["descriptor_id"] = descriptor_id - - if properties.get("descriptor_version", "") == "": - version = metadata.get("template_version", "") - if version == "": - version = metadata.get("version", "") - properties["descriptor_version"] = version - - if properties.get("provider", "") == "": - provider = metadata.get("template_author", "") - if provider == "": - provider = metadata.get("provider", "") - properties["provider"] = provider - - if properties.get("template_name", "") == "": - template_name = metadata.get("template_name", "") - if template_name == "": - template_name = metadata.get("template_name", "") - properties["template_name"] = template_name + + for key, value in properties.items(): + if isinstance(value, dict): + if value["type"] == "string": + properties[key] = value.get("default", "") + elif value["type"] == "list": + properties[key] = value.get("default", {}) + else: + properties[key] = value.get("default", "") + ptype = "descriptor_id" + meta_types = ["descriptor_id", "id", "UUID"] + self._get_property(properties, metadata, ptype, meta_types) + + ptype = "descriptor_version" + meta_types = ["template_version", "version"] + self._get_property(properties, metadata, ptype, meta_types) + + ptype = "provider" + meta_types = ["template_author", "provider"] + self._get_property(properties, metadata, ptype, meta_types) + + ptype = "template_name" + meta_types = ["template_name"] + self._get_property(properties, metadata, ptype, meta_types) + + ptype = "software_version" + meta_types = ["software_version"] + self._get_property(properties, metadata, ptype, meta_types) + + ptype = "product_name" + meta_types = ["product_name"] + self._get_property(properties, metadata, ptype, meta_types) + + ptype = "flavour_description" + meta_types = ["flavour_description"] + self._get_property(properties, metadata, ptype, meta_types) + + ptype = "vnfm_info" + meta_types = ["vnfm_info"] + self._get_property(properties, metadata, ptype, meta_types) + + ptype = "flavour_id" + meta_types = ["flavour_id"] + self._get_property(properties, metadata, ptype, meta_types) + + logger.debug("vnf:%s", vnf) return vnf @@ -148,6 +169,13 @@ class VnfdSOL251(): return {"external_cps": external_cps, "forward_cps": forward_cps} return {} + def _get_property(self, properties, metadata, ptype, meta_types): + if ptype not in properties or properties[ptype] == "": + for mtype in meta_types: + data = metadata.get(mtype, "") + if data != "": + properties[ptype] = data + def _trans_virtual_storage(self, virtual_storage): if isinstance(virtual_storage, str): return {"virtual_storage_id": virtual_storage} diff --git a/pom.xml b/pom.xml index 6330533..d146c5c 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ 4.0.0 org.onap.modeling.genericparser modeling-genericparser - 1.0.1-SNAPSHOT + 1.0.2-SNAPSHOT pom modeling-genericparser modeling genericparser diff --git a/run.sh b/run.sh index 7912bd9..caab259 100755 --- a/run.sh +++ b/run.sh @@ -15,7 +15,7 @@ logDir="/var/log/onap/modeling/genericparser/" if [ ! -x $logDir ]; then - mkdir -p $logDir + mkdir -p $logDir fi # nohup python manage.py runserver 0.0.0.0:8806 > /dev/null & @@ -27,10 +27,3 @@ if [ "${SSL_ENABLED}" = "true" ]; then else nohup uwsgi --http :8806 -t 120 --module genericparser.wsgi --master --processes 4 & fi - - -while [ ! -f $logDir/runtime_genericparser.log ]; do - sleep 1 -done - -tail -F $logDir/runtime_genericparser.log \ No newline at end of file diff --git a/stop.sh b/stop.sh index e533560..f939ce5 100755 --- a/stop.sh +++ b/stop.sh @@ -13,5 +13,5 @@ # See the License for the specific language governing permissions and # limitations under the License. -# ps auxww | grep "manage.py runserver 0.0.0.0:8806" | awk '{print $2}' | xargs kill -9 +# ps auxww | grep "manage.py runserver 0.0.0.0:8806" | awk '{print $1}' | xargs kill -9 ps auxww |grep 'uwsgi --http' |awk '{print $1}' |xargs kill -9 diff --git a/version.properties b/version.properties index cf49af7..8e8eb0b 100644 --- a/version.properties +++ b/version.properties @@ -18,7 +18,7 @@ major=1 minor=0 -patch=1 +patch=2 base_version=${major}.${minor}.${patch} -- 2.16.6