diff options
-rwxr-xr-x | install/tools/ipactl | 28 | ||||
-rw-r--r-- | ipapython/ipautil.py | 27 | ||||
-rw-r--r-- | ipaserver/install/service.py | 27 |
3 files changed, 48 insertions, 34 deletions
diff --git a/install/tools/ipactl b/install/tools/ipactl index 059b86049..ee6783ed3 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 8ce8bb970..69a410f43 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 ef3becdf3..1235eaffd 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) |