ansible-core 2.18.7rc1__py3-none-any.whl → 2.18.8__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.
Potentially problematic release.
This version of ansible-core might be problematic. Click here for more details.
- ansible/config/manager.py +7 -3
- ansible/module_utils/ansible_release.py +1 -1
- ansible/modules/meta.py +2 -1
- ansible/plugins/__init__.py +18 -10
- ansible/plugins/callback/__init__.py +9 -1
- ansible/release.py +1 -1
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/METADATA +1 -1
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/RECORD +20 -20
- ansible_test/_data/completion/remote.txt +1 -1
- ansible_test/_internal/commands/integration/coverage.py +2 -2
- ansible_test/_internal/coverage_util.py +28 -25
- ansible_test/_util/target/setup/bootstrap.sh +41 -31
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/WHEEL +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/licenses/COPYING +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/licenses/licenses/Apache-License.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/licenses/licenses/MIT-license.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/licenses/licenses/PSF-license.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/licenses/licenses/simplified_bsd.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/top_level.txt +0 -0
ansible/config/manager.py
CHANGED
|
@@ -420,13 +420,17 @@ class ConfigManager(object):
|
|
|
420
420
|
pass
|
|
421
421
|
|
|
422
422
|
def get_plugin_options(self, plugin_type, name, keys=None, variables=None, direct=None):
|
|
423
|
+
options, dummy = self.get_plugin_options_and_origins(plugin_type, name, keys=keys, variables=variables, direct=direct)
|
|
424
|
+
return options
|
|
423
425
|
|
|
426
|
+
def get_plugin_options_and_origins(self, plugin_type, name, keys=None, variables=None, direct=None):
|
|
424
427
|
options = {}
|
|
428
|
+
origins = {}
|
|
425
429
|
defs = self.get_configuration_definitions(plugin_type=plugin_type, name=name)
|
|
426
430
|
for option in defs:
|
|
427
|
-
options[option] = self.
|
|
428
|
-
|
|
429
|
-
return options
|
|
431
|
+
options[option], origins[option] = self.get_config_value_and_origin(option, plugin_type=plugin_type, plugin_name=name, keys=keys,
|
|
432
|
+
variables=variables, direct=direct)
|
|
433
|
+
return options, origins
|
|
430
434
|
|
|
431
435
|
def get_plugin_vars(self, plugin_type, name):
|
|
432
436
|
|
ansible/modules/meta.py
CHANGED
|
@@ -33,6 +33,7 @@ options:
|
|
|
33
33
|
- V(clear_facts) (added in Ansible 2.1) causes the gathered facts for the hosts specified in the play's list of hosts to be cleared,
|
|
34
34
|
including the fact cache.
|
|
35
35
|
- V(clear_host_errors) (added in Ansible 2.1) clears the failed state (if any) from hosts specified in the play's list of hosts.
|
|
36
|
+
This will make them available for targetting in subsequent plays, but not continue execution in the current play.
|
|
36
37
|
- V(end_play) (added in Ansible 2.2) causes the play to end without failing the host(s). Note that this affects all hosts.
|
|
37
38
|
- V(reset_connection) (added in Ansible 2.3) interrupts a persistent connection (i.e. ssh + control persist)
|
|
38
39
|
- V(end_host) (added in Ansible 2.8) is a per-host variation of V(end_play). Causes the play to end for the current host without failing it.
|
|
@@ -108,7 +109,7 @@ EXAMPLES = r'''
|
|
|
108
109
|
- name: Clear gathered facts from all currently targeted hosts
|
|
109
110
|
ansible.builtin.meta: clear_facts
|
|
110
111
|
|
|
111
|
-
# Example showing how to continue using a failed target
|
|
112
|
+
# Example showing how to continue using a failed target, for the next play
|
|
112
113
|
- name: Bring host back to play after failure
|
|
113
114
|
ansible.builtin.copy:
|
|
114
115
|
src: file
|
ansible/plugins/__init__.py
CHANGED
|
@@ -59,6 +59,7 @@ class AnsiblePlugin(ABC):
|
|
|
59
59
|
|
|
60
60
|
def __init__(self):
|
|
61
61
|
self._options = {}
|
|
62
|
+
self._origins = {}
|
|
62
63
|
self._defs = None
|
|
63
64
|
|
|
64
65
|
@property
|
|
@@ -78,18 +79,22 @@ class AnsiblePlugin(ABC):
|
|
|
78
79
|
return bool(possible_fqcns.intersection(set(self.ansible_aliases)))
|
|
79
80
|
|
|
80
81
|
def get_option_and_origin(self, option, hostvars=None):
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
if option not in self._options:
|
|
83
|
+
try:
|
|
84
|
+
# some plugins don't use set_option(s) and cannot use direct settings, so this populates the local copy for them
|
|
85
|
+
self._options[option], self._origins[option] = C.config.get_config_value_and_origin(option, plugin_type=self.plugin_type,
|
|
86
|
+
plugin_name=self._load_name, variables=hostvars)
|
|
87
|
+
except AnsibleError as e:
|
|
88
|
+
# callers expect key error on missing
|
|
89
|
+
raise KeyError(str(e))
|
|
86
90
|
|
|
87
|
-
|
|
91
|
+
return self._options[option], self._origins[option]
|
|
88
92
|
|
|
93
|
+
def get_option(self, option, hostvars=None):
|
|
89
94
|
if option not in self._options:
|
|
90
|
-
|
|
91
|
-
self.
|
|
92
|
-
return self._options
|
|
95
|
+
# let it populate _options
|
|
96
|
+
self.get_option_and_origin(option, hostvars=hostvars)
|
|
97
|
+
return self._options[option]
|
|
93
98
|
|
|
94
99
|
def get_options(self, hostvars=None):
|
|
95
100
|
options = {}
|
|
@@ -100,6 +105,7 @@ class AnsiblePlugin(ABC):
|
|
|
100
105
|
def set_option(self, option, value):
|
|
101
106
|
self._options[option] = C.config.get_config_value(option, plugin_type=self.plugin_type, plugin_name=self._load_name, direct={option: value})
|
|
102
107
|
C.handle_config_noise(display)
|
|
108
|
+
self._origins[option] = 'Direct'
|
|
103
109
|
|
|
104
110
|
def set_options(self, task_keys=None, var_options=None, direct=None):
|
|
105
111
|
'''
|
|
@@ -109,12 +115,14 @@ class AnsiblePlugin(ABC):
|
|
|
109
115
|
:arg var_options: Dict with either 'connection variables'
|
|
110
116
|
:arg direct: Dict with 'direct assignment'
|
|
111
117
|
'''
|
|
112
|
-
self._options = C.config.
|
|
118
|
+
self._options, self._origins = C.config.get_plugin_options_and_origins(self.plugin_type, self._load_name, keys=task_keys,
|
|
119
|
+
variables=var_options, direct=direct)
|
|
113
120
|
|
|
114
121
|
# allow extras/wildcards from vars that are not directly consumed in configuration
|
|
115
122
|
# this is needed to support things like winrm that can have extended protocol options we don't directly handle
|
|
116
123
|
if self.allow_extras and var_options and '_extras' in var_options:
|
|
117
124
|
# these are largely unvalidated passthroughs, either plugin or underlying API will validate
|
|
125
|
+
# TODO: deprecate and remove, most plugins that needed this don't use this facility anymore
|
|
118
126
|
self._options['_extras'] = var_options['_extras']
|
|
119
127
|
C.handle_config_noise(display)
|
|
120
128
|
|
|
@@ -172,17 +172,25 @@ class CallbackBase(AnsiblePlugin):
|
|
|
172
172
|
|
|
173
173
|
def set_option(self, k, v):
|
|
174
174
|
self._plugin_options[k] = C.config.get_config_value(k, plugin_type=self.plugin_type, plugin_name=self._load_name, direct={k: v})
|
|
175
|
+
self._origins[k] = 'direct'
|
|
175
176
|
|
|
176
177
|
def get_option(self, k):
|
|
177
178
|
return self._plugin_options[k]
|
|
178
179
|
|
|
180
|
+
def get_option_and_origin(self, k, hostvars=None):
|
|
181
|
+
return self._plugin_options[k], self._origins[k]
|
|
182
|
+
|
|
183
|
+
def has_option(self, option):
|
|
184
|
+
return (option in self._plugin_options)
|
|
185
|
+
|
|
179
186
|
def set_options(self, task_keys=None, var_options=None, direct=None):
|
|
180
187
|
''' This is different than the normal plugin method as callbacks get called early and really don't accept keywords.
|
|
181
188
|
Also _options was already taken for CLI args and callbacks use _plugin_options instead.
|
|
182
189
|
'''
|
|
183
190
|
|
|
184
191
|
# load from config
|
|
185
|
-
self._plugin_options = C.config.
|
|
192
|
+
self._plugin_options, self._origins = C.config.get_plugin_options_and_origins(self.plugin_type, self._load_name,
|
|
193
|
+
keys=task_keys, variables=var_options, direct=direct)
|
|
186
194
|
|
|
187
195
|
@staticmethod
|
|
188
196
|
def host_label(result):
|
ansible/release.py
CHANGED
|
@@ -3,7 +3,7 @@ ansible/__main__.py,sha256=24j-7-YT4lZ2fmV80JD-VRoYBnxR7YoP_VP-orJtDt0,796
|
|
|
3
3
|
ansible/constants.py,sha256=dSgbrzNsmhYc4GQOWZvRm4XKgf--_MUWcMa_9_7l5Pc,9757
|
|
4
4
|
ansible/context.py,sha256=oKYyfjfWpy8vDeProtqfnqSmuij_t75_5e5t0U_hQ1g,1933
|
|
5
5
|
ansible/keyword_desc.yml,sha256=xD-MRMB8mSRaj2ADwRnjIEbOwJKbc6BYadouGPfS0mI,7462
|
|
6
|
-
ansible/release.py,sha256=
|
|
6
|
+
ansible/release.py,sha256=9gq7Q1GbBxC3GTVQHdxbwP6GkRpZWnuB_EVmsfq6wVc,836
|
|
7
7
|
ansible/_vendor/__init__.py,sha256=2QBeBwT7uG7M3Aw-pIdCpt6XPtHMCpbEKfACYKA7xIg,2033
|
|
8
8
|
ansible/cli/__init__.py,sha256=e0KjeLfG1Ketbwl-uOmQ-zXoq3_El80LnHTGu80d1gs,28111
|
|
9
9
|
ansible/cli/adhoc.py,sha256=quJ9WzRzf3dz_dtDGmahNMffqyNVy1jzQCMo21YL5Qg,8194
|
|
@@ -27,7 +27,7 @@ ansible/compat/selectors.py,sha256=pbI2QH2fT2WAOtmEBbd6Cp2yXyCBbb5TLR7iitqnAkU,1
|
|
|
27
27
|
ansible/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
28
|
ansible/config/ansible_builtin_runtime.yml,sha256=nwL_-rqEEmpuSHxZH70pJBiEosDKOPkYIboH3_7LVEY,376076
|
|
29
29
|
ansible/config/base.yml,sha256=uC0ApG7cA5evjjINIMH49362fhMI_p2--Bp_aRbELj4,87253
|
|
30
|
-
ansible/config/manager.py,sha256=
|
|
30
|
+
ansible/config/manager.py,sha256=NZc0A5Rc14BOCSVPPQS1RI3xbC1Yo1a1OM0uy2f9Za4,29524
|
|
31
31
|
ansible/errors/__init__.py,sha256=Dd-jh7JVwfweicHg6irB9ugrK66vHATv9eiRbEep4dM,14943
|
|
32
32
|
ansible/errors/yaml_strings.py,sha256=fKfgD3rC017dyMackTpu-LkvbsdnsfBAKCxMH-fDtIg,3858
|
|
33
33
|
ansible/executor/__init__.py,sha256=mRvbCJPA-_veSG5ka3v04G5vsarLVDeB3EWFsu6geSI,749
|
|
@@ -141,7 +141,7 @@ ansible/inventory/host.py,sha256=PDb5OTplhfpUIvdHiP2BckUOB1gUl302N-3sW0_sTyg,503
|
|
|
141
141
|
ansible/inventory/manager.py,sha256=45mHgZTAkQ3IjAtrgsNzJXvynC-HIEor-JJE-V3xXN4,29454
|
|
142
142
|
ansible/module_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
143
143
|
ansible/module_utils/_text.py,sha256=VkWgAnSNVCbTQqZgllUObBFsH3uM4EUW5srl1UR9t1g,544
|
|
144
|
-
ansible/module_utils/ansible_release.py,sha256=
|
|
144
|
+
ansible/module_utils/ansible_release.py,sha256=9gq7Q1GbBxC3GTVQHdxbwP6GkRpZWnuB_EVmsfq6wVc,836
|
|
145
145
|
ansible/module_utils/api.py,sha256=r4wd6XZGhUnxMF416Ry6ebgq8BIhjCPSPOvO2ZtrYxE,5785
|
|
146
146
|
ansible/module_utils/basic.py,sha256=fogfpo_l7JtS34WvgwwOebmPfMhFjQaJN5CwjKgUJVE,86291
|
|
147
147
|
ansible/module_utils/connection.py,sha256=8TviwCucQ7d_JILwaUHE4tCuNfR3U1WFkmxLMxWa8Rw,7671
|
|
@@ -319,7 +319,7 @@ ansible/modules/include_vars.py,sha256=IyLjhjIpwCPes9ytQ7bzGsLgJRQuiOFqt8nzTUhcn
|
|
|
319
319
|
ansible/modules/iptables.py,sha256=8An92NU65l8Lswj5Ptf4FYqmE7ZC4bFkTPIPmGDWCTk,34708
|
|
320
320
|
ansible/modules/known_hosts.py,sha256=QPDEQgoVHSLAZrfv4zrvTUa65w5DIvwSGaOcw9SPTG8,14439
|
|
321
321
|
ansible/modules/lineinfile.py,sha256=ZAUoZQJYJe4HMItmeLmrGTWKOoT_Q0kuOPGEU9Yr2Yk,23734
|
|
322
|
-
ansible/modules/meta.py,sha256=
|
|
322
|
+
ansible/modules/meta.py,sha256=7MzbqALa-o74TFkNEnjnuj5cTVNSwQ93E3RlSzpqt-I,7264
|
|
323
323
|
ansible/modules/mount_facts.py,sha256=TbRFvz55BU473OI5SFt8cSQRVXfu6-MJ5ka7on46EkY,25997
|
|
324
324
|
ansible/modules/package.py,sha256=oJRsLK4U9oxsW4WNALMeGmPhWpZW9NsMgswwz3ad8xM,3748
|
|
325
325
|
ansible/modules/package_facts.py,sha256=3u_DOU57hyp7y1qcsTfBf-oWG1kqU29T-G9OQxdiwqo,16806
|
|
@@ -394,7 +394,7 @@ ansible/playbook/role/definition.py,sha256=ZKs9FI3kqJETFHMh-8lOH6xGY_g2siuTxYgQj
|
|
|
394
394
|
ansible/playbook/role/include.py,sha256=9e4IvnD3JXqJUV-hB7riGgq0SjrqQGQHDg-cuJ1vTlo,2342
|
|
395
395
|
ansible/playbook/role/metadata.py,sha256=HUuR5wCKAw-6urkAR4DKxUeOVsqFflSDHjZuWdBCmxo,5074
|
|
396
396
|
ansible/playbook/role/requirement.py,sha256=CNgLa0J6zZk2YQ_aeALnjQvehkkFXhrK8LQQZs7Ztzc,4173
|
|
397
|
-
ansible/plugins/__init__.py,sha256=
|
|
397
|
+
ansible/plugins/__init__.py,sha256=xshUMIDPfZKglEb2aqGZoJIPz1auHPdlosOVPyoC4tw,6425
|
|
398
398
|
ansible/plugins/list.py,sha256=Ymy3NjZd8HJQU_yyZgjgHDFSYL9JxEI_pzdGocapflM,9055
|
|
399
399
|
ansible/plugins/loader.py,sha256=musEPf-GJK7lpHugJQyaMOaIP5ls3zU90Qn20DBjnQc,75153
|
|
400
400
|
ansible/plugins/action/__init__.py,sha256=SwQ7kbw9Z_KvruDnejEhlAvILGnYOjNjxGjDKMJ1bfw,69013
|
|
@@ -434,7 +434,7 @@ ansible/plugins/cache/__init__.py,sha256=ZyBCeued8L_VhjsmYTYnZdZVvB3yYvapLw51I2B
|
|
|
434
434
|
ansible/plugins/cache/base.py,sha256=gMJllsSxBALsnp8mn8ZpBw6Ik0z_xwKD4W7fDDhCBhY,907
|
|
435
435
|
ansible/plugins/cache/jsonfile.py,sha256=XaoBGwupkJ_c7wE-PtzeEIx8UXWrPhITEr5mOvUQVi4,1901
|
|
436
436
|
ansible/plugins/cache/memory.py,sha256=0YyktJWL1o9E9JdU-lM1frgamanG-uGOo_Tcii7nD9A,1218
|
|
437
|
-
ansible/plugins/callback/__init__.py,sha256=
|
|
437
|
+
ansible/plugins/callback/__init__.py,sha256=9TDTyg_zdtTWu8DFPDPEXXA4mfQFIFuXh2C2YBUwxrU,25997
|
|
438
438
|
ansible/plugins/callback/default.py,sha256=pC9Qbw-4-Q8NFHl4lvH9jr6jNop01b6tjxmOWGy5fmU,16883
|
|
439
439
|
ansible/plugins/callback/junit.py,sha256=SEcfuWxBqm3SpeZlZbno8Uh-1C0NnmPXscUWgYtCyIQ,13773
|
|
440
440
|
ansible/plugins/callback/minimal.py,sha256=51pTYXwnCAm4Z4TYbWTu-wq8gKpYCeq1AuSD8PC0hSo,3008
|
|
@@ -687,17 +687,17 @@ ansible/vars/hostvars.py,sha256=o11xrzDVYn23renGbb3lx3R-nH9qOjLFju5IYJanDxg,5324
|
|
|
687
687
|
ansible/vars/manager.py,sha256=JF2KTL4iYSbcdnFNjhQPktwH05YhWJhTWtjSlF0qg9E,31260
|
|
688
688
|
ansible/vars/plugins.py,sha256=PocWZPMqFl1LoNgWlGFNxwg9nZnUzhQmlXO4g7bcP2A,4503
|
|
689
689
|
ansible/vars/reserved.py,sha256=Tsc4m2UwVce3dOvSWrjT2wB3lpNJtUyNZn45zNhsW0I,2869
|
|
690
|
-
ansible_core-2.18.
|
|
691
|
-
ansible_core-2.18.
|
|
692
|
-
ansible_core-2.18.
|
|
693
|
-
ansible_core-2.18.
|
|
694
|
-
ansible_core-2.18.
|
|
690
|
+
ansible_core-2.18.8.dist-info/licenses/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
691
|
+
ansible_core-2.18.8.dist-info/licenses/licenses/Apache-License.txt,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
|
|
692
|
+
ansible_core-2.18.8.dist-info/licenses/licenses/MIT-license.txt,sha256=jLXp2XurnyZKbye40g9tfmLGtVlxh3pPD4n8xNqX8xc,1023
|
|
693
|
+
ansible_core-2.18.8.dist-info/licenses/licenses/PSF-license.txt,sha256=g7BC_H1qyg8Q1o5F76Vrm8ChSWYI5-dyj-CdGlNKBUo,2484
|
|
694
|
+
ansible_core-2.18.8.dist-info/licenses/licenses/simplified_bsd.txt,sha256=8R5R7R7sOa0h1Fi6RNgFgHowHBfun-OVOMzJ4rKAk2w,1237
|
|
695
695
|
ansible_test/__init__.py,sha256=20VPOj11c6Ut1Av9RaurgwJvFhMqkWG3vAvcCbecNKw,66
|
|
696
696
|
ansible_test/_data/ansible.cfg,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
697
697
|
ansible_test/_data/coveragerc,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
698
698
|
ansible_test/_data/completion/docker.txt,sha256=Z5pvUK4XUkJV5qBW8QuBPk8BzuEnvYFQU7W_ULwycGE,648
|
|
699
699
|
ansible_test/_data/completion/network.txt,sha256=BxVN0UxlVkRUrPi9MBArQOe6nR8exaow0oCAznUdfKQ,100
|
|
700
|
-
ansible_test/_data/completion/remote.txt,sha256=
|
|
700
|
+
ansible_test/_data/completion/remote.txt,sha256=62SqbrjJqRVgqthMObjcMelGRNjWYqQUddRLJo9e3Jw,976
|
|
701
701
|
ansible_test/_data/completion/windows.txt,sha256=T67veSrF2tqHC1W6Ddsq3LCBwMCBUmp9LoZBy1QlXOo,238
|
|
702
702
|
ansible_test/_data/playbooks/posix_coverage_setup.yml,sha256=PgQNVzVTsNmfnu0sT2SAYiWtkMSOppfmh0oVmAsb7TQ,594
|
|
703
703
|
ansible_test/_data/playbooks/posix_coverage_teardown.yml,sha256=xHci5QllwJymFtig-hsOXm-Wdrxz063JH14aIyRXhyc,212
|
|
@@ -752,7 +752,7 @@ ansible_test/_internal/constants.py,sha256=Zwgp8wtUuge_8xMPg0pDUt58fBd9KA7YEPTQq
|
|
|
752
752
|
ansible_test/_internal/containers.py,sha256=TrkHL4ntmb7HrmD55BzSdqF35s7oFKu0vCywpWfRt-k,34137
|
|
753
753
|
ansible_test/_internal/content_config.py,sha256=QKR_XVBgYRNZL-XawF2pN2ERTZ6lSm1AJg9ZQRD6IHE,5588
|
|
754
754
|
ansible_test/_internal/core_ci.py,sha256=pyiwFG_TgDSQw34qW-PG8T2VYS6XxiF0zOEWGYXRRek,17309
|
|
755
|
-
ansible_test/_internal/coverage_util.py,sha256=
|
|
755
|
+
ansible_test/_internal/coverage_util.py,sha256=6SFmRqRPiv5l5Aj3VV1PtnHIgM5CNVvsWrilUch1NtY,9407
|
|
756
756
|
ansible_test/_internal/data.py,sha256=OFDpRa47yqBqQO1aSvTZVQQpScHvBHsr861586MQEUI,11184
|
|
757
757
|
ansible_test/_internal/delegation.py,sha256=D8hluDQf_YN3DtVG_8HW0iumRBY3gjp_zP-rlc3VNY4,13418
|
|
758
758
|
ansible_test/_internal/diff.py,sha256=qfzSL7BtoW7bLLgzF0-m--jthVDpUQSr9aBw1fCMIHk,7310
|
|
@@ -844,7 +844,7 @@ ansible_test/_internal/commands/coverage/analyze/targets/generate.py,sha256=UFy_
|
|
|
844
844
|
ansible_test/_internal/commands/coverage/analyze/targets/missing.py,sha256=iqntMFk1nwhxxKgABtHTGLHJPJYMeMEa80Ey5dvBkCc,3894
|
|
845
845
|
ansible_test/_internal/commands/env/__init__.py,sha256=ZJZlU1ufO_8R6tufyQXttI072YLQgy1VlwgN-ceOzP4,5165
|
|
846
846
|
ansible_test/_internal/commands/integration/__init__.py,sha256=CB2v0kQqNfSaSuXXwM9Rq9oNewkFiJRh5mEZJUjugpQ,36888
|
|
847
|
-
ansible_test/_internal/commands/integration/coverage.py,sha256=
|
|
847
|
+
ansible_test/_internal/commands/integration/coverage.py,sha256=cGAwo0RF2-5Nyi-ocLyp1NNhTwP2I9grUwkBL3xqoiM,15560
|
|
848
848
|
ansible_test/_internal/commands/integration/filters.py,sha256=OntBnxm9gnP57yFaiN49Wtk0wA4LJ0jKBY4e4vc0fko,12168
|
|
849
849
|
ansible_test/_internal/commands/integration/network.py,sha256=TvZmcJ1JEZPytj4Eqb3n98zrhZdcTX8PjIshE94Qv7Q,2417
|
|
850
850
|
ansible_test/_internal/commands/integration/posix.py,sha256=eyJg1tpmaVXl2wylN0gOqqLGF3RA1YZeKIZpQg59pM0,1444
|
|
@@ -964,7 +964,7 @@ ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py,sha256=vn
|
|
|
964
964
|
ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py,sha256=A6HawT60Q8Bz0WWajO8AS-HcTpGtm_YxMNASwaYvVH0,1998
|
|
965
965
|
ansible_test/_util/target/sanity/compile/compile.py,sha256=iTRgiZHNO8DwjSqHBw8gPBbFtWnr-Zbd_ybymeazdtA,1302
|
|
966
966
|
ansible_test/_util/target/sanity/import/importer.py,sha256=SGIu5uHzbw7vTItX3fzOEnim5pgtM1tz6UFoZyNzqc8,25149
|
|
967
|
-
ansible_test/_util/target/setup/bootstrap.sh,sha256=
|
|
967
|
+
ansible_test/_util/target/setup/bootstrap.sh,sha256=vM_2K1_nZLHckIhf4tj7o1IH0AUGltIHEM2CARWtFI8,12540
|
|
968
968
|
ansible_test/_util/target/setup/check_systemd_cgroup_v1.sh,sha256=Aq0T62x_KLtkGaWzYqWjvhchTqYFflrTbQET3h6xrT0,395
|
|
969
969
|
ansible_test/_util/target/setup/probe_cgroups.py,sha256=wUHvjW_GXpcyMGw308w26T09cOtBW5EU7i9WagGDQ7o,659
|
|
970
970
|
ansible_test/_util/target/setup/quiet_pip.py,sha256=d3bvh9k2XI_z8-vb3ZoI4lwL8LaFkwvjJE7PpApBlcw,1979
|
|
@@ -985,8 +985,8 @@ ansible_test/config/cloud-config-vultr.ini.template,sha256=XLKHk3lg_8ReQMdWfZzhh
|
|
|
985
985
|
ansible_test/config/config.yml,sha256=1zdGucnIl6nIecZA7ISIANvqXiHWqq6Dthsk_6MUwNc,2642
|
|
986
986
|
ansible_test/config/inventory.networking.template,sha256=bFNSk8zNQOaZ_twaflrY0XZ9mLwUbRLuNT0BdIFwvn4,1335
|
|
987
987
|
ansible_test/config/inventory.winrm.template,sha256=1QU8W-GFLnYEw8yY9bVIvUAVvJYPM3hyoijf6-M7T00,1098
|
|
988
|
-
ansible_core-2.18.
|
|
989
|
-
ansible_core-2.18.
|
|
990
|
-
ansible_core-2.18.
|
|
991
|
-
ansible_core-2.18.
|
|
992
|
-
ansible_core-2.18.
|
|
988
|
+
ansible_core-2.18.8.dist-info/METADATA,sha256=syPAmnkZT9EKQc_Kgn9-d4RDe6MjgwGvtVdi9IdsIeg,7690
|
|
989
|
+
ansible_core-2.18.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
990
|
+
ansible_core-2.18.8.dist-info/entry_points.txt,sha256=S9yJij5Im6FgRQxzkqSCnPQokC7PcWrDW_NSygZczJU,451
|
|
991
|
+
ansible_core-2.18.8.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
|
|
992
|
+
ansible_core-2.18.8.dist-info/RECORD,,
|
|
@@ -2,7 +2,7 @@ alpine/3.20 python=3.12 become=doas_sudo provider=aws arch=x86_64
|
|
|
2
2
|
alpine become=doas_sudo provider=aws arch=x86_64
|
|
3
3
|
fedora/40 python=3.12 become=sudo provider=aws arch=x86_64
|
|
4
4
|
fedora become=sudo provider=aws arch=x86_64
|
|
5
|
-
freebsd/13.
|
|
5
|
+
freebsd/13.5 python=3.11 python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
|
|
6
6
|
freebsd/14.1 python=3.9,3.11 python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
|
|
7
7
|
freebsd python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
|
|
8
8
|
macos/14.3 python=3.11 python_dir=/usr/local/bin become=sudo provider=parallels arch=x86_64
|
|
@@ -165,7 +165,7 @@ class PosixCoverageHandler(CoverageHandler[PosixConfig]):
|
|
|
165
165
|
coverage_config_path = os.path.join(self.common_temp_path, COVERAGE_CONFIG_NAME)
|
|
166
166
|
coverage_output_path = os.path.join(self.common_temp_path, ResultType.COVERAGE.name)
|
|
167
167
|
|
|
168
|
-
coverage_config = generate_coverage_config(
|
|
168
|
+
coverage_config = generate_coverage_config()
|
|
169
169
|
|
|
170
170
|
write_text_file(coverage_config_path, coverage_config, create_directories=True)
|
|
171
171
|
|
|
@@ -254,7 +254,7 @@ class PosixCoverageHandler(CoverageHandler[PosixConfig]):
|
|
|
254
254
|
"""Return a dictionary of variables for setup and teardown of POSIX coverage."""
|
|
255
255
|
return dict(
|
|
256
256
|
common_temp_dir=self.common_temp_path,
|
|
257
|
-
coverage_config=generate_coverage_config(
|
|
257
|
+
coverage_config=generate_coverage_config(),
|
|
258
258
|
coverage_config_path=os.path.join(self.common_temp_path, COVERAGE_CONFIG_NAME),
|
|
259
259
|
coverage_output_path=os.path.join(self.common_temp_path, ResultType.COVERAGE.name),
|
|
260
260
|
mode_directory=f'{MODE_DIRECTORY:04o}',
|
|
@@ -5,11 +5,10 @@ import dataclasses
|
|
|
5
5
|
import os
|
|
6
6
|
import sqlite3
|
|
7
7
|
import tempfile
|
|
8
|
+
import textwrap
|
|
8
9
|
import typing as t
|
|
9
10
|
|
|
10
11
|
from .config import (
|
|
11
|
-
IntegrationConfig,
|
|
12
|
-
SanityConfig,
|
|
13
12
|
TestConfig,
|
|
14
13
|
)
|
|
15
14
|
|
|
@@ -216,7 +215,7 @@ def get_coverage_config(args: TestConfig) -> str:
|
|
|
216
215
|
except AttributeError:
|
|
217
216
|
pass
|
|
218
217
|
|
|
219
|
-
coverage_config = generate_coverage_config(
|
|
218
|
+
coverage_config = generate_coverage_config()
|
|
220
219
|
|
|
221
220
|
if args.explain:
|
|
222
221
|
temp_dir = '/tmp/coverage-temp-dir'
|
|
@@ -234,10 +233,10 @@ def get_coverage_config(args: TestConfig) -> str:
|
|
|
234
233
|
return path
|
|
235
234
|
|
|
236
235
|
|
|
237
|
-
def generate_coverage_config(
|
|
236
|
+
def generate_coverage_config() -> str:
|
|
238
237
|
"""Generate code coverage configuration for tests."""
|
|
239
238
|
if data_context().content.collection:
|
|
240
|
-
coverage_config = generate_collection_coverage_config(
|
|
239
|
+
coverage_config = generate_collection_coverage_config()
|
|
241
240
|
else:
|
|
242
241
|
coverage_config = generate_ansible_coverage_config()
|
|
243
242
|
|
|
@@ -264,12 +263,29 @@ omit =
|
|
|
264
263
|
*/test/results/*
|
|
265
264
|
'''
|
|
266
265
|
|
|
266
|
+
coverage_config = coverage_config.lstrip()
|
|
267
|
+
|
|
267
268
|
return coverage_config
|
|
268
269
|
|
|
269
270
|
|
|
270
|
-
def generate_collection_coverage_config(
|
|
271
|
+
def generate_collection_coverage_config() -> str:
|
|
271
272
|
"""Generate code coverage configuration for Ansible Collection tests."""
|
|
272
|
-
|
|
273
|
+
include_patterns = [
|
|
274
|
+
# {base}/ansible_collections/{ns}/{col}/*
|
|
275
|
+
os.path.join(data_context().content.root, '*'),
|
|
276
|
+
# */ansible_collections/{ns}/{col}/* (required to pick up AnsiballZ coverage)
|
|
277
|
+
os.path.join('*', data_context().content.collection.directory, '*'),
|
|
278
|
+
]
|
|
279
|
+
|
|
280
|
+
omit_patterns = [
|
|
281
|
+
# {base}/ansible_collections/{ns}/{col}/tests/output/*
|
|
282
|
+
os.path.join(data_context().content.root, data_context().content.results_path, '*'),
|
|
283
|
+
]
|
|
284
|
+
|
|
285
|
+
include = textwrap.indent('\n'.join(include_patterns), ' ' * 4)
|
|
286
|
+
omit = textwrap.indent('\n'.join(omit_patterns), ' ' * 4)
|
|
287
|
+
|
|
288
|
+
coverage_config = f"""
|
|
273
289
|
[run]
|
|
274
290
|
branch = True
|
|
275
291
|
concurrency =
|
|
@@ -278,28 +294,15 @@ concurrency =
|
|
|
278
294
|
parallel = True
|
|
279
295
|
disable_warnings =
|
|
280
296
|
no-data-collected
|
|
281
|
-
'''
|
|
282
297
|
|
|
283
|
-
if isinstance(args, IntegrationConfig):
|
|
284
|
-
coverage_config += '''
|
|
285
|
-
include =
|
|
286
|
-
%s/*
|
|
287
|
-
*/%s/*
|
|
288
|
-
''' % (data_context().content.root, data_context().content.collection.directory)
|
|
289
|
-
elif isinstance(args, SanityConfig):
|
|
290
|
-
# temporary work-around for import sanity test
|
|
291
|
-
coverage_config += '''
|
|
292
298
|
include =
|
|
293
|
-
|
|
299
|
+
{include}
|
|
294
300
|
|
|
295
301
|
omit =
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
include =
|
|
301
|
-
%s/*
|
|
302
|
-
''' % data_context().content.root
|
|
302
|
+
{omit}
|
|
303
|
+
"""
|
|
304
|
+
|
|
305
|
+
coverage_config = coverage_config.lstrip()
|
|
303
306
|
|
|
304
307
|
return coverage_config
|
|
305
308
|
|
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
set -eu
|
|
4
4
|
|
|
5
|
+
retry_init()
|
|
6
|
+
{
|
|
7
|
+
attempt=0
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
retry_or_fail()
|
|
11
|
+
{
|
|
12
|
+
attempt=$((attempt + 1))
|
|
13
|
+
|
|
14
|
+
if [ $attempt -gt 5 ]; then
|
|
15
|
+
echo "Failed to install packages. Giving up."
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
echo "Failed to install packages. Sleeping before trying again..."
|
|
20
|
+
sleep 10
|
|
21
|
+
}
|
|
22
|
+
|
|
5
23
|
remove_externally_managed_marker()
|
|
6
24
|
{
|
|
7
25
|
"${python_interpreter}" -c '
|
|
@@ -26,13 +44,13 @@ install_ssh_keys()
|
|
|
26
44
|
echo "${ssh_private_key}" > "${ssh_private_key_path}"
|
|
27
45
|
|
|
28
46
|
# add public key to authorized_keys
|
|
29
|
-
|
|
47
|
+
authorized_keys_path="${HOME}/.ssh/authorized_keys"
|
|
30
48
|
|
|
31
49
|
# the existing file is overwritten to avoid conflicts (ex: RHEL on EC2 blocks root login)
|
|
32
|
-
cat "${public_key_path}" > "${
|
|
33
|
-
chmod 0600 "${
|
|
50
|
+
cat "${public_key_path}" > "${authorized_keys_path}"
|
|
51
|
+
chmod 0600 "${authorized_keys_path}"
|
|
34
52
|
|
|
35
|
-
# add localhost
|
|
53
|
+
# add localhost server keys to known_hosts
|
|
36
54
|
known_hosts_path="${HOME}/.ssh/known_hosts"
|
|
37
55
|
|
|
38
56
|
for key in /etc/ssh/ssh_host_*_key.pub; do
|
|
@@ -64,13 +82,13 @@ install_pip() {
|
|
|
64
82
|
;;
|
|
65
83
|
esac
|
|
66
84
|
|
|
85
|
+
retry_init
|
|
67
86
|
while true; do
|
|
68
87
|
curl --silent --show-error "${pip_bootstrap_url}" -o /tmp/get-pip.py && \
|
|
69
88
|
"${python_interpreter}" /tmp/get-pip.py --disable-pip-version-check --quiet && \
|
|
70
89
|
rm /tmp/get-pip.py \
|
|
71
90
|
&& break
|
|
72
|
-
|
|
73
|
-
sleep 10
|
|
91
|
+
retry_or_fail
|
|
74
92
|
done
|
|
75
93
|
fi
|
|
76
94
|
}
|
|
@@ -99,21 +117,21 @@ bootstrap_remote_alpine()
|
|
|
99
117
|
"
|
|
100
118
|
fi
|
|
101
119
|
|
|
120
|
+
retry_init
|
|
102
121
|
while true; do
|
|
103
122
|
# shellcheck disable=SC2086
|
|
104
123
|
apk add -q ${packages} \
|
|
105
124
|
&& break
|
|
106
|
-
|
|
107
|
-
sleep 10
|
|
125
|
+
retry_or_fail
|
|
108
126
|
done
|
|
109
127
|
|
|
110
128
|
# Upgrade the `libexpat` package to ensure that an upgraded Python (`pyexpat`) continues to work.
|
|
129
|
+
retry_init
|
|
111
130
|
while true; do
|
|
112
131
|
# shellcheck disable=SC2086
|
|
113
132
|
apk upgrade -q libexpat \
|
|
114
133
|
&& break
|
|
115
|
-
|
|
116
|
-
sleep 10
|
|
134
|
+
retry_or_fail
|
|
117
135
|
done
|
|
118
136
|
}
|
|
119
137
|
|
|
@@ -138,12 +156,12 @@ bootstrap_remote_fedora()
|
|
|
138
156
|
"
|
|
139
157
|
fi
|
|
140
158
|
|
|
159
|
+
retry_init
|
|
141
160
|
while true; do
|
|
142
161
|
# shellcheck disable=SC2086
|
|
143
162
|
dnf install -q -y ${packages} \
|
|
144
163
|
&& break
|
|
145
|
-
|
|
146
|
-
sleep 10
|
|
164
|
+
retry_or_fail
|
|
147
165
|
done
|
|
148
166
|
}
|
|
149
167
|
|
|
@@ -162,22 +180,14 @@ bootstrap_remote_freebsd()
|
|
|
162
180
|
if [ "${controller}" ]; then
|
|
163
181
|
jinja2_pkg="py${python_package_version}-jinja2"
|
|
164
182
|
cryptography_pkg="py${python_package_version}-cryptography"
|
|
165
|
-
pyyaml_pkg="py${python_package_version}-
|
|
183
|
+
pyyaml_pkg="py${python_package_version}-pyyaml"
|
|
166
184
|
packaging_pkg="py${python_package_version}-packaging"
|
|
167
185
|
|
|
168
186
|
# Declare platform/python version combinations which do not have supporting OS packages available.
|
|
169
187
|
# For these combinations ansible-test will use pip to install the requirements instead.
|
|
170
188
|
case "${platform_version}/${python_version}" in
|
|
171
|
-
13.
|
|
172
|
-
# defaults
|
|
173
|
-
;;
|
|
174
|
-
13.3/3.11)
|
|
175
|
-
jinja2_pkg="" # not available
|
|
176
|
-
cryptography_pkg="" # not available
|
|
177
|
-
pyyaml_pkg="" # not available
|
|
178
|
-
;;
|
|
179
|
-
14.1/3.9)
|
|
180
|
-
# defaults above 'just work'TM
|
|
189
|
+
13.5/3.11)
|
|
190
|
+
# defaults available
|
|
181
191
|
;;
|
|
182
192
|
14.1/3.11)
|
|
183
193
|
cryptography_pkg="" # not available
|
|
@@ -203,13 +213,13 @@ bootstrap_remote_freebsd()
|
|
|
203
213
|
"
|
|
204
214
|
fi
|
|
205
215
|
|
|
216
|
+
retry_init
|
|
206
217
|
while true; do
|
|
207
218
|
# shellcheck disable=SC2086
|
|
208
219
|
env ASSUME_ALWAYS_YES=YES pkg bootstrap && \
|
|
209
220
|
pkg install -q -y ${packages} \
|
|
210
221
|
&& break
|
|
211
|
-
|
|
212
|
-
sleep 10
|
|
222
|
+
retry_or_fail
|
|
213
223
|
done
|
|
214
224
|
|
|
215
225
|
install_pip
|
|
@@ -283,12 +293,12 @@ bootstrap_remote_rhel_9()
|
|
|
283
293
|
"
|
|
284
294
|
fi
|
|
285
295
|
|
|
296
|
+
retry_init
|
|
286
297
|
while true; do
|
|
287
298
|
# shellcheck disable=SC2086
|
|
288
299
|
dnf install -q -y ${packages} \
|
|
289
300
|
&& break
|
|
290
|
-
|
|
291
|
-
sleep 10
|
|
301
|
+
retry_or_fail
|
|
292
302
|
done
|
|
293
303
|
}
|
|
294
304
|
|
|
@@ -313,12 +323,12 @@ bootstrap_remote_rhel_10()
|
|
|
313
323
|
"
|
|
314
324
|
fi
|
|
315
325
|
|
|
326
|
+
retry_init
|
|
316
327
|
while true; do
|
|
317
328
|
# shellcheck disable=SC2086
|
|
318
329
|
dnf install -q -y ${packages} \
|
|
319
330
|
&& break
|
|
320
|
-
|
|
321
|
-
sleep 10
|
|
331
|
+
retry_or_fail
|
|
322
332
|
done
|
|
323
333
|
}
|
|
324
334
|
|
|
@@ -365,13 +375,13 @@ bootstrap_remote_ubuntu()
|
|
|
365
375
|
"
|
|
366
376
|
fi
|
|
367
377
|
|
|
378
|
+
retry_init
|
|
368
379
|
while true; do
|
|
369
380
|
# shellcheck disable=SC2086
|
|
370
381
|
apt-get update -qq -y && \
|
|
371
382
|
DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends ${packages} \
|
|
372
383
|
&& break
|
|
373
|
-
|
|
374
|
-
sleep 10
|
|
384
|
+
retry_or_fail
|
|
375
385
|
done
|
|
376
386
|
}
|
|
377
387
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/licenses/licenses/MIT-license.txt
RENAMED
|
File without changes
|
{ansible_core-2.18.7rc1.dist-info → ansible_core-2.18.8.dist-info}/licenses/licenses/PSF-license.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|