diff options
author | Deepak Kodihalli <dkodihal@in.ibm.com> | 2017-07-23 22:08:56 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2017-08-01 05:45:04 +0300 |
commit | 68136c32b15277cefaecd2e1f91643ea5ebeed8a (patch) | |
tree | 3bdc5961b2d912204419140d5cf8773f10e30db8 /meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager | |
parent | 3b95123b92ef0e09fb72ee21d4725b128a845783 (diff) | |
download | openbmc-68136c32b15277cefaecd2e1f91643ea5ebeed8a.tar.xz |
settings: meta-zaius: add override
Zaius had a way to override the reboot policy setting. Make sure that
still works with the new settings application.
Change-Id: I51e32705b9aa4787fadab211f57b5fdcf75a3207
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Diffstat (limited to 'meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager')
-rwxr-xr-x | meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py b/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py new file mode 100755 index 0000000000..01f5e35523 --- /dev/null +++ b/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +"""Loads a "target" YAML file and overwrites its values with values from +"override" YAML files. + +Override files are processed in the order given. + +Usage: + merge_settings.py <target yaml> [override yamls] +""" +import sys +import yaml +import copy + +def dict_merge(target, source): + """Deep merge for dicts. + + Works like dict.update() that recursively updates any dict values present in + both parameters. + + Args: + target (dict): Values to be overwritten by corresponding values from + `source`. + source (dict): Overriding values. Not changed by call. + + Returns: + `target` with values overwritten from those in `source` at any and all + levels of nested dicts. + """ + if not isinstance(source, dict): + return source + for k, v in source.iteritems(): + if k in target and isinstance(target[k], dict): + dict_merge(target[k], v) + else: + target[k] = copy.deepcopy(v) + return target + +if len(sys.argv) < 2: + sys.exit('Argument required: target yaml') + +if len(sys.argv) == 2: + # No overrides to handle + sys.exit() + +target_filename = sys.argv[1] +with open(target_filename) as target_file: + data = yaml.safe_load(target_file) + print('Loaded target YAML file ' + target_filename) + +for override_filename in sys.argv[2:]: + with open(override_filename) as override_file: + override = yaml.safe_load(override_file) + dict_merge(data, override) + print('Merged override YAML file ' + override_filename) + +with open(target_filename, 'w') as target_file: + yaml.dump(data, target_file) + print('Wrote merged target YAML file ' + target_filename) |