From 58a01f5d65b0bc11aa9f4ee1856360b986e3fe7a Mon Sep 17 00:00:00 2001 From: Merlin Mathesius Date: Jul 27 2017 15:38:58 +0000 Subject: inventory: enable standard-inventory-docker to pass extra arguments to "docker run" from --docker-extra-args argument or TEST_DOCKER_EXTRA_ARGS environment variable --- diff --git a/inventory/standard-inventory-docker b/inventory/standard-inventory-docker index 71e9cec..68adf0b 100755 --- a/inventory/standard-inventory-docker +++ b/inventory/standard-inventory-docker @@ -19,14 +19,16 @@ def main(argv): parser = argparse.ArgumentParser(description="Inventory for a container image in a registry") parser.add_argument("--list", action="store_true", help="Verbose output") parser.add_argument('--host', help="Get host variables") + parser.add_argument('--docker-extra-args', help="Extra docker arguments for launching container", + default=os.environ.get("TEST_DOCKER_EXTRA_ARGS", "")) parser.add_argument("subjects", nargs="*", default=shlex.split(os.environ.get("TEST_SUBJECTS", ""))) opts = parser.parse_args() try: if opts.host: - name, data = host(opts.host) + name, data = host(opts.host, opts.docker_extra_args) else: - data = list(opts.subjects) + data = list(opts.subjects, opts.docker_extra_args) sys.stdout.write(json.dumps(data, indent=4, separators=(',', ': '))) except RuntimeError, ex: sys.stderr.write("{0}: {1}\n".format(os.path.basename(sys.argv[0]), str(ex))) @@ -34,19 +36,19 @@ def main(argv): return 0 -def list(subjects): +def list(subjects, docker_extra_args): hosts = [ ] variables = { } for subject in subjects: if subject.startswith("docker:"): image = subject[7:] - name, vars = host(image) + name, vars = host(image, docker_extra_args) if vars: hosts.append(name) variables[name] = vars return { "localhost": { "hosts": hosts, "vars": { } }, "subjects": { "hosts": hosts, "vars": { } }, "_meta": { "hostvars": variables } } -def host(image): +def host(image, docker_extra_args): null = open(os.devnull, 'w') try: @@ -65,11 +67,18 @@ def host(image): except ValueError: diagnose = 0 + # Check for any additional arguments to include when starting docker container + try: + extra_arg_list = shlex.split(docker_extra_args) + except ValueError: + raise RuntimeError("Could not parse DOCKER_EXTRA_ARGS") + sys.stderr.write("Launching Docker container for {0}\n".format(image)) # And launch the actual container cmd = [ "/usr/bin/docker", "run", "--detach", "--cidfile={0}".format(cidfile), + ] + extra_arg_list + [ "--entrypoint=/bin/sh", image, "-c", "sleep 1000000" ]