From 22b30b928112eba87769b40e421819632e14e03c Mon Sep 17 00:00:00 2001
From: "martin f. krafft" <madduck@madduck.net>
Date: Sat, 22 Jun 2013 11:43:38 +0200
Subject: [PATCH] Let update-rc.d set changed flag properly

When update-rc.d is used to enable/disable service, the changed flag was
always true (see #2189). This commit fixes that.

Signed-off-by: martin f. krafft <madduck@madduck.net>
---
 system/service | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/system/service b/system/service
index 0a1ac6d7d35..54a386ebd1f 100644
--- a/system/service
+++ b/system/service
@@ -547,6 +547,24 @@ class LinuxService(Service):
                 if not self.enable:
                     return
 
+        if self.enable_cmd.endswith("update-rc.d"):
+            action = 'enable' if self.enable else 'disable'
+            (rc, out, err) = self.execute_command("%s -n %s %s" \
+                                                  % (self.enable_cmd, self.name, action))
+            self.changed = False
+            for line in out.splitlines():
+                if line.startswith('rename'):
+                    self.changed = True
+                    break
+
+            if self.module.check_mode:
+                self.module.exit_json(changed=changed)
+
+            if not self.changed:
+                return
+
+            return self.execute_command("%s %s %s" % (self.enable_cmd, self.name, action))
+
         # we change argument depending on real binary used:
         # - update-rc.d and systemctl wants enable/disable
         # - chkconfig wants on/off
@@ -561,9 +579,7 @@ class LinuxService(Service):
             enable_disable = "disable"
             add_delete = "delete"
 
-        if self.enable_cmd.endswith("update-rc.d"):
-            args = (self.enable_cmd, self.name, enable_disable)
-        elif self.enable_cmd.endswith("rc-update"):
+        if self.enable_cmd.endswith("rc-update"):
             args = (self.enable_cmd, add_delete, self.name + " " + self.runlevel)
         elif self.enable_cmd.endswith("systemctl"):
             args = (self.enable_cmd, enable_disable, self.name + ".service")