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

Get interfaces for Proxmox LXC containers (#8713)

* Get interfaces for Proxmox LXC containers

* Add changelog

* Don't use bare except

* Update changelog from suggestion

Co-authored-by: Felix Fontein <felix@fontein.de>

* Only lookup interfaces for running containers

* Ignore not implemented status

* Check that key exists in properties dict

* define ignore errors in mock

* Use not in

---------

Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
Scott Langendyk 2024-08-12 01:35:43 -04:00 committed by GitHub
parent 76d0222a83
commit 0f59bb7a99
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 34 additions and 1 deletions

View file

@ -0,0 +1,2 @@
minor_changes:
- proxmox inventory plugin - add new fact for LXC interface details (https://github.com/ansible-collections/community.general/pull/8713).

View file

@ -362,6 +362,34 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
except Exception:
return None
def _get_lxc_interfaces(self, properties, node, vmid):
status_key = self._fact('status')
if status_key not in properties or not properties[status_key] == 'running':
return
ret = self._get_json("%s/api2/json/nodes/%s/lxc/%s/interfaces" % (self.proxmox_url, node, vmid), ignore_errors=[501])
if not ret:
return
result = []
for iface in ret:
result_iface = {
'name': iface['name'],
'hwaddr': iface['hwaddr']
}
if 'inet' in iface:
result_iface['inet'] = iface['inet']
if 'inet6' in iface:
result_iface['inet6'] = iface['inet6']
result.append(result_iface)
properties[self._fact('lxc_interfaces')] = result
def _get_agent_network_interfaces(self, node, vmid, vmtype):
result = []
@ -526,6 +554,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
self._get_vm_config(properties, node, vmid, ittype, name)
self._get_vm_snapshots(properties, node, vmid, ittype, name)
if ittype == 'lxc':
self._get_lxc_interfaces(properties, node, vmid)
# ensure the host satisfies filters
if not self._can_add_host(name, properties):
return None

View file

@ -37,7 +37,7 @@ def get_auth():
# NOTE: when updating/adding replies to this function,
# be sure to only add only the _contents_ of the 'data' dict in the API reply
def get_json(url):
def get_json(url, ignore_errors=None):
if url == "https://localhost:8006/api2/json/nodes":
# _get_nodes
return [{"type": "node",