diff --git a/changelogs/fragments/4555-proxmox-lxc-key.yml b/changelogs/fragments/4555-proxmox-lxc-key.yml new file mode 100644 index 0000000000..5f598d3e07 --- /dev/null +++ b/changelogs/fragments/4555-proxmox-lxc-key.yml @@ -0,0 +1,4 @@ +bugfixes: + - proxmox inventory plugin - fix error when parsing container with LXC configs (https://github.com/ansible-collections/community.general/issues/4472, https://github.com/ansible-collections/community.general/pull/4472). +minor_changes: + - proxmox inventory plugin - parse LXC configs returned by the proxmox API (https://github.com/ansible-collections/community.general/pull/4472). diff --git a/plugins/inventory/proxmox.py b/plugins/inventory/proxmox.py index 8dcd5260be..e0734b33e3 100644 --- a/plugins/inventory/proxmox.py +++ b/plugins/inventory/proxmox.py @@ -3,6 +3,7 @@ # Copyright (c) 2018 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) + __metaclass__ = type DOCUMENTATION = ''' @@ -206,6 +207,7 @@ from ansible.module_utils.common._collections_compat import MutableMapping from ansible.errors import AnsibleError from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable from ansible.module_utils.common.text.converters import to_native +from ansible.module_utils.six import string_types from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.utils.display import Display from ansible.template import Templar @@ -405,7 +407,16 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): agent_iface_key = self.to_safe('%s%s' % (key, "_interfaces")) properties[agent_iface_key] = agent_iface_value - if config not in plaintext_configs and not isinstance(value, int) and all("=" in v for v in value.split(",")): + if config == 'lxc': + out_val = {} + for k, v in value: + if k.startswith('lxc.'): + k = k[len('lxc.'):] + out_val[k] = v + value = out_val + + if config not in plaintext_configs and isinstance(value, string_types) \ + and all("=" in v for v in value.split(",")): # split off strings with commas to a dict # skip over any keys that cannot be processed try: