#
# ============LICENSE_END============================================
#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
#
"""Helpers
"""
import os
+import re
from collections import defaultdict
from boltons import funcutils
elif isinstance(data, list):
for value in data:
curr_path = path + [value]
- if isinstance(value, dict):
+ if isinstance(value, (dict, list)):
traverse(value, search_key, func, curr_path)
elif value == search_key:
func(curr_path, value)
).format(value_type, prefix, indices)
)
return invalid_params
+
+
+RE_BASE = re.compile(r"(^base$)|(^base_)|(_base_)|(_base$)")
+
+
+def get_base_template_from_yaml_files(yaml_files):
+ """Return first filepath to match RE_BASE
+ """
+ for filepath in yaml_files:
+ basename = get_base_template_from_yaml_file(filepath)
+ if basename:
+ return basename
+ return None
+
+
+def get_base_template_from_yaml_file(yaml_file):
+ (dirname, filename) = os.path.split(yaml_file)
+ files = os.listdir(dirname)
+ for file in files:
+ basename, __ = os.path.splitext(os.path.basename(file))
+ if (
+ (__ == ".yaml" or __ == ".yml")
+ and RE_BASE.search(basename)
+ and basename.find("volume") == -1
+ ):
+ return os.path.join(dirname, "{}{}".format(basename, __))
+ return None
+
+
+def parameter_type_to_heat_type(parameter):
+ # getting parameter format
+ if isinstance(parameter, list):
+ parameter_type = "comma_delimited_list"
+ elif isinstance(parameter, str):
+ parameter_type = "string"
+ elif isinstance(parameter, dict):
+ parameter_type = "json"
+ elif isinstance(parameter, int):
+ parameter_type = "number"
+ elif isinstance(parameter, float):
+ parameter_type = "number"
+ elif isinstance(parameter, bool):
+ parameter_type = "boolean"
+ else:
+ parameter_type = None
+
+ return parameter_type
+
+
+def prop_iterator(resource, *props):
+ terminators = ["get_resource", "get_attr", "str_replace", "get_param"]
+ if "properties" in resource:
+ resource = resource.get("properties")
+ props = list(props)
+
+ if isinstance(resource, dict) and any(x for x in terminators if x in resource):
+ yield resource
+ else:
+ prop = resource.get(props.pop(0))
+ if isinstance(prop, list):
+ for x in prop:
+ yield from prop_iterator(x, *props)
+ elif isinstance(prop, dict):
+ yield from prop_iterator(prop, *props)
+
+
+def get_param(property_value):
+ """
+ Returns the first parameter name from a get_param or None if get_param is
+ not used
+ """
+ if property_value and isinstance(property_value, dict):
+ param = property_value.get("get_param")
+ if param and isinstance(param, list) and len(param) > 0:
+ return param[0]
+ else:
+ return param
+ return None