forked from extern/podman-compose
#289: exit code and test for that
This commit is contained in:
parent
c187e88eaf
commit
72c3572123
@ -876,6 +876,8 @@ class Podman:
|
|||||||
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):
|
||||||
|
if obj is not None:
|
||||||
|
obj.exit_code = None
|
||||||
cmd_args = list(map(str, cmd_args or []))
|
cmd_args = list(map(str, cmd_args or []))
|
||||||
xargs = self.compose.get_podman_args(cmd) if cmd else []
|
xargs = self.compose.get_podman_args(cmd) if cmd else []
|
||||||
cmd_ls = [self.podman_path, *podman_args, cmd] + xargs + cmd_args
|
cmd_ls = [self.podman_path, *podman_args, cmd] + xargs + cmd_args
|
||||||
@ -886,7 +888,7 @@ class Podman:
|
|||||||
p = subprocess.Popen(cmd_ls)
|
p = subprocess.Popen(cmd_ls)
|
||||||
if wait:
|
if wait:
|
||||||
exit_code = p.wait()
|
exit_code = p.wait()
|
||||||
print(exit_code)
|
print("exit code:", exit_code)
|
||||||
if obj is not None:
|
if obj is not None:
|
||||||
obj.exit_code = exit_code
|
obj.exit_code = exit_code
|
||||||
|
|
||||||
@ -1436,6 +1438,9 @@ def compose_up(compose, args):
|
|||||||
# TODO: handle already existing
|
# TODO: handle already existing
|
||||||
# TODO: if error creating do not enter loop
|
# TODO: if error creating do not enter loop
|
||||||
# TODO: colors if sys.stdout.isatty()
|
# TODO: colors if sys.stdout.isatty()
|
||||||
|
exit_code_from = args.__dict__.get('exit_code_from', None)
|
||||||
|
if exit_code_from:
|
||||||
|
args.abort_on_container_exit=True
|
||||||
|
|
||||||
threads = []
|
threads = []
|
||||||
for cnt in compose.containers:
|
for cnt in compose.containers:
|
||||||
@ -1443,17 +1448,19 @@ def compose_up(compose, args):
|
|||||||
print("** skipping: ", cnt['name'])
|
print("** skipping: ", cnt['name'])
|
||||||
continue
|
continue
|
||||||
# TODO: remove sleep from podman.run
|
# TODO: remove sleep from podman.run
|
||||||
obj = compose if args.__dict__.get('exit_code_from', None) == cnt['name'] 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}, daemon=True, name=cnt['name'])
|
||||||
thread.start()
|
thread.start()
|
||||||
threads.append(thread)
|
threads.append(thread)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
while threads:
|
while threads:
|
||||||
for thread in threads:
|
for thread in threads:
|
||||||
thread.join(timeout=1.0)
|
thread.join(timeout=1.0)
|
||||||
if not thread.is_alive():
|
if not thread.is_alive():
|
||||||
threads.remove(thread)
|
threads.remove(thread)
|
||||||
if args.abort_on_container_exit:
|
if args.abort_on_container_exit:
|
||||||
|
time.sleep(1)
|
||||||
exit_code = compose.exit_code if compose.exit_code is not None else -1
|
exit_code = compose.exit_code if compose.exit_code is not None else -1
|
||||||
exit(exit_code)
|
exit(exit_code)
|
||||||
|
|
||||||
|
15
tests/exit-from/README.md
Normal file
15
tests/exit-from/README.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
We have service named sh1 that exits with code 1 and sh2 that exists with code 2
|
||||||
|
|
||||||
|
```
|
||||||
|
podman-compose up --exit-code-from=sh1
|
||||||
|
echo $?
|
||||||
|
```
|
||||||
|
|
||||||
|
the above should give 1.
|
||||||
|
|
||||||
|
```
|
||||||
|
podman-compose up --exit-code-from=sh2
|
||||||
|
echo $?
|
||||||
|
```
|
||||||
|
|
||||||
|
the above should give 2.
|
21
tests/exit-from/docker-compose.yaml
Normal file
21
tests/exit-from/docker-compose.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
too_long:
|
||||||
|
image: busybox
|
||||||
|
command: ["/bin/busybox", "sh", "-c", "sleep 3600; exit 0"]
|
||||||
|
tmpfs:
|
||||||
|
- /run
|
||||||
|
- /tmp
|
||||||
|
sh1:
|
||||||
|
image: busybox
|
||||||
|
command: ["/bin/busybox", "sh", "-c", "sleep 5; exit 1"]
|
||||||
|
tmpfs:
|
||||||
|
- /run
|
||||||
|
- /tmp
|
||||||
|
sh2:
|
||||||
|
image: busybox
|
||||||
|
command: ["/bin/busybox", "sh", "-c", "sleep 5; exit 2"]
|
||||||
|
tmpfs:
|
||||||
|
- /run
|
||||||
|
- /tmp
|
||||||
|
|
Loading…
Reference in New Issue
Block a user