diff options
author | Gaurav Gandhi <gauravgandhi@google.com> | 2022-02-19 00:24:19 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2022-02-25 05:57:26 +0300 |
commit | d08d10668a131ca3ec8a10edbea9b4da75453254 (patch) | |
tree | fd9c9ef38cfb8a1be9c0581cc1676c93ad3c8541 /meta-phosphor | |
parent | fd8b946710b8806382b84b99d37537a166f83617 (diff) | |
download | openbmc-d08d10668a131ca3ec8a10edbea9b4da75453254.tar.xz |
Update merge_settings script to support removing interfaces
Currently there is provision to override default settings using
.override files. But there is no way to remove a certain interface
exported by settings daemon. Example: This will be useful for PowerCap
interface. Power Cap is hardcoded toa specific object_path in dcmi. So
if there is a Service which also exports PowerCap interface it can
remove that interface from settings daemon.
Signed-off-by: Gaurav Gandhi <gauravgandhi@google.com>
Change-Id: Ib27bdc3cf205957de5893bb9373727e2bbc9c036
Diffstat (limited to 'meta-phosphor')
-rwxr-xr-x | meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py | 36 | ||||
-rw-r--r-- | meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager_git.bb | 6 |
2 files changed, 27 insertions, 15 deletions
diff --git a/meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py b/meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py index d910da5ba1..68c2437505 100755 --- a/meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py +++ b/meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py @@ -5,34 +5,40 @@ Override files are processed in the order given. Usage: - merge_settings.py <target yaml> [override yamls] + merge_settings.py <target yaml> [override/remove yamls] """ import sys import yaml import copy -def dict_merge(target, source): +def dict_merge(target, source, remove): """Deep merge for dicts. - Works like dict.update() that recursively updates any dict values present in - both parameters. + Works like dict.update() that recursively updates/removes 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. + remove (bool): If this is true then it removes the entry provided in + 'source' along with all entries under it from 'target'. Otherwise + it overrides the values from 'source' Returns: - `target` with values overwritten from those in `source` at any and all - levels of nested dicts. + `target` with values overwritten/removed from those in `source` at any + and all levels of nested dicts. """ if not isinstance(source, dict): return source for k, v in source.items(): if k in target and isinstance(target[k], dict): - dict_merge(target[k], v) + dict_merge(target[k], v, remove) else: - target[k] = copy.deepcopy(v) + if remove is True: + target.pop(k) + else: + target[k] = copy.deepcopy(v) return target if len(sys.argv) < 2: @@ -48,10 +54,16 @@ with open(target_filename) as 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) + if override_filename.endswith('.override.yml'): + with open(override_filename) as override_file: + override = yaml.safe_load(override_file) + dict_merge(data, override, False) + print('Merged override YAML file ' + override_filename) + elif override_filename.endswith('.remove.yml'): + with open(override_filename) as override_file: + override = yaml.safe_load(override_file) + dict_merge(data, override, True) + print('Removed data from source YAML file' + override_filename) with open(target_filename, 'w') as target_file: yaml.dump(data, target_file) diff --git a/meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager_git.bb b/meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager_git.bb index 175e735562..e3e7245aba 100644 --- a/meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager_git.bb +++ b/meta-phosphor/recipes-phosphor/settings/phosphor-settings-manager_git.bb @@ -36,8 +36,8 @@ EXTRA_OECONF = " \ SETTINGS_YAML=${STAGING_DIR_NATIVE}${settings_datadir}/defaults.yaml \ " -# Collect files in SRC_URI that end in ".override.yml" and call a script that -# writes their contents over that of settings.yaml, which is then updated to +# Collect files in SRC_URI that end in ".override.yml" or ".remove.yml" and call a script that +# writes/removes their contents from that of settings.yaml, which is then updated to # the merged data values. # This doesn't correctly handle globs in ".override.yml" entries in SRC_URI. python do_merge_settings () { @@ -58,7 +58,7 @@ python do_merge_settings () { cmd.append(os.path.join(settingsdir, 'mrw-settings.override.yaml')) fetch = bb.fetch2.Fetch([], d) - override_urls = [url for url in fetch.urls if url.endswith('.override.yml')] + override_urls = [url for url in fetch.urls if url.endswith(('.override.yml', '.remove.yml'))] for url in override_urls: bb.debug(2, 'Overriding with source: ' + url) local_base = os.path.basename(fetch.localpath(url)) |