summaryrefslogtreecommitdiffstats
path: root/meta-phosphor/common/recipes-phosphor/settings
diff options
context:
space:
mode:
authorDeepak Kodihalli <dkodihal@in.ibm.com>2017-07-23 14:08:56 -0500
committerPatrick Williams <patrick@stwcx.xyz>2017-08-01 02:45:04 +0000
commit68136c32b15277cefaecd2e1f91643ea5ebeed8a (patch)
tree3bdc5961b2d912204419140d5cf8773f10e30db8 /meta-phosphor/common/recipes-phosphor/settings
parent3b95123b92ef0e09fb72ee21d4725b128a845783 (diff)
downloadtalos-openbmc-68136c32b15277cefaecd2e1f91643ea5ebeed8a.tar.gz
talos-openbmc-68136c32b15277cefaecd2e1f91643ea5ebeed8a.zip
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')
-rw-r--r--meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager.bb32
-rwxr-xr-xmeta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager/merge_settings.py58
l---------[-rwxr-xr-x]meta-phosphor/common/recipes-phosphor/settings/phosphor-settings/merge_settings.py59
3 files changed, 91 insertions, 58 deletions
diff --git a/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager.bb b/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager.bb
index dcc6fe32b..525a9fdff 100644
--- a/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager.bb
+++ b/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings-manager.bb
@@ -24,7 +24,39 @@ DEPENDS += "cereal"
RDEPENDS_${PN} += "sdbusplus phosphor-dbus-interfaces"
S = "${WORKDIR}/git"
+SRC_URI += "file://merge_settings.py"
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
+# the merged data values.
+# This doesn't correctly handle globs in ".override.yml" entries in SRC_URI.
+python do_merge_settings () {
+ import subprocess
+
+ # TODO: Perform the merge in a temporary directory?
+ workdir = d.getVar('WORKDIR', True)
+ nativedir = d.getVar('STAGING_DIR_NATIVE', True)
+ settingsdir = d.getVar('settings_datadir', True)
+ settingsdir = settingsdir[1:]
+ settingsdir = os.path.join(nativedir, settingsdir)
+ cmd = []
+ cmd.append(os.path.join(workdir, 'merge_settings.py'))
+ cmd.append(os.path.join(settingsdir, 'defaults.yaml'))
+
+ fetch = bb.fetch2.Fetch([], d)
+ override_urls = filter(lambda f: f.endswith('.override.yml'), fetch.urls)
+ for url in override_urls:
+ bb.debug(2, 'Overriding with source: ' + url)
+ local_base = os.path.basename(fetch.localpath(url))
+ filename = os.path.join(workdir, local_base)
+ cmd.append(filename)
+
+ # Invoke the script and don't catch any resulting exception.
+ subprocess.check_call(cmd)
+}
+# python-pyyaml-native is installed by do_configure, so put this task after
+addtask merge_settings after do_configure before do_compile
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 000000000..01f5e3552
--- /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)
diff --git a/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings/merge_settings.py b/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings/merge_settings.py
index 01f5e3552..f1395f001 100755..120000
--- a/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings/merge_settings.py
+++ b/meta-phosphor/common/recipes-phosphor/settings/phosphor-settings/merge_settings.py
@@ -1,58 +1 @@
-#!/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)
+../phosphor-settings-manager/merge_settings.py \ No newline at end of file
OpenPOWER on IntegriCloud