Only touch the service list in the server installer and ipactl.

rob
>From b7942dfbe4bcf2c620b49e7aff9324fc7b2d60a2 Mon Sep 17 00:00:00 2001
From: Rob Crittenden <[email protected]>
Date: Tue, 4 Dec 2012 13:55:30 -0500
Subject: [PATCH] Only update the list of running services in the installer or
 ipactl.

The file is only present in the case of a server installation.

It should only be touched by the server installer and ipactl.

https://fedorahosted.org/freeipa/ticket/3277
---
 install/tools/ipactl          |  5 ++++-
 ipapython/platform/base.py    |  9 +++++++--
 ipapython/platform/systemd.py | 12 ++++++++++--
 3 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/install/tools/ipactl b/install/tools/ipactl
index f931a27257aaca987db46c7295cbb4708a6801f7..2a60b9eaf4e1ffb536fd389d17ff747c99492a35 100755
--- a/install/tools/ipactl
+++ b/install/tools/ipactl
@@ -175,6 +175,9 @@ def get_config_from_file():
 
     svc_list = []
 
+    if not os.path.exists(ipaservices.get_svc_list_file()):
+        return svc_list
+
     try:
         f = open(ipaservices.get_svc_list_file(), 'r')
         svc_list = json.load(f)
@@ -469,7 +472,7 @@ def main():
         else:
             raise e
 
-    api.bootstrap(context='cli', debug=options.debug)
+    api.bootstrap(context='ipactl', debug=options.debug)
     api.finalize()
 
     if '.' not in api.env.host:
diff --git a/ipapython/platform/base.py b/ipapython/platform/base.py
index 8385e1038c0609ae06a7a4a25d844de48360f19e..d1d42b3259d735d88df4e9c1698d5f8781dd1124 100644
--- a/ipapython/platform/base.py
+++ b/ipapython/platform/base.py
@@ -136,12 +136,15 @@ class PlatformService(object):
     def __init__(self, service_name):
         self.service_name = service_name
 
-    def start(self, instance_name="", capture_output=True, wait=True):
+    def start(self, instance_name="", capture_output=True, wait=True,
+        update_list=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
         """
+        if not update_list:
+            return
         svc_list = []
         try:
             f = open(SVC_LIST_FILE, 'r')
@@ -159,10 +162,12 @@ class PlatformService(object):
         f.close()
         return
 
-    def stop(self, instance_name="", capture_output=True):
+    def stop(self, instance_name="", capture_output=True, update_list=True):
         """
         When a service is stopped remove it from the service list file.
         """
+        if not update_list:
+            return
         svc_list = []
         try:
             f = open(SVC_LIST_FILE, 'r')
diff --git a/ipapython/platform/systemd.py b/ipapython/platform/systemd.py
index bb6c009299adc9ca8488308afffdd767975fc2ae..359b593594f2db2b1a1810abbd71deebbf33677e 100644
--- a/ipapython/platform/systemd.py
+++ b/ipapython/platform/systemd.py
@@ -91,13 +91,21 @@ 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)
+        if 'context' in api.env and api.env.context in ['ipactl', 'installer']:
+            update_list = True
+        else:
+            update_list = False
+        super(SystemdService, self).stop(instance_name,update_list=update_list)
 
     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 'context' in api.env and api.env.context in ['ipactl', 'installer']:
+            update_list = True
+        else:
+            update_list = False
         if wait and self.is_running(instance_name):
             self.__wait_for_open_ports(self.service_instance(instance_name))
-        super(SystemdService, self).start(instance_name)
+        super(SystemdService, self).start(instance_name, update_list=update_list)
 
     def restart(self, instance_name="", capture_output=True, wait=True):
         # Restart command is broken before systemd-36-3.fc16
-- 
1.7.11.4

_______________________________________________
Freeipa-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to