mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Add a way to print output from commands
Instead pof always capturing the output, make it possible to let it go to the standard output pipes. Use this in ipactl to let init scripts show their output. Fixes: https://fedorahosted.org/freeipa/ticket/765
This commit is contained in:
parent
e73efb9a90
commit
373455026e
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user