From 58ae8c81ac02472ae65c41cca4616b37e3487f2d Mon Sep 17 00:00:00 2001 From: "patchback[bot]" <45432694+patchback[bot]@users.noreply.github.com> Date: Wed, 17 Feb 2021 21:43:58 +0100 Subject: [PATCH] proxmox_kvm: fix undefined local variable status (#1847) (#1850) * proxmox_kvm: undefined local variable status * proxmox_kvm: Add a changelog fragment * Update changelogs/fragments/1847-proxmox-kvm-fix-status.yml Co-authored-by: Felix Fontein * proxmox_kvm: fix the RETURN document * proxmox_kvm: fix name variable when state=current The variable name is not always defined as the module can be called with just a vmid. Before: > "msg": "VM None with vmid = 118 is stopped" After: > "msg": "VM test-instance with vmid = 118 is stopped" Co-authored-by: Felix Fontein (cherry picked from commit 5135587c16efbcfa1c22dc62f344e93582adf8a1) Co-authored-by: Tristan Le Guern --- .../fragments/1847-proxmox-kvm-fix-status.yml | 2 ++ plugins/modules/cloud/misc/proxmox_kvm.py | 36 ++++++++++++------- 2 files changed, 25 insertions(+), 13 deletions(-) create mode 100644 changelogs/fragments/1847-proxmox-kvm-fix-status.yml diff --git a/changelogs/fragments/1847-proxmox-kvm-fix-status.yml b/changelogs/fragments/1847-proxmox-kvm-fix-status.yml new file mode 100644 index 0000000000..0863f1bed2 --- /dev/null +++ b/changelogs/fragments/1847-proxmox-kvm-fix-status.yml @@ -0,0 +1,2 @@ +bugfixes: + - proxmox_kvm - fix undefined local variable ``status`` when the parameter ``state`` is either ``stopped``, ``started``, ``restarted`` or ``absent`` (https://github.com/ansible-collections/community.general/pull/1847). diff --git a/plugins/modules/cloud/misc/proxmox_kvm.py b/plugins/modules/cloud/misc/proxmox_kvm.py index cf79e6553b..f63f8faec9 100644 --- a/plugins/modules/cloud/misc/proxmox_kvm.py +++ b/plugins/modules/cloud/misc/proxmox_kvm.py @@ -778,20 +778,20 @@ EXAMPLES = ''' RETURN = ''' vmid: - description: The VM vmid. - returned: success - type: int - sample: 115 + description: The VM vmid. + returned: success + type: int + sample: 115 status: - description: - - The current virtual machine status. - returned: success - type: dict - sample: '{ - "changed": false, - "msg": "VM kropta with vmid = 110 is running", - "status": "running" - }' + description: The current virtual machine status. + returned: success, not clone, not absent, not update + type: str + sample: running +msg: + description: A short message + returned: always + type: str + sample: "VM kropta with vmid = 110 is running" ''' import re @@ -1341,12 +1341,14 @@ def main(): module.fail_json(vmid=vmid, msg="creation of qemu VM %s with vmid %s failed with exception=%s" % (name, vmid, e)) elif state == 'started': + status = {} try: if -1 == vmid: module.fail_json(msg='VM with name = %s does not exist in cluster' % name) vm = get_vm(proxmox, vmid) if not vm: module.fail_json(vmid=vmid, msg='VM with vmid <%s> does not exist in cluster' % vmid) + status['status'] = vm[0]['status'] if vm[0]['status'] == 'running': module.exit_json(changed=False, vmid=vmid, msg="VM %s is already running" % vmid, **status) @@ -1356,6 +1358,7 @@ def main(): module.fail_json(vmid=vmid, msg="starting of VM %s failed with exception: %s" % (vmid, e), **status) elif state == 'stopped': + status = {} try: if -1 == vmid: module.fail_json(msg='VM with name = %s does not exist in cluster' % name) @@ -1364,6 +1367,7 @@ def main(): if not vm: module.fail_json(vmid=vmid, msg='VM with vmid = %s does not exist in cluster' % vmid) + status['status'] = vm[0]['status'] if vm[0]['status'] == 'stopped': module.exit_json(changed=False, vmid=vmid, msg="VM %s is already stopped" % vmid, **status) @@ -1373,6 +1377,7 @@ def main(): module.fail_json(vmid=vmid, msg="stopping of VM %s failed with exception: %s" % (vmid, e), **status) elif state == 'restarted': + status = {} try: if -1 == vmid: module.fail_json(msg='VM with name = %s does not exist in cluster' % name) @@ -1380,6 +1385,7 @@ def main(): vm = get_vm(proxmox, vmid) if not vm: module.fail_json(vmid=vmid, msg='VM with vmid = %s does not exist in cluster' % vmid) + status['status'] = vm[0]['status'] if vm[0]['status'] == 'stopped': module.exit_json(changed=False, vmid=vmid, msg="VM %s is not running" % vmid, **status) @@ -1389,12 +1395,14 @@ def main(): module.fail_json(vmid=vmid, msg="restarting of VM %s failed with exception: %s" % (vmid, e), **status) elif state == 'absent': + status = {} try: vm = get_vm(proxmox, vmid) if not vm: module.exit_json(changed=False, vmid=vmid) proxmox_node = proxmox.nodes(vm[0]['node']) + status['status'] = vm[0]['status'] if vm[0]['status'] == 'running': module.exit_json(changed=False, vmid=vmid, msg="VM %s is running. Stop it before deletion." % vmid) taskid = proxmox_node.qemu.delete(vmid) @@ -1413,6 +1421,8 @@ def main(): vm = get_vm(proxmox, vmid) if not vm: module.fail_json(msg='VM with vmid = %s does not exist in cluster' % vmid) + if not name: + name = vm[0]['name'] current = proxmox.nodes(vm[0]['node']).qemu(vmid).status.current.get()['status'] status['status'] = current if status: