mirror of
https://github.com/containers/podman-compose.git
synced 2025-04-27 10:58:49 +02:00
referenced unmerged pr #192 to bring colors into container logging
Signed-off-by: Cody Hutchins <codyhutchins@seed-innovations.com>
This commit is contained in:
parent
90dcfdbf44
commit
68f745fe62
@ -879,7 +879,7 @@ class Podman:
|
|||||||
log(cmd_ls)
|
log(cmd_ls)
|
||||||
return subprocess.check_output(cmd_ls)
|
return subprocess.check_output(cmd_ls)
|
||||||
|
|
||||||
def run(self, podman_args, cmd='', cmd_args=None, wait=True, sleep=1, obj=None):
|
def run(self, podman_args, cmd='', cmd_args=None, wait=True, sleep=1, obj=None, log_formatter=None):
|
||||||
if obj is not None:
|
if obj is not None:
|
||||||
obj.exit_code = None
|
obj.exit_code = None
|
||||||
cmd_args = list(map(str, cmd_args or []))
|
cmd_args = list(map(str, cmd_args or []))
|
||||||
@ -889,7 +889,14 @@ class Podman:
|
|||||||
if self.dry_run:
|
if self.dry_run:
|
||||||
return None
|
return None
|
||||||
# subprocess.Popen(args, bufsize = 0, executable = None, stdin = None, stdout = None, stderr = None, preexec_fn = None, close_fds = False, shell = False, cwd = None, env = None, universal_newlines = False, startupinfo = None, creationflags = 0)
|
# subprocess.Popen(args, bufsize = 0, executable = None, stdin = None, stdout = None, stderr = None, preexec_fn = None, close_fds = False, shell = False, cwd = None, env = None, universal_newlines = False, startupinfo = None, creationflags = 0)
|
||||||
p = subprocess.Popen(cmd_ls)
|
if log_formatter is not None:
|
||||||
|
# Pipe podman process output through log_formatter (which can add colored prefix)
|
||||||
|
p = subprocess.Popen(cmd_ls, stdout=subprocess.PIPE)
|
||||||
|
_ = subprocess.Popen(log_formatter, stdin=p.stdout)
|
||||||
|
p.stdout.close() # Allow p_process to receive a SIGPIPE if logging process exits.
|
||||||
|
else:
|
||||||
|
p = subprocess.Popen(cmd_ls)
|
||||||
|
|
||||||
if wait:
|
if wait:
|
||||||
exit_code = p.wait()
|
exit_code = p.wait()
|
||||||
log("exit code:", exit_code)
|
log("exit code:", exit_code)
|
||||||
@ -1042,6 +1049,7 @@ class PodmanCompose:
|
|||||||
self.container_names_by_service = None
|
self.container_names_by_service = None
|
||||||
self.container_by_name = None
|
self.container_by_name = None
|
||||||
self._prefer_volume_over_mount = True
|
self._prefer_volume_over_mount = True
|
||||||
|
self.console_colors = ["\x1B[1;32m", "\x1B[1;33m", "\x1B[1;34m", "\x1B[1;35m", "\x1B[1;36m"]
|
||||||
|
|
||||||
def get_podman_args(self, cmd):
|
def get_podman_args(self, cmd):
|
||||||
xargs = []
|
xargs = []
|
||||||
@ -1504,14 +1512,25 @@ def compose_up(compose, args):
|
|||||||
args.abort_on_container_exit=True
|
args.abort_on_container_exit=True
|
||||||
|
|
||||||
threads = []
|
threads = []
|
||||||
|
|
||||||
|
max_service_length = 0
|
||||||
for cnt in compose.containers:
|
for cnt in compose.containers:
|
||||||
|
curr_length = len(cnt["_service"])
|
||||||
|
max_service_length = curr_length if curr_length > max_service_length else max_service_length
|
||||||
|
|
||||||
|
for i, cnt in enumerate(compose.containers):
|
||||||
|
# Add colored service prefix to output by piping output through sed
|
||||||
|
color_idx = i % len(compose.console_colors)
|
||||||
|
color = compose.console_colors[color_idx]
|
||||||
|
space_suffix=' ' * (max_service_length - len(cnt["_service"]) + 1)
|
||||||
|
log_formatter = 's/^/{}[{}]{}|\x1B[0m\ /;'.format(color, cnt["_service"], space_suffix)
|
||||||
|
log_formatter = ["sed", "-e", log_formatter]
|
||||||
if cnt["_service"] in excluded:
|
if cnt["_service"] in excluded:
|
||||||
log("** skipping: ", cnt['name'])
|
log("** skipping: ", cnt['name'])
|
||||||
continue
|
continue
|
||||||
# TODO: remove sleep from podman.run
|
# TODO: remove sleep from podman.run
|
||||||
obj = compose if exit_code_from == cnt['_service'] else None
|
obj = compose if exit_code_from == cnt['_service'] else None
|
||||||
thread = Thread(target=compose.podman.run, args=[[], 'start', ['-a', cnt['name']]], kwargs={"obj":obj}, daemon=True, name=cnt['name'])
|
thread = Thread(target=compose.podman.run, args=[[], 'start', ['-a', cnt['name']]], kwargs={"obj":obj, "log_formatter": log_formatter}, daemon=True, name=cnt['name'])thread.start()
|
||||||
thread.start()
|
|
||||||
threads.append(thread)
|
threads.append(thread)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user