ansible-core 2.14.9__py3-none-any.whl → 2.14.10rc1__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/galaxy/role.py CHANGED
@@ -24,6 +24,7 @@ __metaclass__ = type
24
24
 
25
25
  import errno
26
26
  import datetime
27
+ import functools
27
28
  import os
28
29
  import tarfile
29
30
  import tempfile
@@ -45,6 +46,32 @@ from ansible.utils.display import Display
45
46
  display = Display()
46
47
 
47
48
 
49
+ @functools.cache
50
+ def _check_working_data_filter() -> bool:
51
+ """
52
+ Check if tarfile.data_filter implementation is working
53
+ for the current Python version or not
54
+ """
55
+
56
+ # Implemented the following code to circumvent broken implementation of data_filter
57
+ # in tarfile. See for more information - https://github.com/python/cpython/issues/107845
58
+ # deprecated: description='probing broken data filter implementation' python_version='3.11'
59
+ ret = False
60
+ if hasattr(tarfile, 'data_filter'):
61
+ # We explicitly check if tarfile.data_filter is broken or not
62
+ ti = tarfile.TarInfo('docs/README.md')
63
+ ti.type = tarfile.SYMTYPE
64
+ ti.linkname = '../README.md'
65
+
66
+ try:
67
+ tarfile.data_filter(ti, '/foo')
68
+ except tarfile.LinkOutsideDestinationError:
69
+ pass
70
+ else:
71
+ ret = True
72
+ return ret
73
+
74
+
48
75
  class GalaxyRole(object):
49
76
 
50
77
  SUPPORTED_SCMS = set(['git', 'hg'])
@@ -379,7 +406,12 @@ class GalaxyRole(object):
379
406
  if n_part != '..' and not n_part.startswith('~') and '$' not in n_part:
380
407
  n_final_parts.append(n_part)
381
408
  member.name = os.path.join(*n_final_parts)
382
- role_tar_file.extract(member, to_native(self.path))
409
+
410
+ if _check_working_data_filter():
411
+ # deprecated: description='extract fallback without filter' python_version='3.11'
412
+ role_tar_file.extract(member, to_native(self.path), filter='data') # type: ignore[call-arg]
413
+ else:
414
+ role_tar_file.extract(member, to_native(self.path))
383
415
 
384
416
  # write out the install info file for later use
385
417
  self._write_galaxy_install_info()
@@ -19,6 +19,6 @@
19
19
  from __future__ import (absolute_import, division, print_function)
20
20
  __metaclass__ = type
21
21
 
22
- __version__ = '2.14.9'
22
+ __version__ = '2.14.10rc1'
23
23
  __author__ = 'Ansible, Inc.'
24
24
  __codename__ = "C'mon Everybody"
@@ -2,7 +2,6 @@ using Microsoft.Win32.SafeHandles;
2
2
  using System;
3
3
  using System.Collections.Generic;
4
4
  using System.Linq;
5
- using System.Runtime.ConstrainedExecution;
6
5
  using System.Runtime.InteropServices;
7
6
  using System.Security.Principal;
8
7
  using System.Text;
@@ -123,7 +122,6 @@ namespace Ansible.AccessToken
123
122
  base.SetHandle(handle);
124
123
  }
125
124
 
126
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
127
125
  protected override bool ReleaseHandle()
