system/service.py: fix false-positive service enablement on FreeBSD. (#4283)
sysrc(8) does not exit with non-zero status when encountering a permission error. By using service(8) `service <name> enabled`, we now check the actual semantics expressed through calling sysrc(8), i.e. we check if the service enablement worked from the rc(8) system's perspective. Note that in case service(8) detects the wrong value is still set, we still output the sysrc(8) output in the fail_json() call: the user can derive the exact reason of failure from sysrc(8) output.
This commit is contained in:
parent
81c663ff71
commit
635c37cec6
1 changed files with 7 additions and 2 deletions
|
@ -1005,9 +1005,14 @@ class FreeBsdService(Service):
|
|||
if self.module.check_mode:
|
||||
self.module.exit_json(changed=True, msg="changing service enablement")
|
||||
|
||||
rc, stdout, stderr = self.execute_command("%s %s=\"%s\"" % (self.sysrc_cmd, self.rcconf_key, self.rcconf_value ) )
|
||||
rc, change_stdout, change_stderr = self.execute_command("%s %s=\"%s\"" % (self.sysrc_cmd, self.rcconf_key, self.rcconf_value ) )
|
||||
if rc != 0:
|
||||
self.module.fail_json(msg="unable to set rcvar using sysrc", stdout=stdout, stderr=stderr)
|
||||
self.module.fail_json(msg="unable to set rcvar using sysrc", stdout=change_stdout, stderr=change_stderr)
|
||||
|
||||
# sysrc does not exit with code 1 on permission error => validate successful change using service(8)
|
||||
rc, check_stdout, check_stderr = self.execute_command("%s %s %s" % (self.svc_cmd, self.name, "enabled"))
|
||||
if self.enable != (rc == 0): # rc = 0 indicates enabled service, rc = 1 indicates disabled service
|
||||
self.module.fail_json(msg="unable to set rcvar: sysrc did not change value", stdout=change_stdout, stderr=change_stderr)
|
||||
|
||||
else:
|
||||
self.changed = False
|
||||
|
|
Loading…
Reference in a new issue