diff options
author | Rick Elrod <rick@elrod.me> | 2020-04-06 20:38:29 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-06 20:38:29 -0500 |
commit | 13aef3c2e591631440830b6a023e90292a11392b (patch) | |
tree | f83a8a203cc1e0394085146d760476f325e62590 | |
parent | 4916be24fd8be0c223bf5e5f641d676a8d56ad82 (diff) | |
download | ansible-13aef3c2e591631440830b6a023e90292a11392b.tar.gz |
Add --docker-terminate flag to ansible-test (#68688)
* Add --docker-terminate flag to ansible-test
Signed-off-by: Rick Elrod <rick@elrod.me>
-rw-r--r-- | changelogs/fragments/ansible-test-docker-terminate.yml | 2 | ||||
-rw-r--r-- | test/lib/ansible_test/_internal/cli.py | 6 | ||||
-rw-r--r-- | test/lib/ansible_test/_internal/config.py | 1 | ||||
-rw-r--r-- | test/lib/ansible_test/_internal/delegation.py | 7 |
4 files changed, 15 insertions, 1 deletions
diff --git a/changelogs/fragments/ansible-test-docker-terminate.yml b/changelogs/fragments/ansible-test-docker-terminate.yml new file mode 100644 index 0000000000..165a02932b --- /dev/null +++ b/changelogs/fragments/ansible-test-docker-terminate.yml @@ -0,0 +1,2 @@ +minor_changes: + - ansible-test - --docker flag now has an associated --docker-terminate flag which controls if and when the docker container is removed following tests diff --git a/test/lib/ansible_test/_internal/cli.py b/test/lib/ansible_test/_internal/cli.py index c0aa37e5a8..942ef905cc 100644 --- a/test/lib/ansible_test/_internal/cli.py +++ b/test/lib/ansible_test/_internal/cli.py @@ -1031,6 +1031,12 @@ def add_extra_docker_options(parser, integration=True): default=None, help='set seccomp confinement for the test container: %(choices)s') + docker.add_argument('--docker-terminate', + metavar='WHEN', + help='terminate docker container: %(choices)s (default: %(default)s)', + choices=['never', 'always', 'success'], + default='always') + if not integration: return diff --git a/test/lib/ansible_test/_internal/config.py b/test/lib/ansible_test/_internal/config.py index c73e4233a6..4e3eb7be87 100644 --- a/test/lib/ansible_test/_internal/config.py +++ b/test/lib/ansible_test/_internal/config.py @@ -59,6 +59,7 @@ class EnvironmentConfig(CommonConfig): self.docker_keep_git = args.docker_keep_git if 'docker_keep_git' in args else False # type: bool self.docker_seccomp = args.docker_seccomp if 'docker_seccomp' in args else None # type: str self.docker_memory = args.docker_memory if 'docker_memory' in args else None + self.docker_terminate = args.docker_terminate if 'docker_terminate' in args else None # type: str if self.docker_seccomp is None: self.docker_seccomp = get_docker_completion().get(self.docker_raw, {}).get('seccomp', 'default') diff --git a/test/lib/ansible_test/_internal/delegation.py b/test/lib/ansible_test/_internal/delegation.py index a139efd66d..d66b0d10b9 100644 --- a/test/lib/ansible_test/_internal/delegation.py +++ b/test/lib/ansible_test/_internal/delegation.py @@ -230,6 +230,7 @@ def delegate_docker(args, exclude, require, integration_targets): httptester_id = None test_id = None + success = False options = { '--docker': 1, @@ -352,6 +353,9 @@ def delegate_docker(args, exclude, require, integration_targets): try: docker_exec(args, test_id, cmd, options=cmd_options) + # docker_exec will throw SubprocessError if not successful + # If we make it here, all the prep work earlier and the docker_exec line above were all successful. + success = True finally: local_test_root = os.path.dirname(os.path.join(data_context().content.root, data_context().content.results_path)) @@ -368,7 +372,8 @@ def delegate_docker(args, exclude, require, integration_targets): docker_rm(args, httptester_id) if test_id: - docker_rm(args, test_id) + if args.docker_terminate == 'always' or (args.docker_terminate == 'success' and success): + docker_rm(args, test_id) def delegate_remote(args, exclude, require, integration_targets): |