From 61218982dd983a5f3cb3ba887a86ab1dbe199121 Mon Sep 17 00:00:00 2001 From: Bruno Goncalves Date: Mar 28 2018 13:54:58 +0000 Subject: fixed standard-inventory-qcow2 code using inspekt --- diff --git a/inventory/standard-inventory-qcow2 b/inventory/standard-inventory-qcow2 index fd70634..dfb9233 100755 --- a/inventory/standard-inventory-qcow2 +++ b/inventory/standard-inventory-qcow2 @@ -13,7 +13,6 @@ import subprocess import sys import tempfile import time -import traceback import distutils.util IDENTITY = """ @@ -46,18 +45,30 @@ Df9PUWMYZ3HRwwdsYovSOkT53fG6guy+vElUEDkrpZYczROZ6GUcx70= -----END RSA PRIVATE KEY----- """ + +AUTH_KEY = ("AAAAB3NzaC1yc2EAAAADAQABAAABAQDUOtNJdBEXyKxBB898rdT54ULjMGuO6v4jLX" + "mRsdRhR5Id/lKNc9hsdioPWUePgYlqML2iSV72vKQoVhkyYkpcsjr3zvBny9+5xej3" + "+TBLoEMAm2hmllKPmxYJDU8jQJ7wJuRrOVOnk0iSNF+FcY/yaQ0owSF02Nphx47j2K" + "Wc0IjGGlt4fl0fmHJuZBA2afN/4IYIIsEWZziDewVtaEjWV3InMRLllfdqGMllhFR+" + "ed2hQz9PN2QcapmEvUR4UCy/mJXrke5htyFyHi8ECfyMMyYeHwbWLFQIve4CWix9qt" + "ksvKjcetnxT+WWrutdr3c9cfIj/c0v/Zg/c4zETxtp") + +DEF_USER = "root" +DEF_PASSWD = "foobar" + USER_DATA = """#cloud-config users: - default - - name: root + - name: {0} ssh_authorized_keys: - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUOtNJdBEXyKxBB898rdT54ULjMGuO6v4jLXmRsdRhR5Id/lKNc9hsdioPWUePgYlqML2iSV72vKQoVhkyYkpcsjr3zvBny9+5xej3+TBLoEMAm2hmllKPmxYJDU8jQJ7wJuRrOVOnk0iSNF+FcY/yaQ0owSF02Nphx47j2KWc0IjGGlt4fl0fmHJuZBA2afN/4IYIIsEWZziDewVtaEjWV3InMRLllfdqGMllhFR+ed2hQz9PN2QcapmEvUR4UCy/mJXrke5htyFyHi8ECfyMMyYeHwbWLFQIve4CWix9qtksvKjcetnxT+WWrutdr3c9cfIj/c0v/Zg/c4zETxtp standard-test-qcow2 + - ssh-rsa {2} standard-test-qcow2 ssh_pwauth: True chpasswd: list: | - root:foobar + {0}:{1} expire: False -""" +""".format(DEF_USER, DEF_PASSWD, AUTH_KEY) + def main(argv): parser = argparse.ArgumentParser(description="Inventory for a QCow2 test image") @@ -68,9 +79,9 @@ def main(argv): try: if opts.host: - data = host(opts.host) + data = inv_host(opts.host) else: - data = list(opts.subjects) + data = inv_list(opts.subjects) sys.stdout.write(json.dumps(data, indent=4, separators=(',', ': '))) except RuntimeError as ex: sys.stderr.write("{0}: {1}\n".format(os.path.basename(sys.argv[0]), str(ex))) @@ -78,16 +89,19 @@ def main(argv): return 0 -def list(subjects): - hosts = [ ] - variables = { } + +def inv_list(subjects): + hosts = [] + variables = {} for subject in subjects: if subject.endswith((".qcow2", ".qcow2c")): - vars = host(subject) - if vars: + host_vars = inv_host(subject) + if host_vars: hosts.append(subject) - variables[subject] = vars - return { "localhost": { "hosts": hosts, "vars": { } }, "subjects": { "hosts": hosts, "vars": { } }, "_meta": { "hostvars": variables } } + variables[subject] = host_vars + return {"localhost": {"hosts": hosts, "vars": {}}, + "subjects": {"hosts": hosts, "vars": {}}, + "_meta": {"hostvars": variables}} def start_qemu(image, cloudinit, log, portrange=(2222, 5555)): @@ -108,16 +122,15 @@ def start_qemu(image, cloudinit, log, portrange=(2222, 5555)): # Use -cpu host and -smp by default. # virtio-rng-pci: https://wiki.qemu.org/Features/VirtIORNG return subprocess.Popen(["/usr/bin/qemu-system-x86_64", - "-cpu", "host", "-smp", "{}".format(multiprocessing.cpu_count()), - "-m", "1024", image, - "-enable-kvm", "-snapshot", "-cdrom", cloudinit, - "-net", "nic,model=virtio", "-net", "user,hostfwd=tcp:127.0.0.3:{0}-:22".format(port), - "-device", "virtio-rng-pci", "-rtc", "base=utc", - "-device", "isa-serial,chardev=pts2", "-chardev", "file,id=pts2,path=" + log, - "-display", "none"], stdout=open(log, 'a'), stderr=subprocess.STDOUT), port + "-cpu", "host", "-smp", "{}".format(multiprocessing.cpu_count()), + "-m", "1024", image, "-enable-kvm", "-snapshot", "-cdrom", cloudinit, + "-net", "nic,model=virtio", "-net", "user,hostfwd=tcp:127.0.0.3:{0}-:22".format(port), + "-device", "virtio-rng-pci", "-rtc", "base=utc", + "-device", "isa-serial,chardev=pts2", "-chardev", "file,id=pts2,path=" + log, + "-display", "none"], stdout=open(log, 'a'), stderr=subprocess.STDOUT), port -def host(image): +def inv_host(image): null = open(os.devnull, 'w') try: @@ -164,7 +177,7 @@ def host(image): proc = None # for failure detection cpe = None # for exception scoping - for tries in xrange(0, 5): + for _ in xrange(0, 5): try: proc, port = start_qemu(image, cloudinit, log) break @@ -175,7 +188,7 @@ def host(image): raise RuntimeError("Could not launch VM for qcow2 image" " '{0}':{1}".format(image, cpe.output)) - for tries in xrange(0, 30): + for _ in xrange(0, 30): try: # The variables variables = { @@ -188,10 +201,10 @@ def host(image): } # Write out a handy inventory file, for our use and for debugging - args = " ".join([ "{0}='{1}'".format(*item) for item in variables.items() ]) + args = " ".join(["{0}='{1}'".format(*item) for item in variables.items()]) inventory = os.path.join(directory, "inventory") with open(inventory, "w") as f: - f.write("[subjects]\nlocalhost {1}\n".format(image, args)) + f.write("[subjects]\nlocalhost {0}\n".format(args)) # Wait for ssh to come up ping = [ @@ -205,7 +218,7 @@ def host(image): "/bin/true" ] - (pid, ret) = os.waitpid(proc.pid, os.WNOHANG) + (pid, _) = os.waitpid(proc.pid, os.WNOHANG) if pid != 0: raise RuntimeError("qemu failed to launch qcow2 image: {0}".format(image)) subprocess.check_call(ping, stdout=null, stderr=null) @@ -256,11 +269,12 @@ def host(image): os.kill(proc.pid, 0) except OSError: sys.stderr.write("Either parent process or VM process is gone.") - break # Either of the processes no longer exist + break # Either of the processes no longer exist if diagnose: sys.stderr.write("\n") - sys.stderr.write("DIAGNOSE: ssh -p {0} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@{1} # password: {2}\n".format(port, "127.0.0.3", "foobar")) + sys.stderr.write("DIAGNOSE: ssh -p {0} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null " + "root@{1} # password: {2}\n".format(port, "127.0.0.3", "foobar")) sys.stderr.write("DIAGNOSE: export ANSIBLE_INVENTORY={0}\n".format(inventory)) sys.stderr.write("DIAGNOSE: kill {0} # when finished\n".format(os.getpid())) @@ -279,5 +293,6 @@ def host(image): shutil.rmtree(directory) sys.exit(0) + if __name__ == '__main__': sys.exit(main(sys.argv))