diff options
author | Brian Coca <brian.coca+git@gmail.com> | 2016-11-23 14:00:01 -0500 |
---|---|---|
committer | Brian Coca <bcoca@users.noreply.github.com> | 2016-11-23 14:20:20 -0500 |
commit | aa0cad528adcdc5cd3f69cb257ae54644090eb91 (patch) | |
tree | 820cb9838727b1704bb1a5f4d5b7f5bd06dd3751 | |
parent | 351dd9344e4f9c41d47ba574f554eb16c15c2ce2 (diff) | |
download | ansible-modules-core-aa0cad528adcdc5cd3f69cb257ae54644090eb91.tar.gz |
systemctl show rc changes across versions
to avoid different errors across versions, ignore rc in favor of
found/notfound
fixes #5710
-rw-r--r-- | system/systemd.py | 63 |
1 files changed, 30 insertions, 33 deletions
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 |