Simo Sorce wrote:
On Tue, 2012-12-04 at 15:56 -0500, Rob Crittenden wrote:
Simo Sorce wrote:
On Tue, 2012-12-04 at 15:14 -0500, Rob Crittenden wrote:
Simo Sorce wrote:
On Tue, 2012-12-04 at 14:03 -0500, Rob Crittenden wrote:
Only touch the service list in the server installer and ipactl.
Nack, comments inline.
[..]
This break the fallback we have in ipa_stop()
We expect an exception or a non empty list there.
Ok, I can move the handling so ipactl ignores the exception.
Is the problem that we are printing an error to stdout/stderr ?
Or do you actually want to change behavior somehow ?
We need to change the behavior.
If you run: ipactl stop
then: ipactl status
you get a backtrace because the service list doesn't exist.
Ok, what about defining our own exception and then simply pass on it
except for the stop() case that treats it differently ?
I think checking for file existence is probably going to hit the
majority of the cases. Using a separate exception is probably overkill.
rob
>From 8cddaf2468b883685f711d50e47d69ccd8d1a89b 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 | 10 ++++++++--
ipapython/platform/base.py | 9 +++++++--
ipapython/platform/systemd.py | 12 ++++++++++--
3 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/install/tools/ipactl b/install/tools/ipactl
index f931a27257aaca987db46c7295cbb4708a6801f7..67a9ee4486ffd5ce09fbff3426bd6d046b68f8b6 100755
--- a/install/tools/ipactl
+++ b/install/tools/ipactl
@@ -416,7 +416,10 @@ def ipa_status(options):
try:
svc_list = get_config_from_file()
except IpactlError, e:
- raise e
+ if os.path.exists(ipaservices.get_svc_list_file()):
+ raise e
+ else:
+ svc_list = []
except Exception, e:
raise IpactlError("Failed to get list of services to probe status: " + str(e))
@@ -426,6 +429,9 @@ def ipa_status(options):
print "Directory Service: RUNNING"
else:
print "Directory Service: STOPPED"
+ if len(svc_list) == 0:
+ print ("Directory Service must be running in order to " +
+ "obtain status of other services")
except:
raise IpactlError("Failed to get Directory Service status")
@@ -469,7 +475,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..41a9c83e703512583d6ad3afcb1c87337f575926 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_service_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_service_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_service_list=True):
"""
When a service is stopped remove it from the service list file.
"""
+ if not update_service_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..4e8a03f2f1ce06371c8252e3c7d2071089bebba9 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_service_list = True
+ else:
+ update_service_list = False
+ super(SystemdService, self).stop(instance_name,update_service_list=update_service_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_service_list = True
+ else:
+ update_service_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_service_list=update_service_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