From 7d1ff1bd388efbf29391bddc493068d60457e1ea Mon Sep 17 00:00:00 2001 From: tin Date: Thu, 4 Apr 2013 21:00:47 +0200 Subject: [PATCH 1/2] Changed the service module to terminate early if only changing the enabled state. Expanded the documentation slightly. --- library/service | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/library/service b/library/service index 08f5d8ef491..ec009c11cf7 100644 --- a/library/service +++ b/library/service @@ -37,7 +37,8 @@ options: description: - C(started)/C(stopped) are idempotent actions that will not run commands unless necessary. C(restarted) will always bounce the - service. C(reloaded) will always reload. + service. C(reloaded) will always reload. At least one of state + and enabled are required. pattern: required: false version_added: "0.7" @@ -50,7 +51,9 @@ options: required: false choices: [ "yes", "no" ] description: - - Whether the service should start on boot. + - Whether the service should start on boot. At least one of state and + enabled are required. + arguments: description: - Additional arguments provided on the command line @@ -738,7 +741,7 @@ class SunOSService(Service): self.module.fail_json(msg='unable to find svcs binary') self.svcadm_cmd = self.module.get_bin_path('svcadm', True) - + if not self.svcadm_cmd: self.module.fail_json(msg='unable to find svcadm binary') @@ -789,9 +792,9 @@ class SunOSService(Service): enabled = True if line.find("temporary") != -1: temporary = True - + startup_enabled = (enabled and not temporary) or (not enabled and temporary) - + if self.enable and startup_enabled: return elif (not self.enable) and (not startup_enabled): @@ -813,8 +816,8 @@ class SunOSService(Service): self.module.fail_json(msg=stdout) self.changed = True - - + + def service_control(self): status = self.get_sunos_svcs_status() @@ -838,7 +841,7 @@ class SunOSService(Service): subcmd = "restart" elif self.action == 'restart' and status != 'online': subcmd = "enable -rst" - + return self.execute_command("%s %s %s" % (self.svcadm_cmd, subcmd, self.name)) @@ -856,6 +859,8 @@ def main(): ), supports_check_mode=True ) + if module.params['state'] is None and module.params['enabled'] is None: + module.fail_json(msg="Neither 'state' nor 'enabled' set") service = Service(module) @@ -870,7 +875,6 @@ def main(): err = '' result = {} result['name'] = service.name - result['state'] = service.state # Find service management tools service.get_service_tools() @@ -880,6 +884,14 @@ def main(): # FIXME: ideally this should detect if we need to toggle the enablement state, though # it's unlikely the changed handler would need to fire in this case so it's a minor thing. service.service_enable() + result['enabled'] = service.enable + + if module.params['state'] is None: + # Not changing the running state, so bail out now. + result['changed'] = service.changed + module.exit_json(**result) + + result['state'] = service.state # Collect service status if service.pattern: From b528ca7c803c43d7ffc2ce9a04b01efd8fca1e5d Mon Sep 17 00:00:00 2001 From: tin Date: Thu, 4 Apr 2013 21:03:15 +0200 Subject: [PATCH 2/2] Additional example in service documentation. --- library/service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/service b/library/service index ec009c11cf7..2a419d41b4f 100644 --- a/library/service +++ b/library/service @@ -67,6 +67,8 @@ examples: code: "service: name=httpd state=restarted" - description: Example action to reload service httpd, in all cases code: "service: name=httpd state=reloaded" + - description: Example action to enable service httpd, and not touch the running state + code: "service: name=httpd enabled=yes" - description: Example action to start service foo, based on running process /usr/bin/foo code: "service: name=foo pattern=/usr/bin/foo state=started" - description: Example action to restart network service for interface eth0