1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

Proxmox inventory: Added snapshots fact (#3044) (#3048)

* Added snapshots fact

* Added changelog

* Made linter happy again

* Processed feedback

* Fix changelog type

* Punctuation ;-)

* Punctuation ;-), take 2

(cherry picked from commit 32e9a0c250)

Co-authored-by: Jeffrey van Pelt <jeff@vanpelt.one>
This commit is contained in:
patchback[bot] 2021-07-22 23:19:39 +02:00 committed by GitHub
parent 90be1cc838
commit 378687503c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 2 deletions

View file

@ -0,0 +1,2 @@
minor_changes:
- proxmox inventory plugin - added snapshots to host facts (https://github.com/ansible-collections/community.general/pull/3044).

View file

@ -325,6 +325,15 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
status_key = self.to_safe('%s%s' % (self.get_option('facts_prefix'), status_key.lower())) status_key = self.to_safe('%s%s' % (self.get_option('facts_prefix'), status_key.lower()))
self.inventory.set_variable(name, status_key, status) self.inventory.set_variable(name, status_key, status)
def _get_vm_snapshots(self, node, vmid, vmtype, name):
ret = self._get_json("%s/api2/json/nodes/%s/%s/%s/snapshot" % (self.proxmox_url, node, vmtype, vmid))
snapshots_key = 'snapshots'
snapshots_key = self.to_safe('%s%s' % (self.get_option('facts_prefix'), snapshots_key.lower()))
snapshots = [snapshot['name'] for snapshot in ret if snapshot['name'] != 'current']
self.inventory.set_variable(name, snapshots_key, snapshots)
def to_safe(self, word): def to_safe(self, word):
'''Converts 'bad' characters in a string to underscores so they can be used as Ansible groups '''Converts 'bad' characters in a string to underscores so they can be used as Ansible groups
#> ProxmoxInventory.to_safe("foo-bar baz") #> ProxmoxInventory.to_safe("foo-bar baz")
@ -393,9 +402,10 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
elif lxc['status'] == 'running': elif lxc['status'] == 'running':
self.inventory.add_child(running_group, lxc['name']) self.inventory.add_child(running_group, lxc['name'])
# get LXC config for facts # get LXC config and snapshots for facts
if self.get_option('want_facts'): if self.get_option('want_facts'):
self._get_vm_config(node['node'], lxc['vmid'], 'lxc', lxc['name']) self._get_vm_config(node['node'], lxc['vmid'], 'lxc', lxc['name'])
self._get_vm_snapshots(node['node'], lxc['vmid'], 'lxc', lxc['name'])
self._apply_constructable(lxc["name"], self.inventory.get_host(lxc['name']).get_vars()) self._apply_constructable(lxc["name"], self.inventory.get_host(lxc['name']).get_vars())
@ -417,9 +427,10 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
elif qemu['status'] == 'running': elif qemu['status'] == 'running':
self.inventory.add_child(running_group, qemu['name']) self.inventory.add_child(running_group, qemu['name'])
# get QEMU config for facts # get QEMU config and snapshots for facts
if self.get_option('want_facts'): if self.get_option('want_facts'):
self._get_vm_config(node['node'], qemu['vmid'], 'qemu', qemu['name']) self._get_vm_config(node['node'], qemu['vmid'], 'qemu', qemu['name'])
self._get_vm_snapshots(node['node'], qemu['vmid'], 'qemu', qemu['name'])
self._apply_constructable(qemu["name"], self.inventory.get_host(qemu['name']).get_vars()) self._apply_constructable(qemu["name"], self.inventory.get_host(qemu['name']).get_vars())

View file

@ -522,6 +522,21 @@ def get_json(url):
} }
def get_vm_snapshots(node, vmtype, vmid, name):
return [
{"description": "",
"name": "clean",
"snaptime": 1000,
"vmstate": 0
},
{"name": "current",
"digest": "1234689abcdf",
"running": 0,
"description": "You are here!",
"parent": "clean"
}]
def get_vm_status(node, vmtype, vmid, name): def get_vm_status(node, vmtype, vmid, name):
return True return True
@ -549,6 +564,7 @@ def test_populate(inventory, mocker):
inventory._get_auth = mocker.MagicMock(side_effect=get_auth) inventory._get_auth = mocker.MagicMock(side_effect=get_auth)
inventory._get_json = mocker.MagicMock(side_effect=get_json) inventory._get_json = mocker.MagicMock(side_effect=get_json)
inventory._get_vm_status = mocker.MagicMock(side_effect=get_vm_status) inventory._get_vm_status = mocker.MagicMock(side_effect=get_vm_status)
inventory._get_vm_snapshots = mocker.MagicMock(side_effect=get_vm_snapshots)
inventory.get_option = mocker.MagicMock(side_effect=get_option) inventory.get_option = mocker.MagicMock(side_effect=get_option)
inventory._populate() inventory._populate()