From 5796a352aa7b5396decbea1fbc9ef32378a71863 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Mon, 11 Dec 2017 01:06:27 +0100 Subject: greatly improved vm-install role --- roles/vm-install/library/wait_for_virt.py | 59 ++++++++++++++++--------------- 1 file changed, 31 insertions(+), 28 deletions(-) (limited to 'roles/vm-install/library') diff --git a/roles/vm-install/library/wait_for_virt.py b/roles/vm-install/library/wait_for_virt.py index b5e244ef..6c49fae1 100644 --- a/roles/vm-install/library/wait_for_virt.py +++ b/roles/vm-install/library/wait_for_virt.py @@ -21,21 +21,23 @@ from ansible.module_utils._text import to_native VIRT_FAILED = 1 VIRT_SUCCESS = 0 -VIRT_UNAVAILABLE=2 +VIRT_UNAVAILABLE = 2 VIRT_STATE_NAME_MAP = { - 0 : "running", - 1 : "running", - 2 : "running", - 3 : "paused", - 4 : "shutdown", - 5 : "shutdown", - 6 : "crashed" + 0: "running", + 1: "running", + 2: "running", + 3: "paused", + 4: "shutdown", + 5: "shutdown", + 6: "crashed" } + class VMNotFound(Exception): pass + class LibvirtConnection(object): def __init__(self, uri, module): @@ -89,7 +91,7 @@ class LibvirtConnection(object): def get_status(self, vmid): state = self.find_vm(vmid).info()[0] - return VIRT_STATE_NAME_MAP.get(state,"unknown") + return VIRT_STATE_NAME_MAP.get(state, "unknown") class Virt(object): @@ -109,31 +111,32 @@ class Virt(object): self.__get_conn() return self.conn.get_status(vmid) + def core(module): - states = module.params.get('states', None) - guest = module.params.get('name', None) - uri = module.params.get('uri', None) - delay = module.params.get('delay', None) - sleep = module.params.get('sleep', None) - timeout = module.params.get('timeout', None) + states = module.params.get('states', None) + guest = module.params.get('name', None) + uri = module.params.get('uri', None) + delay = module.params.get('delay', None) + sleep = module.params.get('sleep', None) + timeout = module.params.get('timeout', None) v = Virt(uri, module) - res = {'changed': False} + res = {'changed': False, 'failed': True} if delay > 0: - time.sleep(delay) + time.sleep(delay) for _ in range(0, timeout, sleep): - state = v.status(guest) - if state in states: - res['state'] = state - res['msg'] = "guest '%s' has reached state: %s" % (guest, state) - return VIRT_SUCCESS, res + state = v.status(guest) + if state in states: + res['state'] = state + res['failed'] = False + res['msg'] = "guest '%s' has reached state: %s" % (guest, state) + return VIRT_SUCCESS, res - time.sleep(sleep) + time.sleep(sleep) - res['failed'] = True res['msg'] = "timeout waiting for guest '%s' to reach one of states: %s" % (guest, ', '.join(states)) return VIRT_FAILED, res @@ -141,9 +144,9 @@ def core(module): def main(): module = AnsibleModule(argument_spec=dict( - name = dict(aliases=['guest'], required=True), - states = dict(type='list', required=True), - uri = dict(default='qemu:///system'), + name=dict(aliases=['guest'], required=True), + states=dict(type='list', required=True), + uri=dict(default='qemu:///system'), delay=dict(type='int', default=0), sleep=dict(type='int', default=1), timeout=dict(type='int', default=300), @@ -166,7 +169,7 @@ def main(): except Exception as e: module.fail_json(msg=to_native(e), exception=traceback.format_exc()) - if rc != 0: # something went wrong emit the msg + if rc != 0: # something went wrong emit the msg module.fail_json(rc=rc, msg=result) else: module.exit_json(**result) -- cgit v1.2.3