From 687146f04022213f631c73b54ab41455eeb46194 Mon Sep 17 00:00:00 2001 From: Brad Bishop Date: Mon, 11 Jul 2016 13:05:26 -0400 Subject: classes-systemd: Add restart policy warning Print a warning if a systemd service unit is detected without a restart policy defined. To inhibit: INHIBIT_SYSTEMD_RESTART_POLICY_WARNING += "${UNIT}" Change-Id: I27436276425d028d892c7c98736781e8577ad8eb Signed-off-by: Brad Bishop --- .../classes/obmc-phosphor-systemd.bbclass | 39 ++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'meta-phosphor/classes/obmc-phosphor-systemd.bbclass') diff --git a/meta-phosphor/classes/obmc-phosphor-systemd.bbclass b/meta-phosphor/classes/obmc-phosphor-systemd.bbclass index 3df5ee44a..dba39d356 100644 --- a/meta-phosphor/classes/obmc-phosphor-systemd.bbclass +++ b/meta-phosphor/classes/obmc-phosphor-systemd.bbclass @@ -8,6 +8,11 @@ # # Alternatively this class can just be inherited and # ${PN}.service will be added to the main package. +# +# Other variables: +# INHIBIT_SYSTEMD_RESTART_POLICY_${unit} +# Inhibit the warning that is displayed if a service unit without a +# restart policy is detected. inherit obmc-phosphor-utils inherit systemd @@ -15,16 +20,45 @@ inherit systemd _INSTALL_SD_UNITS="" +def systemd_is_service(unit): + return unit.endswith('.service') + + +def systemd_is_template(unit): + return '@.' in unit + + +def systemd_parse_unit(d, path): + import ConfigParser + parser = ConfigParser.SafeConfigParser() + parser.optionxform = str + parser.read('%s' % path) + return parser + + python() { - def add_sd_unit(d, unit, pkg): + def check_sd_unit(d, unit): searchpaths = d.getVar('FILESPATH', True) path = bb.utils.which(searchpaths, '%s' % unit) if not os.path.isfile(path): bb.fatal('Did not find unit file "%s"' % unit) + + parser = systemd_parse_unit(d, path) + inhibit = listvar_to_list(d, 'INHIBIT_SYSTEMD_RESTART_POLICY_WARNING') + if systemd_is_service(unit) and \ + not systemd_is_template(unit) and \ + unit not in inhibit and \ + not parser.has_option('Service', 'Restart'): + bb.warn('Systemd unit \'%s\' does not ' + 'have a restart policy defined.' % unit) + + + def add_sd_unit(d, unit, pkg): set_append(d, 'SRC_URI', 'file://%s' % unit) set_append(d, 'FILES_%s' % pkg, '%s/%s' \ % (d.getVar('systemd_system_unitdir', True), unit)) - set_append(d, '_INSTALL_SD_UNITS', '%s' % unit) + set_append(d, '_INSTALL_SD_UNITS', unit) + pn = d.getVar('PN', True) if d.getVar('SYSTEMD_SERVICE_%s' % pn, True) is None: @@ -32,6 +66,7 @@ python() { for pkg in listvar_to_list(d, 'SYSTEMD_PACKAGES'): for unit in listvar_to_list(d, 'SYSTEMD_SERVICE_%s' % pkg): + check_sd_unit(d, unit) add_sd_unit(d, unit, pkg) } -- cgit v1.2.1