summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xinstall/tools/ipactl28
-rw-r--r--ipapython/ipautil.py27
-rw-r--r--ipaserver/install/service.py27
3 files changed, 48 insertions, 34 deletions
diff --git a/install/tools/ipactl b/install/tools/ipactl
index 059b8604..ee6783ed 100755
--- a/install/tools/ipactl
+++ b/install/tools/ipactl
@@ -88,7 +88,7 @@ def ipa_start(serverid):
try:
print "Starting Directory Service"
- service.start('dirsrv', instance_name=serverid)
+ service.start('dirsrv', instance_name=serverid, capture_output=False)
except:
emit_err("Failed to start Directory Service")
return
@@ -99,7 +99,7 @@ def ipa_start(serverid):
except:
emit_err("Failed to read data from Directory Service")
emit_err("Shutting down")
- service.stop('dirsrv', instance_name=serverid)
+ service.stop('dirsrv', instance_name=serverid, capture_output=False)
if len(svc_list) == 0:
return
@@ -108,18 +108,18 @@ def ipa_start(serverid):
svc_name = service.SERVICE_LIST[svc][0]
try:
print "Starting %s Service" % svc
- service.start(svc_name)
+ service.start(svc_name, capture_output=False)
except:
emit_err("Failed to start %s Service" % svc)
emit_err("Shutting down")
for (order, svc) in sorted(svc_list):
svc_name = service.SERVICE_LIST[svc][0]
try:
- service.stop(svc_name)
+ service.stop(svc_name, capture_output=False)
except:
pass
try:
- service.stop('dirsrv', instance_name=serverid)
+ service.stop('dirsrv', instance_name=serverid, capture_output=False)
except:
pass
return
@@ -134,12 +134,12 @@ def ipa_stop(serverid):
# and see if we can get anything. If not throw our hands up and just
# exit
try:
- service.start('dirsrv', instance_name=serverid)
+ service.start('dirsrv', instance_name=serverid, capture_output=False)
svc_list = get_config()
except:
emit_err("Failed to read data from Directory Service")
emit_err("Shutting down")
- service.stop('dirsrv', instance_name=serverid)
+ service.stop('dirsrv', instance_name=serverid, capture_output=False)
if len(svc_list) == 0:
return
@@ -148,13 +148,13 @@ def ipa_stop(serverid):
svc_name = service.SERVICE_LIST[svc][0]
try:
print "Stopping %s Service" % svc
- service.stop(svc_name)
+ service.stop(svc_name, capture_output=False)
except:
emit_err("Failed to stop %s Service" % svc)
try:
print "Stopping Directory Service"
- service.stop('dirsrv', instance_name=serverid)
+ service.stop('dirsrv', instance_name=serverid, capture_output=False)
except:
emit_err("Failed to stop Directory Service")
return
@@ -163,7 +163,7 @@ def ipa_stop(serverid):
def ipa_restart(serverid):
try:
print "Restarting Directory Service"
- service.restart('dirsrv', instance_name=serverid)
+ service.restart('dirsrv', instance_name=serverid, capture_output=False)
except:
emit_err("Failed to restart Directory Service")
return
@@ -174,7 +174,7 @@ def ipa_restart(serverid):
except:
emit_err("Failed to read data from Directory Service")
emit_err("Shutting down")
- service.stop('dirsrv', instance_name=serverid)
+ service.stop('dirsrv', instance_name=serverid, capture_output=False)
if len(svc_list) == 0:
return
@@ -183,18 +183,18 @@ def ipa_restart(serverid):
svc_name = service.SERVICE_LIST[svc][0]
try:
print "Restarting %s Service" % svc
- service.restart(svc_name)
+ service.restart(svc_name, capture_output=False)
except:
emit_err("Failed to restart %s Service" % svc)
emit_err("Shutting down")
for (order, svc) in sorted(svc_list):
svc_name = service.SERVICE_LIST[svc][0]
try:
- service.stop(svc_name)
+ service.stop(svc_name, capture_output=False)
except:
pass
try:
- service.stop('dirsrv', instance_name=serverid)
+ service.stop('dirsrv', instance_name=serverid, capture_output=False)
except:
pass
return
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index 8ce8bb97..69a410f4 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -92,7 +92,8 @@ def write_tmp_file(txt):
return fd
-def run(args, stdin=None, raiseonerr=True, nolog=(), env=None):
+def run(args, stdin=None, raiseonerr=True,
+ nolog=(), env=None, capture_output=True):
"""
Execute a command and return stdin, stdout and the process return code.
@@ -116,14 +117,23 @@ def run(args, stdin=None, raiseonerr=True, nolog=(), env=None):
If an value isn't found in the list it is silently ignored.
"""
+ p_in = None
+ p_out = None
+ p_err = None
+
if env is None:
env={"PATH": "/bin:/sbin:/usr/kerberos/bin:/usr/kerberos/sbin:/usr/bin:/usr/sbin"}
if stdin:
- p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True, env=env)
- stdout,stderr = p.communicate(stdin)
- else:
- p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True, env=env)
- stdout,stderr = p.communicate()
+ p_in = subprocess.PIPE
+ if capture_output:
+ p_out = subprocess.PIPE
+ p_err = subprocess.PIPE
+ elif len(nolog):
+ raise RuntimeError("Can't use nolog if output is not captured")
+
+ p = subprocess.Popen(args, stdin=p_in, stdout=p_out, stderr=p_err,
+ close_fds=True, env=env)
+ stdout,stderr = p.communicate(stdin)
# The command and its output may include passwords that we don't want
# to log. Run through the nolog items.
@@ -137,8 +147,9 @@ def run(args, stdin=None, raiseonerr=True, nolog=(), env=None):
stdout = stdout.replace(quoted, 'XXXXXXXX')
stderr = stderr.replace(quoted, 'XXXXXXXX')
logging.info('args=%s' % args)
- logging.info('stdout=%s' % stdout)
- logging.info('stderr=%s' % stderr)
+ if capture_output:
+ logging.info('stdout=%s' % stdout)
+ logging.info('stderr=%s' % stderr)
if p.returncode != 0 and raiseonerr:
raise CalledProcessError(p.returncode, args)
diff --git a/ipaserver/install/service.py b/ipaserver/install/service.py
index ef3becdf..1235eaff 100644
--- a/ipaserver/install/service.py
+++ b/ipaserver/install/service.py
@@ -41,14 +41,17 @@ SERVICE_LIST = {
'CA':('pki-cad', 50)
}
-def stop(service_name, instance_name=""):
- ipautil.run(["/sbin/service", service_name, "stop", instance_name])
+def stop(service_name, instance_name="", capture_output=True):
+ ipautil.run(["/sbin/service", service_name, "stop", instance_name],
+ capture_output=capture_output)
-def start(service_name, instance_name=""):
- ipautil.run(["/sbin/service", service_name, "start", instance_name])
+def start(service_name, instance_name="", capture_output=True):
+ ipautil.run(["/sbin/service", service_name, "start", instance_name],
+ capture_output=capture_output)
-def restart(service_name, instance_name=""):
- ipautil.run(["/sbin/service", service_name, "restart", instance_name])
+def restart(service_name, instance_name="", capture_output=True):
+ ipautil.run(["/sbin/service", service_name, "restart", instance_name],
+ capture_output=capture_output)
def is_running(service_name, instance_name=""):
ret = True
@@ -217,14 +220,14 @@ class Service:
def set_output(self, fd):
self.output_fd = fd
- def stop(self, instance_name=""):
- stop(self.service_name, instance_name)
+ def stop(self, instance_name="", capture_output=True):
+ stop(self.service_name, instance_name, capture_output=capture_output)
- def start(self, instance_name=""):
- start(self.service_name, instance_name)
+ def start(self, instance_name="", capture_output=True):
+ start(self.service_name, instance_name, capture_output=capture_output)
- def restart(self, instance_name=""):
- restart(self.service_name, instance_name)
+ def restart(self, instance_name="", capture_output=True):
+ restart(self.service_name, instance_name, capture_output=capture_output)
def is_running(self):
return is_running(self.service_name)