mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
inventory plugins: make wrapping variables as unsafe smarter to avoid triggering an AWX bug (#8225)
Make wrapping variables as unsafe smarter to avoid triggering an AWX bug.
This commit is contained in:
parent
524d5883b8
commit
7fd37ea247
16 changed files with 68 additions and 15 deletions
5
.github/BOTMETA.yml
vendored
5
.github/BOTMETA.yml
vendored
|
@ -1445,6 +1445,8 @@ files:
|
||||||
ignore: matze
|
ignore: matze
|
||||||
labels: zypper
|
labels: zypper
|
||||||
maintainers: $team_suse
|
maintainers: $team_suse
|
||||||
|
$plugin_utils/unsafe.py:
|
||||||
|
maintainers: felixfontein
|
||||||
$tests/a_module.py:
|
$tests/a_module.py:
|
||||||
maintainers: felixfontein
|
maintainers: felixfontein
|
||||||
$tests/fqdn_valid.py:
|
$tests/fqdn_valid.py:
|
||||||
|
@ -1501,7 +1503,6 @@ macros:
|
||||||
becomes: plugins/become
|
becomes: plugins/become
|
||||||
caches: plugins/cache
|
caches: plugins/cache
|
||||||
callbacks: plugins/callback
|
callbacks: plugins/callback
|
||||||
cliconfs: plugins/cliconf
|
|
||||||
connections: plugins/connection
|
connections: plugins/connection
|
||||||
doc_fragments: plugins/doc_fragments
|
doc_fragments: plugins/doc_fragments
|
||||||
filters: plugins/filter
|
filters: plugins/filter
|
||||||
|
@ -1509,7 +1510,7 @@ macros:
|
||||||
lookups: plugins/lookup
|
lookups: plugins/lookup
|
||||||
module_utils: plugins/module_utils
|
module_utils: plugins/module_utils
|
||||||
modules: plugins/modules
|
modules: plugins/modules
|
||||||
terminals: plugins/terminal
|
plugin_utils: plugins/plugin_utils
|
||||||
tests: plugins/test
|
tests: plugins/test
|
||||||
team_ansible_core:
|
team_ansible_core:
|
||||||
team_aix: MorrisA bcoca d-little flynn1973 gforster kairoaraujo marvin-sinister mator molekuul ramooncamacho wtcross
|
team_aix: MorrisA bcoca d-little flynn1973 gforster kairoaraujo marvin-sinister mator molekuul ramooncamacho wtcross
|
||||||
|
|
2
changelogs/fragments/8225-unsafe.yml
Normal file
2
changelogs/fragments/8225-unsafe.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- "inventory plugins - add unsafe wrapper to avoid marking strings that do not contain ``{`` or ``}`` as unsafe, to work around a bug in AWX ((https://github.com/ansible-collections/community.general/issues/8212, https://github.com/ansible-collections/community.general/pull/8225)."
|
|
@ -117,7 +117,8 @@ from ansible.errors import AnsibleError
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
from ansible.module_utils.common.text.converters import to_text
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, to_safe_group_name
|
from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, to_safe_group_name
|
||||||
from ansible.module_utils.six import text_type
|
from ansible.module_utils.six import text_type
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
# xmlrpc
|
# xmlrpc
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -83,7 +83,8 @@ keyed_groups:
|
||||||
from ansible.errors import AnsibleError, AnsibleParserError
|
from ansible.errors import AnsibleError, AnsibleParserError
|
||||||
from ansible.module_utils.common.text.converters import to_native
|
from ansible.module_utils.common.text.converters import to_native
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import gitlab
|
import gitlab
|
||||||
|
|
|
@ -102,7 +102,8 @@ from ansible.errors import AnsibleParserError
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
||||||
from ansible.module_utils.urls import open_url
|
from ansible.module_utils.urls import open_url
|
||||||
from ansible.module_utils.six.moves.urllib.error import HTTPError
|
from ansible.module_utils.six.moves.urllib.error import HTTPError
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
|
|
||||||
class InventoryModule(BaseInventoryPlugin, Constructable):
|
class InventoryModule(BaseInventoryPlugin, Constructable):
|
||||||
|
|
|
@ -122,7 +122,8 @@ compose:
|
||||||
|
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -175,7 +175,7 @@ from ansible.module_utils.six import raise_from
|
||||||
from ansible.errors import AnsibleError, AnsibleParserError
|
from ansible.errors import AnsibleError, AnsibleParserError
|
||||||
from ansible.module_utils.six.moves.urllib.parse import urlencode
|
from ansible.module_utils.six.moves.urllib.parse import urlencode
|
||||||
from ansible_collections.community.general.plugins.module_utils.lxd import LXDClient, LXDClientException
|
from ansible_collections.community.general.plugins.module_utils.lxd import LXDClient, LXDClientException
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import ipaddress
|
import ipaddress
|
||||||
|
|
|
@ -126,7 +126,8 @@ from ansible.errors import AnsibleParserError
|
||||||
from ansible.module_utils.common.text.converters import to_native, to_text
|
from ansible.module_utils.common.text.converters import to_native, to_text
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
|
||||||
from ansible.module_utils.common.process import get_bin_path
|
from ansible.module_utils.common.process import get_bin_path
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
|
|
||||||
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
|
|
|
@ -68,7 +68,8 @@ from ansible.plugins.inventory import BaseInventoryPlugin
|
||||||
from ansible.module_utils.common.text.converters import to_text
|
from ansible.module_utils.common.text.converters import to_text
|
||||||
from ansible.module_utils.ansible_release import __version__ as ansible_version
|
from ansible.module_utils.ansible_release import __version__ as ansible_version
|
||||||
from ansible.module_utils.six.moves.urllib.parse import urljoin
|
from ansible.module_utils.six.moves.urllib.parse import urljoin
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
|
|
||||||
class InventoryModule(BaseInventoryPlugin):
|
class InventoryModule(BaseInventoryPlugin):
|
||||||
|
|
|
@ -97,7 +97,8 @@ except ImportError:
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
||||||
from ansible.module_utils.common.text.converters import to_native
|
from ansible.module_utils.common.text.converters import to_native
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -226,9 +226,9 @@ from ansible.module_utils.common.text.converters import to_native
|
||||||
from ansible.module_utils.six import string_types
|
from ansible.module_utils.six import string_types
|
||||||
from ansible.module_utils.six.moves.urllib.parse import urlencode
|
from ansible.module_utils.six.moves.urllib.parse import urlencode
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
|
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
# 3rd party imports
|
# 3rd party imports
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -121,10 +121,10 @@ else:
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable
|
||||||
from ansible_collections.community.general.plugins.module_utils.scaleway import SCALEWAY_LOCATION, parse_pagination_link
|
from ansible_collections.community.general.plugins.module_utils.scaleway import SCALEWAY_LOCATION, parse_pagination_link
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
from ansible.module_utils.urls import open_url
|
from ansible.module_utils.urls import open_url
|
||||||
from ansible.module_utils.common.text.converters import to_native, to_text
|
from ansible.module_utils.common.text.converters import to_native, to_text
|
||||||
from ansible.module_utils.six import raise_from
|
from ansible.module_utils.six import raise_from
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
|
||||||
import ansible.module_utils.six.moves.urllib.parse as urllib_parse
|
import ansible.module_utils.six.moves.urllib.parse as urllib_parse
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,8 @@ from ansible.plugins.inventory import (
|
||||||
Cacheable
|
Cacheable
|
||||||
)
|
)
|
||||||
from ansible.utils.display import Display
|
from ansible.utils.display import Display
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
|
|
||||||
display = Display()
|
display = Display()
|
||||||
|
|
|
@ -62,7 +62,8 @@ from ansible.module_utils.common.text.converters import to_bytes, to_native, to_
|
||||||
from ansible.module_utils.common._collections_compat import MutableMapping
|
from ansible.module_utils.common._collections_compat import MutableMapping
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
|
||||||
from ansible.module_utils.common.process import get_bin_path
|
from ansible.module_utils.common.process import get_bin_path
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
|
|
||||||
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
|
||||||
|
|
|
@ -82,9 +82,9 @@ from time import sleep
|
||||||
|
|
||||||
from ansible.errors import AnsibleError
|
from ansible.errors import AnsibleError
|
||||||
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
|
from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable
|
||||||
from ansible.utils.unsafe_proxy import wrap_var as make_unsafe
|
|
||||||
|
|
||||||
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
|
from ansible_collections.community.general.plugins.module_utils.version import LooseVersion
|
||||||
|
from ansible_collections.community.general.plugins.plugin_utils.unsafe import make_unsafe
|
||||||
|
|
||||||
# 3rd party imports
|
# 3rd party imports
|
||||||
try:
|
try:
|
||||||
|
|
41
plugins/plugin_utils/unsafe.py
Normal file
41
plugins/plugin_utils/unsafe.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# Copyright (c) 2023, Felix Fontein <felix@fontein.de>
|
||||||
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
from __future__ import (absolute_import, division, print_function)
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
|
from ansible.module_utils.six import binary_type, text_type
|
||||||
|
from ansible.module_utils.common._collections_compat import Mapping, Set
|
||||||
|
from ansible.module_utils.common.collections import is_sequence
|
||||||
|
from ansible.utils.unsafe_proxy import (
|
||||||
|
AnsibleUnsafe,
|
||||||
|
wrap_var as _make_unsafe,
|
||||||
|
)
|
||||||
|
|
||||||
|
_RE_TEMPLATE_CHARS = re.compile(u'[{}]')
|
||||||
|
_RE_TEMPLATE_CHARS_BYTES = re.compile(b'[{}]')
|
||||||
|
|
||||||
|
|
||||||
|
def make_unsafe(value):
|
||||||
|
if value is None or isinstance(value, AnsibleUnsafe):
|
||||||
|
return value
|
||||||
|
|
||||||
|
if isinstance(value, Mapping):
|
||||||
|
return dict((make_unsafe(key), make_unsafe(val)) for key, val in value.items())
|
||||||
|
elif isinstance(value, Set):
|
||||||
|
return set(make_unsafe(elt) for elt in value)
|
||||||
|
elif is_sequence(value):
|
||||||
|
return type(value)(make_unsafe(elt) for elt in value)
|
||||||
|
elif isinstance(value, binary_type):
|
||||||
|
if _RE_TEMPLATE_CHARS_BYTES.search(value):
|
||||||
|
value = _make_unsafe(value)
|
||||||
|
return value
|
||||||
|
elif isinstance(value, text_type):
|
||||||
|
if _RE_TEMPLATE_CHARS.search(value):
|
||||||
|
value = _make_unsafe(value)
|
||||||
|
return value
|
||||||
|
|
||||||
|
return value
|
Loading…
Reference in a new issue