centralize and complete the internal static vars (#82872) (#82925)

* centralize and complete the internal static vars

These vars are internal and should not be overridden nor templated
from inventory nor hostvars.

(cherry picked from commit 8704b9fc29)
This commit is contained in:
Brian Coca
2024-04-10 14:23:45 -05:00
committed by GitHub
parent 85697beee0
commit f8162c19a2
4 changed files with 50 additions and 43 deletions
@@ -0,0 +1,3 @@
bugfixes:
- Consolidated the list of internal static vars, centralized them as constant and completed from some missing entries.
- Slight optimization to hostvars (instantiate template only once per host, vs per call to var).
+1 -21
View File
@@ -25,26 +25,6 @@ from ansible.vars.plugins import get_vars_from_inventory_sources, get_vars_from_
display = Display() display = Display()
INTERNAL_VARS = frozenset(['ansible_diff_mode',
'ansible_config_file',
'ansible_facts',
'ansible_forks',
'ansible_inventory_sources',
'ansible_limit',
'ansible_playbook_python',
'ansible_run_tags',
'ansible_skip_tags',
'ansible_verbosity',
'ansible_version',
'inventory_dir',
'inventory_file',
'inventory_hostname',
'inventory_hostname_short',
'groups',
'group_names',
'omit',
'playbook_dir', ])
class InventoryCLI(CLI): class InventoryCLI(CLI):
''' used to display or dump the configured inventory as Ansible sees it ''' ''' used to display or dump the configured inventory as Ansible sees it '''
@@ -247,7 +227,7 @@ class InventoryCLI(CLI):
@staticmethod @staticmethod
def _remove_internal(dump): def _remove_internal(dump):
for internal in INTERNAL_VARS: for internal in C.INTERNAL_STATIC_VARS:
if internal in dump: if internal in dump:
del dump[internal] del dump[internal]
+40
View File
@@ -112,6 +112,46 @@ CONFIGURABLE_PLUGINS = ('become', 'cache', 'callback', 'cliconf', 'connection',
DOCUMENTABLE_PLUGINS = CONFIGURABLE_PLUGINS + ('module', 'strategy', 'test', 'filter') DOCUMENTABLE_PLUGINS = CONFIGURABLE_PLUGINS + ('module', 'strategy', 'test', 'filter')
IGNORE_FILES = ("COPYING", "CONTRIBUTING", "LICENSE", "README", "VERSION", "GUIDELINES", "MANIFEST", "Makefile") # ignore during module search IGNORE_FILES = ("COPYING", "CONTRIBUTING", "LICENSE", "README", "VERSION", "GUIDELINES", "MANIFEST", "Makefile") # ignore during module search
INTERNAL_RESULT_KEYS = ('add_host', 'add_group') INTERNAL_RESULT_KEYS = ('add_host', 'add_group')
INTERNAL_STATIC_VARS = frozenset(
[
"ansible_async_path",
"ansible_collection_name",
"ansible_config_file",
"ansible_dependent_role_names",
"ansible_diff_mode",
"ansible_config_file",
"ansible_facts",
"ansible_forks",
"ansible_inventory_sources",
"ansible_limit",
"ansible_play_batch",
"ansible_play_hosts",
"ansible_play_hosts_all",
"ansible_play_role_names",
"ansible_playbook_python",
"ansible_role_name",
"ansible_role_names",
"ansible_run_tags",
"ansible_skip_tags",
"ansible_verbosity",
"ansible_version",
"inventory_dir",
"inventory_file",
"inventory_hostname",
"inventory_hostname_short",
"groups",
"group_names",
"omit",
"hostvars",
"playbook_dir",
"play_hosts",
"role_name",
"role_names",
"role_path",
"role_uuid",
"role_names",
]
)
LOCALHOST = ('127.0.0.1', 'localhost', '::1') LOCALHOST = ('127.0.0.1', 'localhost', '::1')
MODULE_REQUIRE_ARGS = tuple(add_internal_fqcns(('command', 'win_command', 'ansible.windows.win_command', 'shell', 'win_shell', MODULE_REQUIRE_ARGS = tuple(add_internal_fqcns(('command', 'win_command', 'ansible.windows.win_command', 'shell', 'win_shell',
'ansible.windows.win_shell', 'raw', 'script'))) 'ansible.windows.win_shell', 'raw', 'script')))
+6 -22
View File
@@ -21,26 +21,9 @@ __metaclass__ = type
from collections.abc import Mapping from collections.abc import Mapping
from ansible import constants as C
from ansible.template import Templar, AnsibleUndefined from ansible.template import Templar, AnsibleUndefined
STATIC_VARS = [
'ansible_version',
'ansible_play_hosts',
'ansible_dependent_role_names',
'ansible_play_role_names',
'ansible_role_names',
'inventory_hostname',
'inventory_hostname_short',
'inventory_file',
'inventory_dir',
'groups',
'group_names',
'omit',
'playbook_dir',
'play_hosts',
'role_names',
'ungrouped',
]
__all__ = ['HostVars', 'HostVarsVars'] __all__ = ['HostVars', 'HostVarsVars']
@@ -134,10 +117,12 @@ class HostVarsVars(Mapping):
def __init__(self, variables, loader): def __init__(self, variables, loader):
self._vars = variables self._vars = variables
self._loader = loader self._loader = loader
# NOTE: this only has access to the host's own vars,
# so templates that depend on vars in other scopes will not work.
self._templar = Templar(variables=self._vars, loader=self._loader)
def __getitem__(self, var): def __getitem__(self, var):
templar = Templar(variables=self._vars, loader=self._loader) return self._templar.template(self._vars[var], fail_on_undefined=False, static_vars=C.INTERNAL_STATIC_VARS)
return templar.template(self._vars[var], fail_on_undefined=False, static_vars=STATIC_VARS)
def __contains__(self, var): def __contains__(self, var):
return (var in self._vars) return (var in self._vars)
@@ -150,5 +135,4 @@ class HostVarsVars(Mapping):
return len(self._vars.keys()) return len(self._vars.keys())
def __repr__(self): def __repr__(self):
templar = Templar(variables=self._vars, loader=self._loader) return repr(self._templar.template(self._vars, fail_on_undefined=False, static_vars=C.INTERNAL_STATIC_VARS))
return repr(templar.template(self._vars, fail_on_undefined=False, static_vars=STATIC_VARS))