ansible-core 2.19.0b3__py3-none-any.whl → 2.19.0b5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ansible/_internal/__init__.py +2 -2
- ansible/_internal/_collection_proxy.py +1 -1
- ansible/_internal/_errors/_alarm_timeout.py +66 -0
- ansible/_internal/_errors/_captured.py +25 -30
- ansible/_internal/_errors/_error_factory.py +89 -0
- ansible/_internal/_errors/_error_utils.py +240 -0
- ansible/_internal/_errors/_task_timeout.py +28 -0
- ansible/_internal/_event_formatting.py +127 -0
- ansible/_internal/_json/__init__.py +6 -6
- ansible/_internal/_json/_profiles/_cache_persistence.py +2 -0
- ansible/_internal/_json/_profiles/_inventory_legacy.py +1 -1
- ansible/_internal/_json/_profiles/_legacy.py +3 -11
- ansible/_internal/_ssh/__init__.py +0 -0
- ansible/_internal/_ssh/_agent_launch.py +91 -0
- ansible/{utils → _internal/_ssh}/_ssh_agent.py +55 -93
- ansible/_internal/_templating/__init__.py +5 -3
- ansible/_internal/_templating/_datatag.py +2 -1
- ansible/_internal/_templating/_engine.py +3 -4
- ansible/_internal/_templating/_jinja_bits.py +21 -16
- ansible/_internal/_templating/_jinja_common.py +18 -27
- ansible/_internal/_templating/_jinja_plugins.py +31 -3
- ansible/_internal/_templating/_lazy_containers.py +5 -5
- ansible/_internal/_templating/_transform.py +20 -19
- ansible/_internal/_templating/_utils.py +1 -1
- ansible/_internal/_testing.py +26 -0
- ansible/_internal/_yaml/_dumper.py +1 -1
- ansible/_internal/_yaml/_errors.py +7 -7
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/true_type.py +1 -1
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/unmask.py +1 -1
- ansible/cli/__init__.py +5 -82
- ansible/cli/arguments/option_helpers.py +8 -5
- ansible/cli/doc.py +84 -28
- ansible/cli/inventory.py +1 -1
- ansible/compat/importlib_resources.py +9 -12
- ansible/config/base.yml +27 -23
- ansible/config/manager.py +142 -101
- ansible/constants.py +1 -1
- ansible/errors/__init__.py +96 -49
- ansible/executor/module_common.py +8 -10
- ansible/executor/powershell/async_watchdog.ps1 +2 -2
- ansible/executor/powershell/async_wrapper.ps1 +3 -3
- ansible/executor/powershell/become_wrapper.ps1 +20 -2
- ansible/executor/powershell/bootstrap_wrapper.ps1 +28 -6
- ansible/executor/powershell/coverage_wrapper.ps1 +15 -6
- ansible/executor/powershell/exec_wrapper.ps1 +219 -6
- ansible/executor/powershell/module_manifest.py +52 -0
- ansible/executor/powershell/module_wrapper.ps1 +47 -21
- ansible/executor/powershell/powershell_expand_user.ps1 +20 -0
- ansible/executor/powershell/powershell_mkdtemp.ps1 +17 -0
- ansible/executor/process/worker.py +38 -113
- ansible/executor/task_executor.py +26 -61
- ansible/executor/task_result.py +2 -4
- ansible/galaxy/collection/__init__.py +1 -4
- ansible/inventory/manager.py +1 -0
- ansible/module_utils/_internal/__init__.py +0 -3
- ansible/module_utils/_internal/_ambient_context.py +3 -3
- ansible/module_utils/_internal/_ansiballz.py +4 -2
- ansible/module_utils/_internal/_datatag/__init__.py +20 -14
- ansible/module_utils/_internal/_datatag/_tags.py +2 -2
- ansible/module_utils/_internal/_deprecator.py +66 -48
- ansible/module_utils/_internal/_errors.py +88 -17
- ansible/module_utils/_internal/_event_utils.py +61 -0
- ansible/module_utils/_internal/_json/_profiles/__init__.py +21 -4
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +2 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +2 -0
- ansible/module_utils/_internal/_json/_profiles/_tagless.py +3 -1
- ansible/module_utils/{common/messages.py → _internal/_messages.py} +28 -47
- ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +1 -3
- ansible/module_utils/_internal/_plugin_info.py +1 -1
- ansible/module_utils/_internal/_stack.py +22 -0
- ansible/module_utils/_internal/_text_utils.py +6 -0
- ansible/module_utils/_internal/_traceback.py +11 -8
- ansible/module_utils/ansible_release.py +1 -1
- ansible/module_utils/basic.py +49 -15
- ansible/module_utils/common/arg_spec.py +2 -2
- ansible/module_utils/common/collections.py +6 -0
- ansible/module_utils/common/json.py +2 -2
- ansible/module_utils/common/text/converters.py +3 -3
- ansible/module_utils/common/validation.py +1 -1
- ansible/module_utils/common/warnings.py +80 -23
- ansible/module_utils/common/yaml.py +1 -1
- ansible/module_utils/datatag.py +5 -2
- ansible/module_utils/facts/system/distribution.py +16 -3
- ansible/module_utils/facts/virtual/linux.py +2 -2
- ansible/module_utils/parsing/convert_bool.py +6 -0
- ansible/module_utils/service.py +2 -9
- ansible/modules/apt_repository.py +7 -29
- ansible/modules/assemble.py +4 -4
- ansible/modules/async_status.py +13 -11
- ansible/modules/async_wrapper.py +5 -5
- ansible/modules/cron.py +3 -5
- ansible/modules/dnf5.py +15 -22
- ansible/modules/git.py +1 -6
- ansible/modules/hostname.py +0 -1
- ansible/modules/pip.py +2 -4
- ansible/modules/service.py +3 -9
- ansible/modules/sysvinit.py +3 -3
- ansible/parsing/ajson.py +3 -5
- ansible/parsing/dataloader.py +4 -4
- ansible/parsing/mod_args.py +1 -1
- ansible/parsing/plugin_docs.py +2 -2
- ansible/parsing/utils/yaml.py +3 -3
- ansible/parsing/vault/__init__.py +4 -4
- ansible/playbook/playbook_include.py +1 -1
- ansible/playbook/taggable.py +0 -3
- ansible/plugins/__init__.py +0 -25
- ansible/plugins/action/__init__.py +9 -32
- ansible/plugins/action/add_host.py +1 -1
- ansible/plugins/action/assemble.py +8 -16
- ansible/plugins/action/async_status.py +7 -2
- ansible/plugins/action/copy.py +8 -7
- ansible/plugins/action/gather_facts.py +8 -8
- ansible/plugins/action/package.py +5 -8
- ansible/plugins/action/script.py +8 -15
- ansible/plugins/action/service.py +3 -7
- ansible/plugins/action/template.py +6 -8
- ansible/plugins/action/unarchive.py +5 -15
- ansible/plugins/action/uri.py +9 -20
- ansible/plugins/callback/__init__.py +4 -6
- ansible/plugins/callback/junit.py +4 -2
- ansible/plugins/connection/local.py +2 -2
- ansible/plugins/connection/ssh.py +17 -9
- ansible/plugins/connection/winrm.py +5 -2
- ansible/plugins/doc_fragments/constructed.py +2 -2
- ansible/plugins/filter/core.py +13 -6
- ansible/plugins/filter/encryption.py +4 -4
- ansible/plugins/inventory/__init__.py +11 -10
- ansible/plugins/inventory/script.py +1 -1
- ansible/plugins/list.py +69 -16
- ansible/plugins/loader.py +10 -9
- ansible/plugins/lookup/csvfile.py +16 -71
- ansible/plugins/lookup/first_found.py +2 -1
- ansible/plugins/shell/__init__.py +56 -2
- ansible/plugins/shell/powershell.py +66 -9
- ansible/plugins/shell/sh.py +9 -5
- ansible/plugins/test/core.py +21 -15
- ansible/plugins/test/finished.yml +1 -1
- ansible/plugins/test/uri.py +2 -5
- ansible/release.py +1 -1
- ansible/template/__init__.py +30 -2
- ansible/utils/collection_loader/__init__.py +2 -0
- ansible/utils/display.py +107 -128
- ansible/utils/hashing.py +0 -1
- ansible/utils/listify.py +6 -4
- ansible/utils/plugin_docs.py +2 -1
- ansible/utils/unsafe_proxy.py +1 -1
- ansible/vars/hostvars.py +1 -1
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info}/METADATA +3 -2
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info}/RECORD +173 -161
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info}/WHEEL +1 -1
- ansible_test/_data/completion/docker.txt +3 -3
- ansible_test/_data/completion/remote.txt +1 -0
- ansible_test/_data/requirements/sanity.ansible-doc.txt +1 -1
- ansible_test/_data/requirements/sanity.changelog.txt +2 -2
- ansible_test/_data/requirements/sanity.pep8.txt +1 -1
- ansible_test/_data/requirements/sanity.pylint.txt +4 -4
- ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
- ansible_test/_internal/util.py +20 -0
- ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +1 -0
- ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +1 -0
- ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +1 -0
- ansible_test/_util/controller/sanity/pylint/config/collection.cfg +1 -0
- ansible_test/_util/controller/sanity/pylint/config/default.cfg +1 -0
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated_calls.py +73 -8
- ansible_test/_util/target/setup/bootstrap.sh +31 -0
- ansible/_internal/_errors/_utils.py +0 -310
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info/licenses}/COPYING +0 -0
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info/licenses/licenses}/Apache-License.txt +0 -0
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info/licenses/licenses}/BSD-3-Clause.txt +0 -0
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info/licenses/licenses}/MIT-license.txt +0 -0
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info/licenses/licenses}/PSF-license.txt +0 -0
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info/licenses/licenses}/simplified_bsd.txt +0 -0
- {ansible_core-2.19.0b3.dist-info → ansible_core-2.19.0b5.dist-info}/top_level.txt +0 -0
ansible/cli/doc.py
CHANGED
@@ -9,12 +9,14 @@ from __future__ import annotations
|
|
9
9
|
# ansible.cli needs to be imported first, to ensure the source bin/* scripts run that code first
|
10
10
|
from ansible.cli import CLI
|
11
11
|
|
12
|
+
import collections.abc
|
12
13
|
import importlib
|
13
14
|
import pkgutil
|
14
15
|
import os
|
15
16
|
import os.path
|
16
17
|
import re
|
17
18
|
import textwrap
|
19
|
+
import typing as t
|
18
20
|
|
19
21
|
import yaml
|
20
22
|
|
@@ -35,7 +37,7 @@ from ansible.parsing.plugin_docs import read_docstub
|
|
35
37
|
from ansible.parsing.yaml.dumper import AnsibleDumper
|
36
38
|
from ansible.parsing.yaml.loader import AnsibleLoader
|
37
39
|
from ansible._internal._yaml._loader import AnsibleInstrumentedLoader
|
38
|
-
from ansible.plugins.list import
|
40
|
+
from ansible.plugins.list import _list_plugins_with_info, _PluginDocMetadata
|
39
41
|
from ansible.plugins.loader import action_loader, fragment_loader
|
40
42
|
from ansible.utils.collection_loader import AnsibleCollectionConfig, AnsibleCollectionRef
|
41
43
|
from ansible.utils.collection_loader._collection_finder import _get_collection_name_from_path
|
@@ -44,6 +46,7 @@ from ansible.utils.display import Display
|
|
44
46
|
from ansible.utils.plugin_docs import get_plugin_docs, get_docstring, get_versioned_doclink
|
45
47
|
from ansible.template import trust_as_template
|
46
48
|
from ansible._internal import _json
|
49
|
+
from ansible._internal._templating import _jinja_plugins
|
47
50
|
|
48
51
|
display = Display()
|
49
52
|
|
@@ -788,35 +791,47 @@ class DocCLI(CLI, RoleMixin):
|
|
788
791
|
return coll_filter
|
789
792
|
|
790
793
|
def _list_plugins(self, plugin_type, content):
|
791
|
-
|
792
|
-
results = {}
|
793
|
-
self.plugins = {}
|
794
|
-
loader = DocCLI._prep_loader(plugin_type)
|
794
|
+
DocCLI._prep_loader(plugin_type)
|
795
795
|
|
796
796
|
coll_filter = self._get_collection_filter()
|
797
|
-
|
797
|
+
plugins = _list_plugins_with_info(plugin_type, coll_filter)
|
798
|
+
|
799
|
+
# Remove the internal ansible._protomatter plugins if getting all plugins
|
800
|
+
if not coll_filter:
|
801
|
+
plugins = {k: v for k, v in plugins.items() if not k.startswith('ansible._protomatter.')}
|
798
802
|
|
799
803
|
# get appropriate content depending on option
|
800
804
|
if content == 'dir':
|
801
|
-
results = self._get_plugin_list_descriptions(
|
805
|
+
results = self._get_plugin_list_descriptions(plugins)
|
802
806
|
elif content == 'files':
|
803
|
-
results = {k:
|
807
|
+
results = {k: v.path for k, v in plugins.items()}
|
804
808
|
else:
|
805
|
-
results = {k: {} for k in
|
809
|
+
results = {k: {} for k in plugins.keys()}
|
806
810
|
self.plugin_list = set() # reset for next iteration
|
807
811
|
|
808
812
|
return results
|
809
813
|
|
810
|
-
def _get_plugins_docs(self, plugin_type, names, fail_ok=False, fail_on_errors=True):
|
811
|
-
|
814
|
+
def _get_plugins_docs(self, plugin_type: str, names: collections.abc.Iterable[str], fail_ok: bool = False, fail_on_errors: bool = True) -> dict[str, dict]:
|
812
815
|
loader = DocCLI._prep_loader(plugin_type)
|
813
816
|
|
817
|
+
if plugin_type in ('filter', 'test'):
|
818
|
+
jinja2_builtins = _jinja_plugins.get_jinja_builtin_plugin_descriptions(plugin_type)
|
819
|
+
jinja2_builtins.update({name.split('.')[-1]: value for name, value in jinja2_builtins.items()}) # add short-named versions for lookup
|
820
|
+
else:
|
821
|
+
jinja2_builtins = {}
|
822
|
+
|
814
823
|
# get the docs for plugins in the command line list
|
815
824
|
plugin_docs = {}
|
816
825
|
for plugin in names:
|
817
|
-
doc = {}
|
826
|
+
doc: dict[str, t.Any] = {}
|
818
827
|
try:
|
819
|
-
doc, plainexamples, returndocs, metadata =
|
828
|
+
doc, plainexamples, returndocs, metadata = self._get_plugin_docs_with_jinja2_builtins(
|
829
|
+
plugin,
|
830
|
+
plugin_type,
|
831
|
+
loader,
|
832
|
+
fragment_loader,
|
833
|
+
jinja2_builtins,
|
834
|
+
)
|
820
835
|
except AnsiblePluginNotFound as e:
|
821
836
|
display.warning(to_native(e))
|
822
837
|
continue
|
@@ -853,6 +868,39 @@ class DocCLI(CLI, RoleMixin):
|
|
853
868
|
|
854
869
|
return plugin_docs
|
855
870
|
|
871
|
+
def _get_plugin_docs_with_jinja2_builtins(
|
872
|
+
self,
|
873
|
+
plugin_name: str,
|
874
|
+
plugin_type: str,
|
875
|
+
loader: t.Any,
|
876
|
+
fragment_loader: t.Any,
|
877
|
+
jinja_builtins: dict[str, str],
|
878
|
+
) -> tuple[dict, str | None, dict | None, dict | None]:
|
879
|
+
try:
|
880
|
+
return get_plugin_docs(plugin_name, plugin_type, loader, fragment_loader, (context.CLIARGS['verbosity'] > 0))
|
881
|
+
except Exception:
|
882
|
+
if (desc := jinja_builtins.get(plugin_name, ...)) is not ...:
|
883
|
+
short_name = plugin_name.split('.')[-1]
|
884
|
+
long_name = f'ansible.builtin.{short_name}'
|
885
|
+
# Dynamically build a doc stub for any Jinja2 builtin plugin we haven't
|
886
|
+
# explicitly documented.
|
887
|
+
doc = dict(
|
888
|
+
collection='ansible.builtin',
|
889
|
+
plugin_name=long_name,
|
890
|
+
filename='',
|
891
|
+
short_description=desc,
|
892
|
+
description=[
|
893
|
+
desc,
|
894
|
+
'',
|
895
|
+
f"This is the Jinja builtin {plugin_type} plugin {short_name!r}.",
|
896
|
+
f"See: U(https://jinja.palletsprojects.com/en/stable/templates/#jinja-{plugin_type}s.{short_name})",
|
897
|
+
],
|
898
|
+
)
|
899
|
+
|
900
|
+
return doc, None, None, None
|
901
|
+
|
902
|
+
raise
|
903
|
+
|
856
904
|
def _get_roles_path(self):
|
857
905
|
"""
|
858
906
|
Add any 'roles' subdir in playbook dir to the roles search path.
|
@@ -1001,10 +1049,10 @@ class DocCLI(CLI, RoleMixin):
|
|
1001
1049
|
def get_all_plugins_of_type(plugin_type):
|
1002
1050
|
loader = getattr(plugin_loader, '%s_loader' % plugin_type)
|
1003
1051
|
paths = loader._get_paths_with_context()
|
1004
|
-
plugins =
|
1052
|
+
plugins = []
|
1005
1053
|
for path_context in paths:
|
1006
|
-
plugins
|
1007
|
-
return sorted(plugins
|
1054
|
+
plugins += _list_plugins_with_info(plugin_type).keys()
|
1055
|
+
return sorted(plugins)
|
1008
1056
|
|
1009
1057
|
@staticmethod
|
1010
1058
|
def get_plugin_metadata(plugin_type, plugin_name):
|
@@ -1101,18 +1149,20 @@ class DocCLI(CLI, RoleMixin):
|
|
1101
1149
|
|
1102
1150
|
return text
|
1103
1151
|
|
1104
|
-
def _get_plugin_list_descriptions(self,
|
1152
|
+
def _get_plugin_list_descriptions(self, plugins: dict[str, _PluginDocMetadata]) -> dict[str, str]:
|
1105
1153
|
|
1106
1154
|
descs = {}
|
1107
|
-
for plugin in
|
1155
|
+
for plugin, plugin_info in plugins.items():
|
1108
1156
|
# TODO: move to plugin itself i.e: plugin.get_desc()
|
1109
1157
|
doc = None
|
1110
|
-
|
1158
|
+
|
1111
1159
|
docerror = None
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1160
|
+
if plugin_info.path:
|
1161
|
+
filename = Path(to_native(plugin_info.path))
|
1162
|
+
try:
|
1163
|
+
doc = read_docstub(filename)
|
1164
|
+
except Exception as e:
|
1165
|
+
docerror = e
|
1116
1166
|
|
1117
1167
|
# plugin file was empty or had error, lets try other options
|
1118
1168
|
if doc is None:
|
@@ -1127,9 +1177,15 @@ class DocCLI(CLI, RoleMixin):
|
|
1127
1177
|
except Exception as e:
|
1128
1178
|
docerror = e
|
1129
1179
|
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1180
|
+
# Do a final fallback to see if the plugin is a shadowed Jinja2 plugin
|
1181
|
+
# without any explicit documentation.
|
1182
|
+
if doc is None and plugin_info.jinja_builtin_short_description:
|
1183
|
+
descs[plugin] = plugin_info.jinja_builtin_short_description
|
1184
|
+
continue
|
1185
|
+
|
1186
|
+
if docerror:
|
1187
|
+
display.error_as_warning(f"{plugin} has a documentation formatting error.", exception=docerror)
|
1188
|
+
continue
|
1133
1189
|
|
1134
1190
|
if not doc or not isinstance(doc, dict):
|
1135
1191
|
desc = 'UNDOCUMENTED'
|
@@ -1368,7 +1424,7 @@ class DocCLI(CLI, RoleMixin):
|
|
1368
1424
|
try:
|
1369
1425
|
text.append(yaml_dump(doc.pop('examples'), indent=2, default_flow_style=False))
|
1370
1426
|
except Exception as e:
|
1371
|
-
raise AnsibleParserError("Unable to parse examples section"
|
1427
|
+
raise AnsibleParserError("Unable to parse examples section.") from e
|
1372
1428
|
|
1373
1429
|
return text
|
1374
1430
|
|
@@ -1406,7 +1462,7 @@ class DocCLI(CLI, RoleMixin):
|
|
1406
1462
|
try:
|
1407
1463
|
text.append('\t' + C.config.get_deprecated_msg_from_config(doc['deprecated'], True, collection_name=collection_name))
|
1408
1464
|
except KeyError as e:
|
1409
|
-
raise AnsibleError("Invalid deprecation documentation structure"
|
1465
|
+
raise AnsibleError("Invalid deprecation documentation structure.") from e
|
1410
1466
|
else:
|
1411
1467
|
text.append("%s" % doc['deprecated'])
|
1412
1468
|
del doc['deprecated']
|
ansible/cli/inventory.py
CHANGED
@@ -164,7 +164,7 @@ class InventoryCLI(CLI):
|
|
164
164
|
import yaml
|
165
165
|
from ansible.parsing.yaml.dumper import AnsibleDumper
|
166
166
|
|
167
|
-
#
|
167
|
+
# DTFIX0: need shared infra to smuggle custom kwargs to dumpers, since yaml.dump cannot (as of PyYAML 6.0.1)
|
168
168
|
dumper = functools.partial(AnsibleDumper, dump_vault_tags=True)
|
169
169
|
results = to_text(yaml.dump(stuff, Dumper=dumper, default_flow_style=False, allow_unicode=True))
|
170
170
|
elif context.CLIARGS['toml']:
|
@@ -3,17 +3,14 @@
|
|
3
3
|
|
4
4
|
from __future__ import annotations
|
5
5
|
|
6
|
-
import
|
6
|
+
from ansible.utils.display import Display as _Display
|
7
7
|
|
8
|
-
|
8
|
+
from importlib.resources import files # pylint: disable=unused-import
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
else:
|
18
|
-
from importlib.resources import files
|
19
|
-
HAS_IMPORTLIB_RESOURCES = True
|
10
|
+
HAS_IMPORTLIB_RESOURCES = True
|
11
|
+
|
12
|
+
_Display().deprecated(
|
13
|
+
msg="The `ansible.compat.importlib_resources` module is deprecated.",
|
14
|
+
help_text="Use `importlib.resources` from the Python standard library instead.",
|
15
|
+
version="2.23",
|
16
|
+
)
|
ansible/config/base.yml
CHANGED
@@ -757,7 +757,7 @@ DEFAULT_HASH_BEHAVIOUR:
|
|
757
757
|
- {key: hash_behaviour, section: defaults}
|
758
758
|
DEFAULT_HOST_LIST:
|
759
759
|
name: Inventory Source
|
760
|
-
default: /etc/ansible/hosts
|
760
|
+
default: [/etc/ansible/hosts]
|
761
761
|
description: Comma-separated list of Ansible inventory sources
|
762
762
|
env:
|
763
763
|
- name: ANSIBLE_INVENTORY
|
@@ -1054,7 +1054,7 @@ DEFAULT_ROLES_PATH:
|
|
1054
1054
|
yaml: {key: defaults.roles_path}
|
1055
1055
|
DEFAULT_SELINUX_SPECIAL_FS:
|
1056
1056
|
name: Problematic file systems
|
1057
|
-
default: fuse, nfs, vboxsf, ramfs, 9p, vfat
|
1057
|
+
default: [fuse, nfs, vboxsf, ramfs, 9p, vfat]
|
1058
1058
|
description:
|
1059
1059
|
- "Some filesystems do not support safe operations and/or return inconsistent errors,
|
1060
1060
|
this setting makes Ansible 'tolerate' those in the list without causing fatal errors."
|
@@ -1199,15 +1199,6 @@ DEFAULT_VARS_PLUGIN_PATH:
|
|
1199
1199
|
ini:
|
1200
1200
|
- {key: vars_plugins, section: defaults}
|
1201
1201
|
type: pathspec
|
1202
|
-
# TODO: unused?
|
1203
|
-
#DEFAULT_VAR_COMPRESSION_LEVEL:
|
1204
|
-
# default: 0
|
1205
|
-
# description: 'TODO: write it'
|
1206
|
-
# env: [{name: ANSIBLE_VAR_COMPRESSION_LEVEL}]
|
1207
|
-
# ini:
|
1208
|
-
# - {key: var_compression_level, section: defaults}
|
1209
|
-
# type: integer
|
1210
|
-
# yaml: {key: defaults.var_compression_level}
|
1211
1202
|
DEFAULT_VAULT_ID_MATCH:
|
1212
1203
|
name: Force vault id match
|
1213
1204
|
default: False
|
@@ -1333,7 +1324,7 @@ DISPLAY_SKIPPED_HOSTS:
|
|
1333
1324
|
type: boolean
|
1334
1325
|
DISPLAY_TRACEBACK:
|
1335
1326
|
name: Control traceback display
|
1336
|
-
default: never
|
1327
|
+
default: [never]
|
1337
1328
|
description: When to include tracebacks in extended error messages
|
1338
1329
|
env:
|
1339
1330
|
- name: ANSIBLE_DISPLAY_TRACEBACK
|
@@ -1344,6 +1335,7 @@ DISPLAY_TRACEBACK:
|
|
1344
1335
|
- error
|
1345
1336
|
- warning
|
1346
1337
|
- deprecated
|
1338
|
+
- deprecated_value
|
1347
1339
|
- always
|
1348
1340
|
- never
|
1349
1341
|
version_added: "2.19"
|
@@ -1480,15 +1472,6 @@ GALAXY_COLLECTIONS_PATH_WARNING:
|
|
1480
1472
|
ini:
|
1481
1473
|
- {key: collections_path_warning, section: galaxy}
|
1482
1474
|
version_added: "2.16"
|
1483
|
-
# TODO: unused?
|
1484
|
-
#GALAXY_SCMS:
|
1485
|
-
# name: Galaxy SCMS
|
1486
|
-
# default: git, hg
|
1487
|
-
# description: Available galaxy source control management systems.
|
1488
|
-
# env: [{name: ANSIBLE_GALAXY_SCMS}]
|
1489
|
-
# ini:
|
1490
|
-
# - {key: scms, section: galaxy}
|
1491
|
-
# type: list
|
1492
1475
|
GALAXY_SERVER:
|
1493
1476
|
default: https://galaxy.ansible.com
|
1494
1477
|
description: "URL to prepend when roles don't specify the full URI, assume they are referencing this server as the source."
|
@@ -1731,7 +1714,7 @@ INVENTORY_EXPORT:
|
|
1731
1714
|
type: bool
|
1732
1715
|
INVENTORY_IGNORE_EXTS:
|
1733
1716
|
name: Inventory ignore extensions
|
1734
|
-
default: "{{
|
1717
|
+
default: "{{ REJECT_EXTS + ['.orig', '.cfg', '.retry'] }}"
|
1735
1718
|
description: List of extensions to ignore when using a directory as an inventory source.
|
1736
1719
|
env: [{name: ANSIBLE_INVENTORY_IGNORE}]
|
1737
1720
|
ini:
|
@@ -1788,7 +1771,7 @@ INJECT_FACTS_AS_VARS:
|
|
1788
1771
|
version_added: "2.5"
|
1789
1772
|
MODULE_IGNORE_EXTS:
|
1790
1773
|
name: Module ignore extensions
|
1791
|
-
default: "{{
|
1774
|
+
default: "{{ REJECT_EXTS + ['.yaml', '.yml', '.ini'] }}"
|
1792
1775
|
description:
|
1793
1776
|
- List of extensions to ignore when looking for modules to load.
|
1794
1777
|
- This is for rejecting script and binary module fallback extensions.
|
@@ -1979,6 +1962,14 @@ SSH_AGENT:
|
|
1979
1962
|
env: [{name: ANSIBLE_SSH_AGENT}]
|
1980
1963
|
ini: [{key: ssh_agent, section: connection}]
|
1981
1964
|
version_added: '2.19'
|
1965
|
+
SSH_AGENT_EXECUTABLE:
|
1966
|
+
name: Executable to start for the ansible-managed SSH agent
|
1967
|
+
description: When ``SSH_AGENT`` is ``auto``, the path or name of the ssh agent executable to start.
|
1968
|
+
default: ssh-agent
|
1969
|
+
type: str
|
1970
|
+
env: [ { name: ANSIBLE_SSH_AGENT_EXECUTABLE } ]
|
1971
|
+
ini: [ { key: ssh_agent_executable, section: connection } ]
|
1972
|
+
version_added: '2.19'
|
1982
1973
|
SSH_AGENT_KEY_LIFETIME:
|
1983
1974
|
name: Set a maximum lifetime when adding identities to an agent
|
1984
1975
|
description: For keys inserted into an agent defined by ``SSH_AGENT``, define a lifetime, in seconds, that the key may remain
|
@@ -2053,6 +2044,19 @@ TASK_TIMEOUT:
|
|
2053
2044
|
- {key: task_timeout, section: defaults}
|
2054
2045
|
type: integer
|
2055
2046
|
version_added: '2.10'
|
2047
|
+
_TEMPLAR_SANDBOX_MODE:
|
2048
|
+
name: Control Jinja template sandbox behavior
|
2049
|
+
default: default
|
2050
|
+
description:
|
2051
|
+
- The default Jinja sandbox behavior blocks template access to all `_` prefixed object attributes and known collection mutation methods (e.g., `dict.clear()`, `list.append()`).
|
2052
|
+
type: choices
|
2053
|
+
choices:
|
2054
|
+
- default
|
2055
|
+
- allow_unsafe_attributes
|
2056
|
+
env: [{name: _ANSIBLE_TEMPLAR_SANDBOX_MODE}]
|
2057
|
+
deprecated:
|
2058
|
+
why: controlling sandbox behavior is a temporary workaround
|
2059
|
+
version: '2.23'
|
2056
2060
|
_TEMPLAR_UNKNOWN_TYPE_CONVERSION:
|
2057
2061
|
name: Templar unknown type conversion behavior
|
2058
2062
|
default: warning
|