128
126
  {
129
127
  Marshal.FreeHGlobal(handle);
@@ -247,7 +245,6 @@ namespace Ansible.AccessToken
247
245
  public SafeNativeHandle() : base(true) { }
248
246
  public SafeNativeHandle(IntPtr handle) : base(true) { this.handle = handle; }
249
247
 
250
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
251
248
  protected override bool ReleaseHandle()
252
249
  {
253
250
  return NativeMethods.CloseHandle(handle);
@@ -4,7 +4,6 @@ using System.Collections;
4
4
  using System.Collections.Generic;
5
5
  using System.IO;
6
6
  using System.Linq;
7
- using System.Runtime.ConstrainedExecution;
8
7
  using System.Runtime.InteropServices;
9
8
  using System.Security.AccessControl;
10
9
  using System.Security.Principal;
@@ -175,7 +174,6 @@ namespace Ansible.Become
175
174
  {
176
175
  public SafeLsaHandle() : base(true) { }
177
176
 
178
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
179
177
  protected override bool ReleaseHandle()
180
178
  {
181
179
  UInt32 res = NativeMethods.LsaDeregisterLogonProcess(handle);
@@ -187,7 +185,6 @@ namespace Ansible.Become
187
185
  {
188
186
  public SafeLsaMemoryBuffer() : base(true) { }
189
187
 
190
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
191
188
  protected override bool ReleaseHandle()
192
189
  {
193
190
  UInt32 res = NativeMethods.LsaFreeReturnBuffer(handle);
@@ -200,7 +197,6 @@ namespace Ansible.Become
200
197
  public NoopSafeHandle() : base(IntPtr.Zero, false) { }
201
198
  public override bool IsInvalid { get { return false; } }
202
199
 
203
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
204
200
  protected override bool ReleaseHandle() { return true; }
205
201
  }
206
202
 
@@ -3,7 +3,6 @@ using System;
3
3
  using System.Collections;
4
4
  using System.Collections.Generic;
5
5
  using System.Linq;
6
- using System.Runtime.ConstrainedExecution;
7
6
  using System.Runtime.InteropServices;
8
7
  using System.Security.Principal;
9
8
  using System.Text;
@@ -92,7 +91,6 @@ namespace Ansible.Privilege
92
91
  {
93
92
  base.SetHandle(handle);
94
93
  }
95
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
96
94
  protected override bool ReleaseHandle()
97
95
  {
98
96
  Marshal.FreeHGlobal(handle);
@@ -104,7 +102,7 @@ namespace Ansible.Privilege
104
102
  {
105
103
  public SafeNativeHandle() : base(true) { }
106
104
  public SafeNativeHandle(IntPtr handle) : base(true) { this.handle = handle; }
107
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
105
+
108
106
  protected override bool ReleaseHandle()
109
107
  {
110
108
  return NativeMethods.CloseHandle(handle);
@@ -3,7 +3,6 @@ using System;
3
3
  using System.Collections;
4
4
  using System.IO;
5
5
  using System.Linq;
6
- using System.Runtime.ConstrainedExecution;
7
6
  using System.Runtime.InteropServices;
8
7
  using System.Text;
9
8
  using System.Threading;
@@ -176,7 +175,6 @@ namespace Ansible.Process
176
175
  base.SetHandle(handle);
177
176
  }
178
177
 
179
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
180
178
  protected override bool ReleaseHandle()
181
179
  {
182
180
  Marshal.FreeHGlobal(handle);
ansible/release.py CHANGED
@@ -19,6 +19,6 @@
19
19
  from __future__ import (absolute_import, division, print_function)
20
20
  __metaclass__ = type
21
21
 
22
- __version__ = '2.14.9'
22
+ __version__ = '2.14.10rc1'
23
23
  __author__ = 'Ansible, Inc.'
24
24
  __codename__ = "C'mon Everybody"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ansible-core
3
- Version: 2.14.9
3
+ Version: 2.14.10rc1
4
4
  Summary: Radically simple IT automation
5
5
  Home-page: https://ansible.com/
6
6
  Author: Ansible, Inc.
@@ -3,7 +3,7 @@ ansible/__main__.py,sha256=IvyRvY64pT0on94qCLibxgDJ0-7_2CRoaZ5kfGOl54Q,1395
3
3
  ansible/constants.py,sha256=JLIDnuSz3_PbtXWsL4vnvVBbxlh3lSrJREd7T73atEI,8293
4
4
  ansible/context.py,sha256=OzSlaA_GgGRyyf5I209sy19_eGOX6HXn441W9w_FcvU,2018
5
5
  ansible/keyword_desc.yml,sha256=FYY0Ld1Xc3AxJ_Tefz78kRSYzIKGS8qcPtVk370J118,7367
6
- ansible/release.py,sha256=9gexUiLbBhar-q0V-1Urm9i8rwSwdkQ24jP95-kielM,919
6
+ ansible/release.py,sha256=mOZJwFGjsG1D63-CNecQy6BLWawSBGCS9uB4h6cPhGg,923
7
7
  ansible/_vendor/__init__.py,sha256=wJRKH7kI9OzYVY9hgSchOsTNTmTnugpPLGYj9Y5akX0,2086
8
8
  ansible/cli/__init__.py,sha256=yDt8_ny7HauC9Aj-MMHQr3Y6gDQADfdEU0O1BfzkSwA,27957
9
9
  ansible/cli/adhoc.py,sha256=pGW6eysaireovp4sVsUuntg-l1o7DSujuhxVhVC2zsM,8230
@@ -56,7 +56,7 @@ ansible/executor/process/__init__.py,sha256=1lMXN1i2fFqslda4BmeI5tpYMFP95D5Wpr1A
56
56
  ansible/executor/process/worker.py,sha256=mO9-GR7bDVxgDh65ROBhEBNg8qb9FWkkaP1vb_sklxY,8843
57
57
  ansible/galaxy/__init__.py,sha256=_ccTedn8dUGGtkmHcQLIkeje_YD0TYSXlvCl1AOY5fE,2533
58
58
  ansible/galaxy/api.py,sha256=deSYsFinaJodT2Y9-XnOerWIwYY8V2AWQ_9kZI0pWCE,39872
59
- ansible/galaxy/role.py,sha256=roEhuloz2-UHLdNwK7pqRCYsOLpu_Xg6sC_nyE5A30w,19086
59
+ ansible/galaxy/role.py,sha256=h5ttpZ0VYY1c43l1S1tk3VKdLDF95ZcQAi9HtWw77ds,20337
60
60
  ansible/galaxy/token.py,sha256=K0dAwD3Fjkn3Zs2N9sG98UesSWfAukie47QGyYpIf0M,6167
61
61
  ansible/galaxy/user_agent.py,sha256=x7cJzzpnTngHcwqSUd2hg0i28Dv0tbAyBdke5CSiNhM,813
62
62
  ansible/galaxy/collection/__init__.py,sha256=9te8ju-vLZa6_-M6LMmBhbOK02G-YrXt7w8I2hRHCTk,75811
@@ -139,7 +139,7 @@ ansible/inventory/host.py,sha256=wXJp6kpSaZtDr4JNsgdAuhi5MzQ9LTQzaAH10zoVbIA,505
139
139
  ansible/inventory/manager.py,sha256=tGwhBR6poLuG_i4jZ5RGOG-rH4gu4DBfT0-4iLLZZMs,29490
140
140
  ansible/module_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
141
  ansible/module_utils/_text.py,sha256=VCjTJovTxGfLahnzyrvOehpwTXLpRzMUug6wheirt4A,565
142
- ansible/module_utils/ansible_release.py,sha256=9gexUiLbBhar-q0V-1Urm9i8rwSwdkQ24jP95-kielM,919
142
+ ansible/module_utils/ansible_release.py,sha256=mOZJwFGjsG1D63-CNecQy6BLWawSBGCS9uB4h6cPhGg,923
143
143
  ansible/module_utils/api.py,sha256=BTo7stVOANbtd-ngZslaqx70r9t5gfvo44cKyu5SFjU,5837
144
144
  ansible/module_utils/basic.py,sha256=dGTJD-84x2a0hqKgoqB6PNhjmOEqYuuf2EgWyX5zVC8,86621
145
145
  ansible/module_utils/connection.py,sha256=XHxMlyAdwLiXDSo8jBMkV61-lz_0FDJUYH1B152UGJU,8430
@@ -179,11 +179,11 @@ ansible/module_utils/compat/selectors.py,sha256=XGwKJwg4SvRIzdsDZADNg4mWx5vWPUfW
179
179
  ansible/module_utils/compat/selinux.py,sha256=FDJE4H5flBECz6k11dI0BObuCZkhToAEcNrfBnw8aA8,3527
180
180
  ansible/module_utils/compat/typing.py,sha256=w8Yy7Rm5MtsgTFA6rVe0YTRSY3FaatZeLCyS-rAOokM,741
181
181
  ansible/module_utils/compat/version.py,sha256=UKmpFhMk-Y9vuYfgmaT5NYctS3WFU-Xn9ycEzl01Nlc,12787
182
- ansible/module_utils/csharp/Ansible.AccessToken.cs,sha256=bGKFk92EEiG4omGPdUk3YZ_GzrDhzn0mO5yu_qC2rVs,16066
182
+ ansible/module_utils/csharp/Ansible.AccessToken.cs,sha256=4HzIFQKGG3ZTg8tehVcM_ukMi057wxxLdYFZoqsij5I,15871
183
183
  ansible/module_utils/csharp/Ansible.Basic.cs,sha256=slTfWp_cpHuxlzjSQMT5VMqIBKg8XE0Ynsa_w0WoX7Q,77734
184
- ansible/module_utils/csharp/Ansible.Become.cs,sha256=py7VKd4XjFahf8blwX_Zj5pUvVVCA547SaGDCpMJfME,30728
185
- ansible/module_utils/csharp/Ansible.Privilege.cs,sha256=xdreXzRqhvp2kpGWVqFrDrnZozb_JANVVhH_7MDZ4fw,19592
186
- ansible/module_utils/csharp/Ansible.Process.cs,sha256=YTTK2LNwxlUa1Xdvf3KER71JFyrZSyrsrZtEX5vkoqo,19568
184
+ ansible/module_utils/csharp/Ansible.Become.cs,sha256=1yasfX8SpbcIWJWiobr2Ms-Hl5W47_XNSKvwMXOyiz4,30457
185
+ ansible/module_utils/csharp/Ansible.Privilege.cs,sha256=7e46na6k6ygdRwN53bzfIS8O-IwfM1TF_q5DeFH2Z80,19398
186
+ ansible/module_utils/csharp/Ansible.Process.cs,sha256=g6R2PkbxiVBry4bk35ieWwYCAZOi7RSeyKmtOW8j90I,19449
187
187
  ansible/module_utils/csharp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
188
  ansible/module_utils/distro/__init__.py,sha256=UCWityXk2h5DRRwBgcvk2bO9jNY2kXfy14PS7TH8KVc,2026
189
189
  ansible/module_utils/distro/_distro.py,sha256=q7IiQ1pJty1K9qz8s-Chj6h4Rr51XjEk_mfoxa9WU1A,49649
@@ -674,13 +674,13 @@ ansible/vars/hostvars.py,sha256=dg3jpVmNwSg8EJ4SIvYGT80uxMgRtrOW6vvtDfrQzDU,5152
674
674
  ansible/vars/manager.py,sha256=9d-9uD9x1X35QgLOZRyJtAxg3b1j4sp8Ivc5C78viOk,36178
675
675
  ansible/vars/plugins.py,sha256=B7L3fXoSOoBZSXqJ2ulk0adx1g5SpAb8BxyLGPNA7d4,4695
676
676
  ansible/vars/reserved.py,sha256=FBD7n2dnA0CW4I0J1LtWwk2hQqvGW0KTRPcxaRtMKWo,2615
677
- ansible_core-2.14.9.data/scripts/ansible-test,sha256=CYIYL99IxWdVTtDIj3avilIJXhGAmtjuKPPWNuLWuc8,1690
677
+ ansible_core-2.14.10rc1.data/scripts/ansible-test,sha256=CYIYL99IxWdVTtDIj3avilIJXhGAmtjuKPPWNuLWuc8,1690
678
678
  ansible_test/__init__.py,sha256=6e721yAyyyocRKzbCKtQXloAfFP7Aqv0L3zG70uh-4A,190
679
679
  ansible_test/_data/ansible.cfg,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
680
680
  ansible_test/_data/coveragerc,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
681
681
  ansible_test/_data/completion/docker.txt,sha256=q47NhD2sEadcFZ_eOi33MqUh_nJNUsnyUmCnkszIhuM,822
682
682
  ansible_test/_data/completion/network.txt,sha256=_-mi013-JeufshKMUmykkOmZPw1cVbakIMaAuweHet8,198
683
- ansible_test/_data/completion/remote.txt,sha256=JBHWPBrCwgL1p0fx9U28ba7F4KxQicjmQ6OaqRLvjZ4,1044
683
+ ansible_test/_data/completion/remote.txt,sha256=sdTc57I1_dyoHLlTk8aVKTLxBZIAe58TuKzadiNPVJc,1044
684
684
  ansible_test/_data/completion/windows.txt,sha256=k02uwXJ2i7cVHZnXS4HRFlvK5QU5BzAV291Cw53FlXA,226
685
685
  ansible_test/_data/playbooks/posix_coverage_setup.yml,sha256=PgQNVzVTsNmfnu0sT2SAYiWtkMSOppfmh0oVmAsb7TQ,594
686
686
  ansible_test/_data/playbooks/posix_coverage_teardown.yml,sha256=xHci5QllwJymFtig-hsOXm-Wdrxz063JH14aIyRXhyc,212
@@ -725,7 +725,7 @@ ansible_test/_data/requirements/sanity.yamllint.txt,sha256=dDer7Wd5rlNFaSct7NiYp
725
725
  ansible_test/_data/requirements/units.txt,sha256=ah91xwwRFeY_fpi0WdRGw9GqEiAjm9BbVbnwTrdzn2g,125
726
726
  ansible_test/_data/requirements/windows-integration.txt,sha256=jx9vvE8tX1-sColj5E2WuDs1sZvhuqUJnqBjheSbP4U,65
727
727
  ansible_test/_internal/__init__.py,sha256=Ov_4Oh-B08xt4PU_7M_fMkmG9X9gnseBo78x0hmXZ98,3156
728
- ansible_test/_internal/ansible_util.py,sha256=6qb5I6GIjxoITHXwUm0QX9X6Y8ZSaEe_NyHFRUMmI9Q,10274
728
+ ansible_test/_internal/ansible_util.py,sha256=LpKPawaZObpfyUJZ018U5S5nIbQiMSsbj3JGQrTcfcU,12417
729
729
  ansible_test/_internal/become.py,sha256=zvOlaWKA4L6Cp6Xe795FsTw9xlWUy5Q5TicOwHXjzaI,3071
730
730
  ansible_test/_internal/bootstrap.py,sha256=UbkB1ZJ-2bs7qtwRRBi5516IsBq0vZl-pUoyrgzdROQ,2471
731
731
  ansible_test/_internal/cache.py,sha256=3W_1s5xdXdm-6Mhgrk1bNlr_Nde-B4FDN00LN0hVbfk,1050
@@ -733,13 +733,13 @@ ansible_test/_internal/cgroup.py,sha256=-7oLhkGrfCey8tt_4WNkJjeFRceBRK6EJXOmsRNX
733
733
  ansible_test/_internal/completion.py,sha256=BJvhJ0d6PhBBn28YwZ63iGKtTh5TQw6R_uPNMAnpETo,11026
734
734
  ansible_test/_internal/config.py,sha256=LJkfQ0d6EjEgRWoovdxQX1AK3TRSx-H_Cx1lneNPCEc,12524
735
735
  ansible_test/_internal/connections.py,sha256=-gK9FqvmpsjENdYNkvWgFgqYHJSS_F2XkvQzH2_s86E,7855
736
- ansible_test/_internal/constants.py,sha256=ON2eUuS1im4EzNrvfST5KiFUtun_GN8YgNjm06MzGG0,1969
736
+ ansible_test/_internal/constants.py,sha256=djMgWI_xR1Yg6M9Au8dEtao6yTYIzeLA-Ctxb1sKnHg,2056
737
737
  ansible_test/_internal/containers.py,sha256=YLRUYuLTUT4pSl7L9T_X1CI3lS53lBQk7lHQUwm5rX4,35635
738
738
  ansible_test/_internal/content_config.py,sha256=pkhIu5lg-o8oWc7RBzuniYE-mBPyjnf400vpaO0gr08,5778
739
739
  ansible_test/_internal/core_ci.py,sha256=qkOcmYldBC4EX3wvql5G29O8whPRzyTM00eUTRH-6e0,17594
740
740
  ansible_test/_internal/coverage_util.py,sha256=iw45rwz8Q5u37S4_dABNR0-Ybc5F8YRiEpUEKJiyjQ8,9302
741
741
  ansible_test/_internal/data.py,sha256=OFDpRa47yqBqQO1aSvTZVQQpScHvBHsr861586MQEUI,11184
742
- ansible_test/_internal/delegation.py,sha256=elCTCtsBtauVy0rE15BMC1EgUyfY5f8qusjWODiKKvw,13413
742
+ ansible_test/_internal/delegation.py,sha256=xw9pjUmdGLT-xz5LdcH4s4EMDFHrMrZeMv60Rkj7iDc,13458
743
743
  ansible_test/_internal/diff.py,sha256=COo6OgC3zxwymhOTlMifLZsGc1RGL0iM_zFVyqFNK48,7300
744
744
  ansible_test/_internal/docker_util.py,sha256=LF4RrClcsDhg3UqrqgOztbeB_oWcsf1nc3W4DFacans,37675
745
745
  ansible_test/_internal/encoding.py,sha256=E61EfXbQw0uQoFhbN3SYx3Oy_1tAMCPAAvY9hkEcSSo,1367
@@ -763,7 +763,7 @@ ansible_test/_internal/target.py,sha256=Whtb_n0jn4zbiMmX7je5jewgzsRczfXRm_ndYtjT
763
763
  ansible_test/_internal/test.py,sha256=znQmGjKACqDU8T0EAPqcv2qyy0J7M2w4OmyYhwHLqT0,14515
764
764
  ansible_test/_internal/thread.py,sha256=WQoZ2q2ljmEkKHRDkIqwxW7eZbkCKDrG3YZfcaxHzHw,2596
765
765
  ansible_test/_internal/timeout.py,sha256=hT-LirImhAh1iCGIh8JpmECXsiGu6Zetw8BWl1iBIC8,4050
766
- ansible_test/_internal/util.py,sha256=Mp9_uyY3aqEGJFq0POzvELMoh_IhyIxYuf-FiGBfZIM,37809
766
+ ansible_test/_internal/util.py,sha256=KRb3EtwZ6_99cgIx36DqOlm5lvCC4ZrEq-OzQfSNt4A,37687
767
767
  ansible_test/_internal/util_common.py,sha256=JvKuI4Z_iTfBIA22zDFUgPWUuPbx64sbV6ACpKx5l3w,17281
768
768
  ansible_test/_internal/venv.py,sha256=DPHAt4tuoIdP7BOXa75-i4T7Paild8eGDsV2UUKOZ7U,9062
769
769
  ansible_test/_internal/ci/__init__.py,sha256=QOaC_8_wUzqFEbsFCXYAnElWoUo6gB40CXvP9RJ-Iyo,7738
@@ -854,7 +854,7 @@ ansible_test/_internal/commands/integration/cloud/vcenter.py,sha256=n4xTIk35GTbM
854
854
  ansible_test/_internal/commands/integration/cloud/vultr.py,sha256=TE43tKiAerXbKD9FXBrBVzeWNUB87qtR5twg_zDicHM,1488
855
855
  ansible_test/_internal/commands/sanity/__init__.py,sha256=D9xQCctCtPETZ2UH7ORUjeTcQkjzUXeRnq0paoa3Oho,50043
856
856
  ansible_test/_internal/commands/sanity/ansible_doc.py,sha256=nWFDAwPgNHp7KR5aNK1EVntxSnCEcFYo293ncYecoSY,4078
857
- ansible_test/_internal/commands/sanity/bin_symlinks.py,sha256=IAHze0HglLHnsUW4HowA8tmDzWGn4E8N5mnAi7hXPMI,3045
857
+ ansible_test/_internal/commands/sanity/bin_symlinks.py,sha256=uDiaMM3lf9KLlGTlGT53zYjgj6Fo-G-_dhJgFWnLS-o,3072
858
858
  ansible_test/_internal/commands/sanity/compile.py,sha256=ZQwHB85a7N6utr038kLbDZwFlXGEJMkSI63YyoGcd-I,2539
859
859
  ansible_test/_internal/commands/sanity/ignores.py,sha256=9wpzc8eRKS4nAVWOeSgXju5j1tDXNFPMSlskrR-Pohs,2789
860
860
  ansible_test/_internal/commands/sanity/import.py,sha256=C7GCC2AFmjZ96rllGCcZIxiy_pDYSG9vGJFWcsny484,7555
@@ -864,7 +864,7 @@ ansible_test/_internal/commands/sanity/pep8.py,sha256=SSulTIljaSu_exl93ZklKyuhbK
864
864
  ansible_test/_internal/commands/sanity/pslint.py,sha256=lVgL6RrDolRgIOJ2NRr04k2KVwMddZz1M7I-6h57vII,3210
865
865
  ansible_test/_internal/commands/sanity/pylint.py,sha256=8XxdckD4AVTkP8GamX6XaeGcMvYvf5yTgtUIN5d8aFk,10922
866
866
  ansible_test/_internal/commands/sanity/shellcheck.py,sha256=CZHNN_2iNVE3iqf5SIDSH9b2hwF6aXtJ0H6MPCEJX4s,3070
867
- ansible_test/_internal/commands/sanity/validate_modules.py,sha256=fLHdjSD0FhiSJXWFehhNdU0tLDXWxF2IvWG28vjUMBk,7686
867
+ ansible_test/_internal/commands/sanity/validate_modules.py,sha256=DYkPXXRu2-1lkX9xaXAOQxfDzHrl4qTYuH7saebHXi0,7968
868
868
  ansible_test/_internal/commands/sanity/yamllint.py,sha256=rF_L-QVWLfQ5HiOf_Q-6AMdk7orOJN_Bu8XyMfobRQ8,3423
869
869
  ansible_test/_internal/commands/shell/__init__.py,sha256=70rahKppL1gi3I22YWZCkVKO9UF8Muryr0REiilb6C0,4371
870
870
  ansible_test/_internal/commands/units/__init__.py,sha256=eDwwBQ87zWaVLRQbQ7GBC8P8TUcu28bhIAZqIjDk1fY,12686
@@ -971,7 +971,7 @@ ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py,sha256=Nr52Y
971
971
  ansible_test/_util/target/sanity/compile/compile.py,sha256=X1WHH2iLT4K8kyYJKlr-6AL6EAzKisL_hYrjvGrHCZ8,1637
972
972
  ansible_test/_util/target/sanity/import/importer.py,sha256=FNNKz2lSpxTNdfjLdvadzP3KryI4ut7gT03050gzDN8,25932
973
973
  ansible_test/_util/target/setup/ConfigureRemotingForAnsible.ps1,sha256=pW9YaaSNvhc_0ijjMfSMdoQkrmZNJ-Rb4xCL8m8t7yU,16693
974
- ansible_test/_util/target/setup/bootstrap.sh,sha256=wQv4J12j3_xoTHNB3oIWouK5bB_Y5RjXJUgDXS_3E-k,12951
974
+ ansible_test/_util/target/setup/bootstrap.sh,sha256=CPZvtpT8H7l2F2Th9kc85EseMm6evxsWPLCgfirBNSA,12994
975
975
  ansible_test/_util/target/setup/check_systemd_cgroup_v1.sh,sha256=Aq0T62x_KLtkGaWzYqWjvhchTqYFflrTbQET3h6xrT0,395
976
976
  ansible_test/_util/target/setup/probe_cgroups.py,sha256=ygqTkZc_YDH6EkZqp95rk_xkqsYcy_9IslPHKZO2A-8,712
977
977
  ansible_test/_util/target/setup/quiet_pip.py,sha256=k-EK8Ny7AcekGTejRFq0oV4YTVHaYUVpjfRLbKVApnc,3267
@@ -992,9 +992,9 @@ ansible_test/config/cloud-config-vultr.ini.template,sha256=yO2Xz76Ay3kbG54jX7y8-
992
992
  ansible_test/config/config.yml,sha256=wb3knoBmZewG3GWOMnRHoVPQWW4vPixKLPMNS6vJmTc,2620
993
993
  ansible_test/config/inventory.networking.template,sha256=vQ7x1-u5Q4Y5CqZU-7eMSEJOSCzAbPOL1rmK_AQOQuY,1262
994
994
  ansible_test/config/inventory.winrm.template,sha256=_M2i1B9RYfwSjwvgf3M-H_5Br5FO_kney_kMRPmoggk,1025
995
- ansible_core-2.14.9.dist-info/COPYING,sha256=CuBIWlvTemPmNgNZZBfk6w5lMzT6bH-TLKOg6F1K8ic,35148
996
- ansible_core-2.14.9.dist-info/METADATA,sha256=UxGfY1Ho8LT_n-DxLZuZ05YhkbyBK8GUvdYaFQM2VKc,6903
997
- ansible_core-2.14.9.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
998
- ansible_core-2.14.9.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
999
- ansible_core-2.14.9.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1000
- ansible_core-2.14.9.dist-info/RECORD,,
995
+ ansible_core-2.14.10rc1.dist-info/COPYING,sha256=CuBIWlvTemPmNgNZZBfk6w5lMzT6bH-TLKOg6F1K8ic,35148
996
+ ansible_core-2.14.10rc1.dist-info/METADATA,sha256=_ee2qH90LDuLlyGScCGH9lDHKEa8BKOupYPdAdTlPns,6907
997
+ ansible_core-2.14.10rc1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
998
+ ansible_core-2.14.10rc1.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
999
+ ansible_core-2.14.10rc1.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1000
+ ansible_core-2.14.10rc1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.1)
2
+ Generator: bdist_wheel (0.41.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -2,7 +2,7 @@ alpine/3.16 python=3.10 become=doas_sudo provider=aws arch=x86_64
2
2
  alpine become=doas_sudo provider=aws arch=x86_64
3
3
  fedora/36 python=3.10 become=sudo provider=aws arch=x86_64
4
4
  fedora become=sudo provider=aws arch=x86_64
5
- freebsd/12.3 python=3.8 python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
5
+ freebsd/12.4 python=3.9 python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
6
6
  freebsd/13.1 python=3.8,3.7,3.9,3.10 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/12.0 python=3.10 python_dir=/usr/local/bin become=sudo provider=parallels arch=x86_64
@@ -3,9 +3,11 @@ from __future__ import annotations
3
3
 
4
4
  import json
5
5
  import os
6
+ import shutil
6
7
  import typing as t
7
8
 
8
9
  from .constants import (
10
+ ANSIBLE_BIN_SYMLINK_MAP,
9
11
  SOFT_RLIMIT_NOFILE,
10
12
  )
11
13
 
@@ -17,12 +19,15 @@ from .util import (
17
19
  common_environment,
18
20
  ApplicationError,
19
21
  ANSIBLE_LIB_ROOT,
22
+ ANSIBLE_TEST_ROOT,
20
23
  ANSIBLE_TEST_DATA_ROOT,
21
- ANSIBLE_BIN_PATH,
24
+ ANSIBLE_ROOT,
22
25
  ANSIBLE_SOURCE_ROOT,
23
26
  ANSIBLE_TEST_TOOLS_ROOT,
27
+ MODE_FILE_EXECUTE,
24
28
  get_ansible_version,
25
29
  raw_command,
30
+ verified_chmod,
26
31
  )
27
32
 
28
33
  from .util_common import (
@@ -78,8 +83,10 @@ def ansible_environment(args: CommonConfig, color: bool = True, ansible_config:
78
83
  env = common_environment()
79
84
  path = env['PATH']
80
85
 
81
- if not path.startswith(ANSIBLE_BIN_PATH + os.path.pathsep):
82
- path = ANSIBLE_BIN_PATH + os.path.pathsep + path
86
+ ansible_bin_path = get_ansible_bin_path(args)
87
+
88
+ if not path.startswith(ansible_bin_path + os.path.pathsep):
89
+ path = ansible_bin_path + os.path.pathsep + path
83
90
 
84
91
  if not ansible_config:
85
92
  # use the default empty configuration unless one has been provided
@@ -196,6 +203,52 @@ def configure_plugin_paths(args: CommonConfig) -> dict[str, str]:
196
203
  return env
197
204
 
198
205
 
206
+ @mutex
207
+ def get_ansible_bin_path(args: CommonConfig) -> str:
208
+ """
209
+ Return a directory usable for PATH, containing only the ansible entry points.
210
+ If a temporary directory is required, it will be cached for the lifetime of the process and cleaned up at exit.
211
+ """
212
+ try:
213
+ return get_ansible_bin_path.bin_path # type: ignore[attr-defined]
214
+ except AttributeError:
215
+ pass
216
+
217
+ if ANSIBLE_SOURCE_ROOT:
218
+ # when running from source there is no need for a temporary directory since we already have known entry point scripts
219
+ bin_path = os.path.join(ANSIBLE_ROOT, 'bin')
220
+ else:
221
+ # when not running from source the installed entry points cannot be relied upon
222
+ # doing so would require using the interpreter specified by those entry points, which conflicts with using our interpreter and injector
223
+ # instead a temporary directory is created which contains only ansible entry points
224
+ # symbolic links cannot be used since the files are likely not executable
225
+ bin_path = create_temp_dir(prefix='ansible-test-', suffix='-bin')
226
+ bin_links = {os.path.join(bin_path, name): get_cli_path(path) for name, path in ANSIBLE_BIN_SYMLINK_MAP.items()}
227
+
228
+ if not args.explain:
229
+ for dst, src in bin_links.items():
230
+ shutil.copy(src, dst)
231
+ verified_chmod(dst, MODE_FILE_EXECUTE)
232
+
233
+ get_ansible_bin_path.bin_path = bin_path # type: ignore[attr-defined]
234
+
235
+ return bin_path
236
+
237
+
238
+ def get_cli_path(path: str) -> str:
239
+ """Return the absolute path to the CLI script from the given path which is relative to the `bin` directory of the original source tree layout."""
240
+ path_rewrite = {
241
+ '../lib/ansible/': ANSIBLE_LIB_ROOT,
242
+ '../test/lib/ansible_test/': ANSIBLE_TEST_ROOT,
243
+ }
244
+
245
+ for prefix, destination in path_rewrite.items():
246
+ if path.startswith(prefix):
247
+ return os.path.join(destination, path[len(prefix):])
248
+
249
+ raise RuntimeError(path)
250
+
251
+
199
252
  @mutex
200
253
  def get_ansible_python_path(args: CommonConfig) -> str:
201
254
  """
@@ -32,7 +32,7 @@ from ...payload import (
32
32
  )
33
33
 
34
34
  from ...util import (
35
- ANSIBLE_BIN_PATH,
35
+ ANSIBLE_SOURCE_ROOT,
36
36
  )
37
37
 
38
38
 
@@ -52,7 +52,7 @@ class BinSymlinksTest(SanityVersionNeutral):
52
52
  return True
53
53
 
54
54
  def test(self, args: SanityConfig, targets: SanityTargets) -> TestResult:
55
- bin_root = ANSIBLE_BIN_PATH
55
+ bin_root = os.path.join(ANSIBLE_SOURCE_ROOT, 'bin')
56
56
  bin_names = os.listdir(bin_root)
57
57
  bin_paths = sorted(os.path.join(bin_root, path) for path in bin_names)
58
58
 
@@ -154,7 +154,11 @@ class ValidateModulesTest(SanitySingleVersion):
154
154
  temp_dir = process_scoped_temporary_directory(args)
155
155
 
156
156
  with tarfile.open(path) as file:
157
- file.extractall(temp_dir)
157
+ # deprecated: description='extractall fallback without filter' python_version='3.11'
158
+ if hasattr(tarfile, 'data_filter'):
159
+ file.extractall(temp_dir, filter='data') # type: ignore[call-arg]
160
+ else:
161
+ file.extractall(temp_dir)
158
162
 
159
163
  cmd.extend([
160
164
  '--original-plugins', temp_dir,
@@ -33,6 +33,7 @@ SECCOMP_CHOICES = [
33
33
  # This bin symlink map must exactly match the contents of the bin directory.
34
34
  # It is necessary for payload creation to reconstruct the bin directory when running ansible-test from an installed version of ansible.
35
35
  # It is also used to construct the injector directory at runtime.
36
+ # It is also used to construct entry points when not running ansible-test from source.
36
37
  ANSIBLE_BIN_SYMLINK_MAP = {
37
38
  'ansible': '../lib/ansible/cli/adhoc.py',
38
39
  'ansible-config': '../lib/ansible/cli/config.py',
@@ -33,7 +33,6 @@ from .util import (
33
33
  SubprocessError,
34
34
  display,
35
35
  filter_args,
36
- ANSIBLE_BIN_PATH,
37
36
  ANSIBLE_LIB_ROOT,
38
37
  ANSIBLE_TEST_ROOT,
39
38
  OutputStream,
@@ -44,6 +43,10 @@ from .util_common import (
44
43
  process_scoped_temporary_directory,
45
44
  )
46
45
 
46
+ from .ansible_util import (
47
+ get_ansible_bin_path,
48
+ )
49
+
47
50
  from .containers import (
48
51
  support_container_context,
49
52
  ContainerDatabase,
@@ -145,7 +148,7 @@ def delegate_command(args: EnvironmentConfig, host_state: HostState, exclude: li
145
148
  con.extract_archive(chdir=working_directory, src=payload_file)
146
149
  else:
147
150
  content_root = working_directory
148
- ansible_bin_path = ANSIBLE_BIN_PATH
151
+ ansible_bin_path = get_ansible_bin_path(args)
149
152
 
150
153
  command = generate_command(args, host_state.controller_profile.python, ansible_bin_path, content_root, exclude, require)
151
154
 
@@ -74,14 +74,12 @@ ANSIBLE_TEST_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
74
74
 
75
75
  # assume running from install
76
76
  ANSIBLE_ROOT = os.path.dirname(ANSIBLE_TEST_ROOT)
77
- ANSIBLE_BIN_PATH = os.path.dirname(os.path.abspath(sys.argv[0]))
78
77
  ANSIBLE_LIB_ROOT = os.path.join(ANSIBLE_ROOT, 'ansible')
79
78
  ANSIBLE_SOURCE_ROOT = None
80
79
 
81
80
  if not os.path.exists(ANSIBLE_LIB_ROOT):
82
81
  # running from source
83
82
  ANSIBLE_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(ANSIBLE_TEST_ROOT)))
84
- ANSIBLE_BIN_PATH = os.path.join(ANSIBLE_ROOT, 'bin')
85
83
  ANSIBLE_LIB_ROOT = os.path.join(ANSIBLE_ROOT, 'lib', 'ansible')
86
84
  ANSIBLE_SOURCE_ROOT = ANSIBLE_ROOT
87
85
 
@@ -163,6 +163,8 @@ bootstrap_remote_freebsd()
163
163
  # Declare platform/python version combinations which do not have supporting OS packages available.
164
164
  # For these combinations ansible-test will use pip to install the requirements instead.
165
165
  case "${platform_version}/${python_version}" in
166
+ "12.4/3.9")
167
+ ;;
166
168
  *)
167
169
  jinja2_pkg="" # not available
168
170
  cryptography_pkg="" # not available