From 111c5de55006cf3af43599eea60edb15b9f66954 Mon Sep 17 00:00:00 2001 From: Ajpantuso Date: Sat, 10 Jul 2021 10:39:51 -0400 Subject: [PATCH] proxmox inventory - fix parsing for offline nodes (#2967) * Initial commit * Adding changelog fragment * Applying initial review suggestions --- .../2967-proxmox_inventory-offline-node-fix.yml | 3 +++ plugins/inventory/proxmox.py | 3 +++ tests/unit/plugins/inventory/test_proxmox.py | 12 +++++++++--- 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/2967-proxmox_inventory-offline-node-fix.yml diff --git a/changelogs/fragments/2967-proxmox_inventory-offline-node-fix.yml b/changelogs/fragments/2967-proxmox_inventory-offline-node-fix.yml new file mode 100644 index 0000000000..d52fef4d8a --- /dev/null +++ b/changelogs/fragments/2967-proxmox_inventory-offline-node-fix.yml @@ -0,0 +1,3 @@ +--- +bugfixes: + - proxmox inventory plugin - fixed parsing failures when some cluster nodes are offline (https://github.com/ansible-collections/community.general/issues/2931). diff --git a/plugins/inventory/proxmox.py b/plugins/inventory/proxmox.py index be3ecd4365..c99962bcdd 100644 --- a/plugins/inventory/proxmox.py +++ b/plugins/inventory/proxmox.py @@ -369,6 +369,9 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): if node['type'] == 'node': self.inventory.add_child(nodes_group, node['node']) + if node['status'] == 'offline': + continue + # get node IP address if self.get_option("want_proxmox_nodes_ansible_host"): ip = self._get_node_ip(node['node']) diff --git a/tests/unit/plugins/inventory/test_proxmox.py b/tests/unit/plugins/inventory/test_proxmox.py index c2b0408138..87d47a3cff 100644 --- a/tests/unit/plugins/inventory/test_proxmox.py +++ b/tests/unit/plugins/inventory/test_proxmox.py @@ -9,7 +9,6 @@ __metaclass__ = type import pytest -from ansible.errors import AnsibleError, AnsibleParserError from ansible.inventory.data import InventoryData from ansible_collections.community.general.plugins.inventory.proxmox import InventoryModule @@ -52,7 +51,12 @@ def get_json(url): "disk": 1000, "maxmem": 1000, "uptime": 10000, - "level": ""}] + "level": ""}, + {"type": "node", + "node": "testnode2", + "id": "node/testnode2", + "status": "offline", + "ssl_fingerprint": "yy"}] elif url == "https://localhost:8006/api2/json/pools": # _get_pools return [{"poolid": "test"}] @@ -554,7 +558,6 @@ def test_populate(inventory, mocker): host_qemu_multi_nic = inventory.inventory.get_host('test-qemu-multi-nic') host_qemu_template = inventory.inventory.get_host('test-qemu-template') host_lxc = inventory.inventory.get_host('test-lxc') - host_node = inventory.inventory.get_host('testnode') # check if qemu-test is in the proxmox_pool_test group assert 'proxmox_pool_test' in inventory.inventory.groups @@ -584,3 +587,6 @@ def test_populate(inventory, mocker): # check if qemu template is not present assert host_qemu_template is None + + # check that offline node is in inventory + assert inventory.inventory.get_host('testnode2')