# ============LICENSE_START=======================================================
# org.onap.vvp/validation-scripts
# ===================================================================
-# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright © 2019 AT&T Intellectual Property. All rights reserved.
# ===================================================================
#
# Unless otherwise specified, all software contained herein is licensed
#
# ============LICENSE_END============================================
#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
#
import re
+from tests import cached_yaml as yaml
def get_vm_types_for_resource(resource):
- '''
+ """
Get all unique vm_types for a resource
Notes:
- Returns set([]) if the resource is not formatted
properly, the passed resource is not a nova server
- If more than one vm_type is detected all vm_types will
be returned
- '''
- if not isinstance(resource, dict):
- return set()
- if 'type' not in resource:
- return set()
- if resource['type'] != 'OS::Nova::Server':
- return set()
- if 'properties' not in resource:
+ """
+ if not is_nova_server(resource):
return set()
key_values = ["name", "flavor", "image"]
key_value_formats = [
- ["name", "string",
- re.compile(r'(.+?)_name_\d+')],
- ["name", "comma_delimited_list",
- re.compile(r'(.+?)_names')],
- ["flavor", "string",
- re.compile(r'(.+?)_flavor_name')],
- ["image", "string",
- re.compile(r'(.+?)_image_name')]]
+ ["name", "string", re.compile(r"(.+?)_name_\d+")],
+ ["name", "comma_delimited_list", re.compile(r"(.+?)_names")],
+ ["flavor", "string", re.compile(r"(.+?)_flavor_name")],
+ ["image", "string", re.compile(r"(.+?)_image_name")],
+ ]
vm_types = []
- for k2, v2 in resource['properties'].items():
- if k2 not in key_values:
- continue
- if "get_param" not in v2:
+ for k2, v2 in resource["properties"].items():
+ if not isinstance(v2, dict) or any(
+ [k2 not in key_values, "get_param" not in v2]
+ ):
continue
formats = [v for v in key_value_formats if v[0] == k2]
for v3 in formats:
return set(vm_types)
+def is_nova_server(resource):
+
+ return (
+ isinstance(resource, dict)
+ and "type" in resource
+ and "properties" in resource
+ and resource.get("type") == "OS::Nova::Server"
+ )
+
+
def get_vm_type_for_nova_server(resource):
- '''
+ """
Get the vm_type for a resource
Note: Returns None if not exactly one vm_type
is detected, if the resource is not formatted properly, or
the passed resource is not a nova server
- '''
+ """
vm_types = get_vm_types_for_resource(resource)
# if more than one vm_type was identified, return None
- if len(vm_types) > 1:
+ if not vm_types or len(vm_types) > 1:
return None
return vm_types.pop()
def get_vm_types(resources):
- '''
+ """
Get all vm_types for a list of heat resources, do note that
some of the values retrieved may be invalid
- '''
+ """
vm_types = []
for v in resources.values():
vm_types.extend(list(get_vm_types_for_resource(v)))
return set(vm_types)
+
+
+def get_all_vm_types(yaml_files):
+ """
+ Get all vm_types for a list of yaml files
+ """
+ vm_types = []
+ for yaml_file in yaml_files:
+ with open(yaml_file, "r") as f:
+ yml = yaml.load(f)
+
+ if "resources" not in yml:
+ continue
+
+ vm_types.extend(get_vm_types(yml["resources"]))
+
+ return set(vm_types)