From aa0cad528adcdc5cd3f69cb257ae54644090eb91 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Wed, 23 Nov 2016 14:00:01 -0500 Subject: systemctl show rc changes across versions to avoid different errors across versions, ignore rc in favor of found/notfound fixes #5710 --- system/systemd.py | 63 ++++++++++++++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 33 deletions(-) (limited to 'system') diff --git a/system/systemd.py b/system/systemd.py index f8ee07d9..d835b85f 100644 --- a/system/systemd.py +++ b/system/systemd.py @@ -272,44 +272,41 @@ def main(): if rc != 0: module.fail_json(msg='failure %d during daemon-reload: %s' % (rc, err)) - # check service data - (rc, out, err) = module.run_command("%s show '%s'" % (systemctl, unit)) - if rc != 0: - module.fail_json(msg='failure %d running systemctl show for %r: %s' % (rc, unit, err)) - found = False is_initd = sysv_exists(unit) is_systemd = False - # load return of systemctl show into dictionary for easy access and return - multival = [] - if out: - k = None - for line in to_native(out).split('\n'): # systemd can have multiline values delimited with {} - if line.strip(): - if k is None: - if '=' in line: - k,v = line.split('=', 1) - if v.lstrip().startswith('{'): - if not v.rstrip().endswith('}'): - multival.append(line) - continue - result['status'][k] = v.strip() - k = None - else: - if line.rstrip().endswith('}'): - result['status'][k] = '\n'.join(multival).strip() - multival = [] - k = None + # check service data, cannot error out on rc as it changes across versions, assume not found + (rc, out, err) = module.run_command("%s show '%s'" % (systemctl, unit)) + if rc == 0: + # load return of systemctl show into dictionary for easy access and return + multival = [] + if out: + k = None + for line in to_native(out).split('\n'): # systemd can have multiline values delimited with {} + if line.strip(): + if k is None: + if '=' in line: + k,v = line.split('=', 1) + if v.lstrip().startswith('{'): + if not v.rstrip().endswith('}'): + multival.append(line) + continue + result['status'][k] = v.strip() + k = None else: - multival.append(line) - - is_systemd = 'LoadState' in result['status'] and result['status']['LoadState'] != 'not-found' - - # Check for loading error - if is_systemd and 'LoadError' in result['status']: - module.fail_json(msg="Error loading unit file '%s': %s" % (unit, result['status']['LoadError'])) - + if line.rstrip().endswith('}'): + result['status'][k] = '\n'.join(multival).strip() + multival = [] + k = None + else: + multival.append(line) + + is_systemd = 'LoadState' in result['status'] and result['status']['LoadState'] != 'not-found' + + # Check for loading error + if is_systemd and 'LoadError' in result['status']: + module.fail_json(msg="Error loading unit file '%s': %s" % (unit, result['status']['LoadError'])) # Does service exist? found = is_systemd or is_initd -- cgit v1.2.1