diff --git a/system/service.py b/system/service.py index b5c6da9dee8..ac266087e85 100644 --- a/system/service.py +++ b/system/service.py @@ -944,34 +944,48 @@ class FreeBsdService(Service): class OpenBsdService(Service): """ - This is the OpenBSD Service manipulation class - it uses /etc/rc.d for - service control. Enabling a service is currently supported if rcctl is present + This is the OpenBSD Service manipulation class - it uses rcctl(8) or + /etc/rc.d scripts for service control. Enabling a service is + only supported if rcctl is present. """ platform = 'OpenBSD' distribution = None def get_service_tools(self): - rcdir = '/etc/rc.d' + self.enable_cmd = self.module.get_bin_path('rcctl') - rc_script = "%s/%s" % (rcdir, self.name) - if os.path.isfile(rc_script): - self.svc_cmd = rc_script + if self.enable_cmd: + self.svc_cmd = self.enable_cmd + else: + rcdir = '/etc/rc.d' - if not self.svc_cmd: - self.module.fail_json(msg='unable to find rc.d script') + rc_script = "%s/%s" % (rcdir, self.name) + if os.path.isfile(rc_script): + self.svc_cmd = rc_script - self.enable_cmd = self.module.get_bin_path('rcctl') + if not self.svc_cmd: + self.module.fail_json(msg='unable to find svc_cmd') def get_service_status(self): - rc, stdout, stderr = self.execute_command("%s %s" % (self.svc_cmd, 'check')) + if self.enable_cmd: + rc, stdout, stderr = self.execute_command("%s %s %s" % (self.svc_cmd, 'check', self.name)) + else: + rc, stdout, stderr = self.execute_command("%s %s" % (self.svc_cmd, 'check')) + + if stderr: + self.module.fail_json(msg=stderr) + if rc == 1: self.running = False elif rc == 0: self.running = True def service_control(self): - return self.execute_command("%s -f %s" % (self.svc_cmd, self.action)) + if self.enable_cmd: + return self.execute_command("%s -f %s %s" % (self.svc_cmd, self.action, self.name)) + else: + return self.execute_command("%s -f %s" % (self.svc_cmd, self.action)) def service_enable(self): if not self.enable_cmd: @@ -982,10 +996,13 @@ class OpenBsdService(Service): if stderr: self.module.fail_json(msg=stderr) + current_flags = stdout.rstrip() + if self.enable: - action = "enable %s flags %s" % (self.name, self.arguments) - args = self.arguments - if rc == 0: + action = "enable %s" % (self.name) + if self.arguments or self.arguments != current_flags: + action = action + " flags %s" % (self.arguments) + if rc == 0 and self.arguments == current_flags: return else: action = "disable %s" % self.name