improve debug via _CLOUD_INIT_SAVE_STDIN and _CLOUD_INIT_SAVE_STDOUT
This does 2 things: a.) fixes broken logic in 'close_stdin' previously _CLOUD_INIT_SAVE_STDIN had to be set to false to preserve stdin. "save_stdin" should be true to indicate it should be saved. The net result is that you can stuff just add import pdb; pdb.set_trace() to code, and then run something like: sudo _CLOUD_INIT_SAVE_STDIN=1 _CLOUD_INIT_SAVE_STDOUT=1 \ cloud-init single --name=mounts --frequency=always And enter the debugger even if you had a 'output' that would redirect stdin/out by default, like: output: {all: '| tee -a /var/log/cloud-init-output.log'}
This commit is contained in:
parent
c1b947c735
commit
aef06d4f60
@ -406,7 +406,16 @@ def fixup_output(cfg, mode):
|
|||||||
#
|
#
|
||||||
# with a '|', arguments are passed to shell, so one level of
|
# with a '|', arguments are passed to shell, so one level of
|
||||||
# shell escape is required.
|
# shell escape is required.
|
||||||
|
#
|
||||||
|
# if _CLOUD_INIT_SAVE_STDOUT is set in environment to a non empty and true
|
||||||
|
# value then output input will not be closed (useful for debugging).
|
||||||
|
#
|
||||||
def redirect_output(outfmt, errfmt, o_out=None, o_err=None):
|
def redirect_output(outfmt, errfmt, o_out=None, o_err=None):
|
||||||
|
|
||||||
|
if is_true(os.environ.get("_CLOUD_INIT_SAVE_STDOUT")):
|
||||||
|
LOG.debug("Not redirecting output due to _CLOUD_INIT_SAVE_STDOUT")
|
||||||
|
return
|
||||||
|
|
||||||
if not o_out:
|
if not o_out:
|
||||||
o_out = sys.stdout
|
o_out = sys.stdout
|
||||||
if not o_err:
|
if not o_err:
|
||||||
@ -853,10 +862,10 @@ def close_stdin():
|
|||||||
reopen stdin as /dev/null so even subprocesses or other os level things get
|
reopen stdin as /dev/null so even subprocesses or other os level things get
|
||||||
/dev/null as input.
|
/dev/null as input.
|
||||||
|
|
||||||
if _CLOUD_INIT_SAVE_STDIN is set in environment to a non empty or '0' value
|
if _CLOUD_INIT_SAVE_STDIN is set in environment to a non empty and true
|
||||||
then input will not be closed (only useful potentially for debugging).
|
value then input will not be closed (useful for debugging).
|
||||||
"""
|
"""
|
||||||
if is_false(os.environ.get("_CLOUD_INIT_SAVE_STDIN")):
|
if is_true(os.environ.get("_CLOUD_INIT_SAVE_STDIN")):
|
||||||
return
|
return
|
||||||
with open(os.devnull) as fp:
|
with open(os.devnull) as fp:
|
||||||
os.dup2(fp.fileno(), sys.stdin.fileno())
|
os.dup2(fp.fileno(), sys.stdin.fileno())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user