diff --git a/lib/ansible/modules/system/service.py b/lib/ansible/modules/system/service.py index 2e89fb8739..f49f74f421 100644 --- a/lib/ansible/modules/system/service.py +++ b/lib/ansible/modules/system/service.py @@ -944,10 +944,11 @@ class FreeBsdService(Service): def get_service_tools(self): self.svc_cmd = self.module.get_bin_path('service', True) - if not self.svc_cmd: self.module.fail_json(msg='unable to find service binary') + self.sysrc_cmd = self.module.get_bin_path('sysrc') + def get_service_status(self): rc, stdout, stderr = self.execute_command("%s %s %s %s" % (self.svc_cmd, self.name, 'onestatus', self.arguments)) if self.name == "pf": @@ -992,10 +993,32 @@ class FreeBsdService(Service): if self.rcconf_key is None: self.module.fail_json(msg="unable to determine rcvar", stdout=stdout, stderr=stderr) - try: - return self.service_enable_rcconf() - except Exception: - self.module.fail_json(msg='unable to set rcvar') + if self.sysrc_cmd: # FreeBSD >= 9.2 + + rc, current_rcconf_value, stderr = self.execute_command("%s -n %s" % (self.sysrc_cmd, self.rcconf_key)) + if rc != 0: + self.module.fail_json(msg="unable to get current rcvar value", stdout=stdout, stderr=stderr) + + if current_rcconf_value.strip().upper() != self.rcconf_value: + + self.changed = True + + 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 ) ) + if rc != 0: + self.module.fail_json(msg="unable to set rcvar using sysrc", stdout=stdout, stderr=stderr) + + else: + self.changed = False + + else: # Legacy (FreeBSD < 9.2) + try: + return self.service_enable_rcconf() + except Exception: + self.module.fail_json(msg='unable to set rcvar') + def service_control(self):