classes-systemd: Add override variable
Add SYSTEMD_OVERRIDE variable for easy override file deployment.
Change-Id: I5114296254f118fb2b9883615a710c0329921fa7
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/classes/obmc-phosphor-systemd.bbclass b/classes/obmc-phosphor-systemd.bbclass
index 1881ec0..3d7d846 100644
--- a/classes/obmc-phosphor-systemd.bbclass
+++ b/classes/obmc-phosphor-systemd.bbclass
@@ -33,6 +33,15 @@
# the ${systemd_system_unitdir} namespace, where:
# tgt: the link target
# name: the link name, relative to ${systemd_system_unitdir}
+#
+# SYSTEMD_OVERRIDE_${PN} = "src:dest"
+# A specification for installing unit overrides where:
+# src: the override file template
+# dest: the override install location, relative to ${systemd_system_unitdir}
+#
+# Typically SYSTEMD_SUBSTITUTIONS is used to deploy a range
+# of overrides from a single template file. To simply install
+# a single override use "foo.conf:my-service.d/foo.conf"
inherit obmc-phosphor-utils
@@ -179,6 +188,15 @@
set_append(d, '_INSTALL_LINKS', spec)
+ def add_override(d, spec, pkg):
+ tmpl, dest = spec.split(':')
+ set_append(d, '_INSTALL_OVERRIDES', '%s' % spec)
+ unit_dir = d.getVar('systemd_system_unitdir', True)
+ set_append(d, 'FILES_%s' % pkg, '%s/%s' % (unit_dir, dest))
+ add_default_subs(d, '%s' % dest)
+ add_sd_user(d, '%s' % dest, pkg)
+
+
pn = d.getVar('PN', True)
if d.getVar('SYSTEMD_SERVICE_%s' % pn, True) is None:
d.setVar('SYSTEMD_SERVICE_%s' % pn, '%s.service' % pn)
@@ -199,6 +217,8 @@
add_env_file(d, name, pkg)
for spec in listvar_to_list(d, 'SYSTEMD_LINK_%s' % pkg):
install_link(d, spec, pkg)
+ for spec in listvar_to_list(d, 'SYSTEMD_OVERRIDE_%s' % pkg):
+ add_override(d, spec, pkg)
}
@@ -262,8 +282,32 @@
os.symlink(tgt, dest)
+ def install_overrides(d):
+ install_dir = d.getVar('D', True)
+ install_dir += d.getVar('systemd_system_unitdir', True)
+ searchpaths = d.getVar('FILESPATH', True)
+
+ for spec in listvar_to_list(d, '_INSTALL_OVERRIDES'):
+ tmpl, dest = spec.split(':')
+ source = bb.utils.which(searchpaths, tmpl)
+ if not os.path.isfile(source):
+ bb.fatal('Did not find SYSTEMD_OVERRIDE '
+ 'template: \'%s\'' % source)
+
+ dest = os.path.join(install_dir, dest)
+ parent = os.path.dirname(dest)
+ if not os.path.exists(parent):
+ os.makedirs(parent)
+
+ with open(source, 'r') as fd:
+ content = fd.read()
+ with open('%s' % dest, 'w+') as fd:
+ fd.write(content)
+
+
install_links(d)
install_envs(d)
+ install_overrides(d)
make_subs(d)
}