From f31f5f53447027360afedeca649db4ea610b7ac0 Mon Sep 17 00:00:00 2001 From: Martin Basti Date: Oct 21 2014 10:18:55 +0000 Subject: Add mask, unmask methods for service This patch allows mask and unmask services in IPA Reviewed-By: Jan Cholasta Reviewed-By: David Kupka --- diff --git a/ipaplatform/base/services.py b/ipaplatform/base/services.py index ea066b2..4861a5a 100644 --- a/ipaplatform/base/services.py +++ b/ipaplatform/base/services.py @@ -134,12 +134,21 @@ class PlatformService(object): def is_enabled(self, instance_name=""): return False + def is_masked(self, instance_name=""): + return False + def enable(self, instance_name=""): return def disable(self, instance_name=""): return + def mask(self, instance_name=""): + return + + def unmask(self, instance_name=""): + return + def install(self, instance_name=""): return @@ -327,6 +336,21 @@ class SystemdService(PlatformService): enabled = False return enabled + def is_masked(self, instance_name=""): + masked = False + try: + (sout, serr, rcode) = ipautil.run( + [paths.SYSTEMCTL, + "is-enabled", + self.service_instance(instance_name)]) + + if rcode == 1 and sout == 'masked': + masked = True + + except ipautil.CalledProcessError: + pass + return masked + def enable(self, instance_name=""): if self.lib_path_exists is None: self.lib_path_exists = os.path.exists(self.lib_path) @@ -402,6 +426,18 @@ class SystemdService(PlatformService): else: self.__disable(instance_name) + def mask(self, instance_name=""): + if instance_name != "": + srv_tgt = os.path.join(paths.ETC_SYSTEMD_SYSTEM_DIR, instance_name) + # remove instance file or link before masking + if os.path.islink(srv_tgt): + os.unlink(srv_tgt) + + self.__mask(instance_name) + + def unmask(self, instance_name=""): + self.__unmask(instance_name) + def __enable(self, instance_name=""): try: ipautil.run([paths.SYSTEMCTL, "enable", @@ -416,6 +452,20 @@ class SystemdService(PlatformService): except ipautil.CalledProcessError: pass + def __mask(self, instance_name=""): + try: + ipautil.run([paths.SYSTEMCTL, "mask", + self.service_instance(instance_name)]) + except ipautil.CalledProcessError: + pass + + def __unmask(self, instance_name=""): + try: + ipautil.run([paths.SYSTEMCTL, "unmask", + self.service_instance(instance_name)]) + except ipautil.CalledProcessError: + pass + def install(self): self.enable() diff --git a/ipaserver/install/service.py b/ipaserver/install/service.py index d2556dc..3d583d3 100644 --- a/ipaserver/install/service.py +++ b/ipaserver/install/service.py @@ -296,6 +296,15 @@ class Service(object): def is_enabled(self): return self.service.is_enabled() + def mask(self): + return self.service.mask() + + def unmask(self): + return self.service.unmask() + + def is_masked(self): + return self.service.is_masked() + def backup_state(self, key, value): self.sstore.backup_state(self.service_name, key, value)