diff options
author | Linda Wang <wangwulin@huawei.com> | 2017-12-05 10:20:55 +0000 |
---|---|---|
committer | Cédric Ollivier <cedric.ollivier@orange.com> | 2017-12-12 21:43:12 +0100 |
commit | 8f0134178d24b7b478beb22395c448cf76e381f2 (patch) | |
tree | c10a4d82cf2cce3465aa834956bc6dc16839dc2a /functest/utils | |
parent | 5ed771a9a0dbc09610ecc900c0c3e86edc08eee6 (diff) |
All patching config files in memory
It adds the yaml content as Config attribute and allow patching it
without modifying the file (and reimport constants or config).
It also removes obsolete data in config_patch.yaml and moves several
functions in the right modules (Config)
JIRA: ARMBAND-334
Co-Authored-By: Cédric Ollivier <cedric.ollivier@orange.com>
Change-Id: I5c9a574d3283828063154c977cdfbc2abfdc6777
Signed-off-by: Linda Wang <wangwulin@huawei.com>
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
Diffstat (limited to 'functest/utils')
-rw-r--r-- | functest/utils/config.py | 49 | ||||
-rw-r--r-- | functest/utils/functest_utils.py | 13 |
2 files changed, 43 insertions, 19 deletions
diff --git a/functest/utils/config.py b/functest/utils/config.py index 6bb4f58e..f4749a75 100644 --- a/functest/utils/config.py +++ b/functest/utils/config.py @@ -1,21 +1,45 @@ #!/usr/bin/env python +# pylint: disable=missing-docstring + +import os +import pkg_resources import yaml import six -from functest.utils import env - class Config(object): def __init__(self): try: - with open(env.ENV.CONFIG_FUNCTEST_YAML) as f: - self.functest_yaml = yaml.safe_load(f) - self._parse(None, self.functest_yaml) + with open(pkg_resources.resource_filename( + 'functest', 'ci/config_functest.yaml')) as yfile: + self.functest_yaml = yaml.safe_load(yfile) except Exception as error: raise Exception('Parse config failed: {}'.format(str(error))) + @staticmethod + def _merge_dicts(dict1, dict2): + for k in set(dict1.keys()).union(dict2.keys()): + if k in dict1 and k in dict2: + if isinstance(dict1[k], dict) and isinstance(dict2[k], dict): + yield (k, dict(Config._merge_dicts(dict1[k], dict2[k]))) + else: + yield (k, dict2[k]) + elif k in dict1: + yield (k, dict1[k]) + else: + yield (k, dict2[k]) + + def patch_file(self, patch_file_path): + with open(patch_file_path) as yfile: + patch_file = yaml.safe_load(yfile) + + for key in patch_file: + if key in os.environ.get('DEPLOY_SCENARIO', ""): + self.functest_yaml = dict(Config._merge_dicts( + self.functest_yaml, patch_file[key])) + def _parse(self, attr_now, left_parametes): for param_n, param_v in six.iteritems(left_parametes): attr_further = self._get_attr_further(attr_now, param_n) @@ -24,9 +48,22 @@ class Config(object): if isinstance(param_v, dict): self._parse(attr_further, param_v) - def _get_attr_further(self, attr_now, next): + @staticmethod + def _get_attr_further(attr_now, next): # pylint: disable=redefined-builtin return attr_now if next == 'general' else ( '{}_{}'.format(attr_now, next) if attr_now else next) + def fill(self): + try: + self._parse(None, self.functest_yaml) + except Exception as error: + raise Exception('Parse config failed: {}'.format(str(error))) + CONF = Config() +CONF.patch_file(pkg_resources.resource_filename( + 'functest', 'ci/config_patch.yaml')) +if os.getenv("POD_ARCH", None) and os.getenv("POD_ARCH", None) in ['aarch64']: + CONF.patch_file(pkg_resources.resource_filename( + 'functest', 'ci/config_aarch64_patch.yaml')) +CONF.fill() diff --git a/functest/utils/functest_utils.py b/functest/utils/functest_utils.py index bbb6b631..6c502ebc 100644 --- a/functest/utils/functest_utils.py +++ b/functest/utils/functest_utils.py @@ -317,19 +317,6 @@ def get_functest_config(parameter): return get_parameter_from_yaml(parameter, yaml_) -def merge_dicts(dict1, dict2): - for k in set(dict1.keys()).union(dict2.keys()): - if k in dict1 and k in dict2: - if isinstance(dict1[k], dict) and isinstance(dict2[k], dict): - yield (k, dict(merge_dicts(dict1[k], dict2[k]))) - else: - yield (k, dict2[k]) - elif k in dict1: - yield (k, dict1[k]) - else: - yield (k, dict2[k]) - - def get_functest_yaml(): with open(constants.CONST.__getattribute__('CONFIG_FUNCTEST_YAML')) as f: functest_yaml = yaml.safe_load(f) |