summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Basti <mbasti@redhat.com>2014-09-01 10:49:28 +0200
committerMartin Kosek <mkosek@redhat.com>2014-10-21 12:23:03 +0200
commit78018dd67d28fd4c58dbfd68014907cb46f3eff1 (patch)
tree6ddff5f20d8ef99e5f483a4c47773b981ae5ec29
parentb6b19e0cb84e0cf3ca9040ff650a0caa8620e49e (diff)
downloadfreeipa-78018dd67d28fd4c58dbfd68014907cb46f3eff1.tar.gz
freeipa-78018dd67d28fd4c58dbfd68014907cb46f3eff1.tar.xz
freeipa-78018dd67d28fd4c58dbfd68014907cb46f3eff1.zip
Add mask, unmask methods for service
This patch allows mask and unmask services in IPA Reviewed-By: Jan Cholasta <jcholast@redhat.com> Reviewed-By: David Kupka <dkupka@redhat.com>
-rw-r--r--ipaplatform/base/services.py50
-rw-r--r--ipaserver/install/service.py9
2 files changed, 59 insertions, 0 deletions
diff --git a/ipaplatform/base/services.py b/ipaplatform/base/services.py
index ea066b283..4861a5a4b 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 d2556dccc..3d583d397 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)