diff options
Diffstat (limited to 'ipapython')
-rw-r--r-- | ipapython/platform/base.py | 42 | ||||
-rw-r--r-- | ipapython/platform/redhat.py | 2 | ||||
-rw-r--r-- | ipapython/platform/systemd.py | 2 | ||||
-rw-r--r-- | ipapython/services.py.in | 4 |
4 files changed, 50 insertions, 0 deletions
diff --git a/ipapython/platform/base.py b/ipapython/platform/base.py index 2d39d2169..8385e1038 100644 --- a/ipapython/platform/base.py +++ b/ipapython/platform/base.py @@ -17,6 +17,8 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. from ipalib.plugable import MagicDict +import json +import os # Canonical names of services as IPA wants to see them. As we need to have # *some* naming, set them as in Red Hat distributions. Actual implementation @@ -40,6 +42,8 @@ wellknownports = { 'pki-tomcatd': [8080, 8443], # used if the incoming instance name is blank } +SVC_LIST_FILE = "/var/run/ipa/services.list" + class AuthConfig(object): """ AuthConfig class implements system-independent interface to configure @@ -133,9 +137,47 @@ class PlatformService(object): self.service_name = service_name def start(self, instance_name="", capture_output=True, wait=True): + """ + When a service is started record the fact in a special file. + This allows ipactl stop to always stop all services that have + been started via ipa tools + """ + svc_list = [] + try: + f = open(SVC_LIST_FILE, 'r') + svc_list = json.load(f) + except Exception: + # not fatal, may be the first service + pass + + if self.service_name not in svc_list: + svc_list.append(self.service_name) + + f = open(SVC_LIST_FILE, 'w') + json.dump(svc_list, f) + f.flush() + f.close() return def stop(self, instance_name="", capture_output=True): + """ + When a service is stopped remove it from the service list file. + """ + svc_list = [] + try: + f = open(SVC_LIST_FILE, 'r') + svc_list = json.load(f) + except Exception: + # not fatal, may be the first service + pass + + while self.service_name in svc_list: + svc_list.remove(self.service_name) + + f = open(SVC_LIST_FILE, 'w') + json.dump(svc_list, f) + f.flush() + f.close() return def restart(self, instance_name="", capture_output=True, wait=True): diff --git a/ipapython/platform/redhat.py b/ipapython/platform/redhat.py index 3551c2841..1de035568 100644 --- a/ipapython/platform/redhat.py +++ b/ipapython/platform/redhat.py @@ -66,11 +66,13 @@ class RedHatService(base.PlatformService): def stop(self, instance_name="", capture_output=True): ipautil.run(["/sbin/service", self.service_name, "stop", instance_name], capture_output=capture_output) + super(RedHatService, self).stop(instance_name) def start(self, instance_name="", capture_output=True, wait=True): ipautil.run(["/sbin/service", self.service_name, "start", instance_name], capture_output=capture_output) if wait and self.is_running(instance_name): self.__wait_for_open_ports(instance_name) + super(RedHatService, self).start(instance_name) def restart(self, instance_name="", capture_output=True, wait=True): ipautil.run(["/sbin/service", self.service_name, "restart", instance_name], capture_output=capture_output) diff --git a/ipapython/platform/systemd.py b/ipapython/platform/systemd.py index 6c25a79b6..bb6c00929 100644 --- a/ipapython/platform/systemd.py +++ b/ipapython/platform/systemd.py @@ -91,11 +91,13 @@ class SystemdService(base.PlatformService): def stop(self, instance_name="", capture_output=True): ipautil.run(["/bin/systemctl", "stop", self.service_instance(instance_name)], capture_output=capture_output) + super(SystemdService, self).stop(instance_name) def start(self, instance_name="", capture_output=True, wait=True): ipautil.run(["/bin/systemctl", "start", self.service_instance(instance_name)], capture_output=capture_output) if wait and self.is_running(instance_name): self.__wait_for_open_ports(self.service_instance(instance_name)) + super(SystemdService, self).start(instance_name) def restart(self, instance_name="", capture_output=True, wait=True): # Restart command is broken before systemd-36-3.fc16 diff --git a/ipapython/services.py.in b/ipapython/services.py.in index 8fe663763..16b62ca85 100644 --- a/ipapython/services.py.in +++ b/ipapython/services.py.in @@ -51,4 +51,8 @@ backup_and_replace_hostname = backup_and_replace_hostname_default def check_selinux_status(): return +from ipapython.platform.base import SVC_LIST_FILE +def get_svc_list_file(): + return SVC_LIST_FILE + from ipapython.platform.SUPPORTED_PLATFORM import * |