mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Module proxmox_kvm
restarted
state bug fix (#6773)
* Change proxmox_kvm restart to use new method Previously, the `restarted` state used both stop and start vm functions to restart a vm. This change introduces the a new function that utilizes the proxmox reboot endpoint instead for a more reliable method of restarting a vm. * Create 6773-proxmox_kvm-restarted-state-bug-fix.yaml * Fix typo * Add link to PR * Chanel log fragment formatting changes * Move try/catch to `restart_vm` function * Update changelogs/fragments/6773-proxmox_kvm-restarted-state-bug-fix.yaml Co-authored-by: Felix Fontein <felix@fontein.de> --------- Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
70e2048d8c
commit
3571df837d
2 changed files with 22 additions and 9 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- proxmox_kvm - ``restarted`` state did not actually restart a VM in some VM configurations. The state now uses the Proxmox reboot endpoint instead of calling the ``stop_vm`` and ``start_vm`` functions (https://github.com/ansible-collections/community.general/pull/6773).
|
|
@ -1099,6 +1099,20 @@ class ProxmoxKvmAnsible(ProxmoxAnsible):
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def restart_vm(self, vm, **status):
|
||||||
|
vmid = vm['vmid']
|
||||||
|
try:
|
||||||
|
proxmox_node = self.proxmox_api.nodes(vm['node'])
|
||||||
|
taskid = proxmox_node.qemu(vmid).status.reboot.post()
|
||||||
|
if not self.wait_for_task(vm['node'], taskid):
|
||||||
|
self.module.fail_json(msg='Reached timeout while waiting for rebooting VM. Last line in task before timeout: %s' %
|
||||||
|
proxmox_node.tasks(taskid).log.get()[:1])
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
self.module.fail_json(vmid=vmid, msg="restarting of VM %s failed with exception: %s" % (vmid, e))
|
||||||
|
return False
|
||||||
|
|
||||||
def migrate_vm(self, vm, target_node):
|
def migrate_vm(self, vm, target_node):
|
||||||
vmid = vm['vmid']
|
vmid = vm['vmid']
|
||||||
proxmox_node = self.proxmox_api.nodes(vm['node'])
|
proxmox_node = self.proxmox_api.nodes(vm['node'])
|
||||||
|
@ -1458,16 +1472,13 @@ def main():
|
||||||
module.fail_json(msg='VM with name = %s does not exist in cluster' % name)
|
module.fail_json(msg='VM with name = %s does not exist in cluster' % name)
|
||||||
|
|
||||||
status = {}
|
status = {}
|
||||||
try:
|
vm = proxmox.get_vm(vmid)
|
||||||
vm = proxmox.get_vm(vmid)
|
status['status'] = vm['status']
|
||||||
status['status'] = vm['status']
|
if vm['status'] == 'stopped':
|
||||||
if vm['status'] == 'stopped':
|
module.exit_json(changed=False, vmid=vmid, msg="VM %s is not running" % vmid, **status)
|
||||||
module.exit_json(changed=False, vmid=vmid, msg="VM %s is not running" % vmid, **status)
|
|
||||||
|
|
||||||
if proxmox.stop_vm(vm, force=module.params['force']) and proxmox.start_vm(vm):
|
if proxmox.restart_vm(vm):
|
||||||
module.exit_json(changed=True, vmid=vmid, msg="VM %s is restarted" % vmid, **status)
|
module.exit_json(changed=True, vmid=vmid, msg="VM %s is restarted" % vmid, **status)
|
||||||
except Exception as e:
|
|
||||||
module.fail_json(vmid=vmid, msg="restarting of VM %s failed with exception: %s" % (vmid, e), **status)
|
|
||||||
|
|
||||||
elif state == 'absent':
|
elif state == 'absent':
|
||||||
status = {}
|
status = {}
|
||||||
|
|
Loading…
Add table
Reference in a new issue