summaryrefslogtreecommitdiffstats
path: root/recipes-devtools/python
diff options
context:
space:
mode:
authorNarpat Mali <narpat.mali@windriver.com>2023-11-06 14:51:05 +0000
committerBruce Ashfield <bruce.ashfield@gmail.com>2023-11-07 01:45:35 +0000
commit9d53be339b792fec2d05e17343d7b15d4331b6ca (patch)
treef2db9f04baa47c70103a61b1c4d2c86ab562be08 /recipes-devtools/python
parent64243dfa700653faecb68b75459503ccf566bbd7 (diff)
downloadmeta-cloud-services-9d53be339b792fec2d05e17343d7b15d4331b6ca.tar.gz
python3-ansible: Upgrade to 2.14.11
This upgrade incorporates the CVE-2023-5115 fix and other bug fixes. Release Notes: https://github.com/ansible/ansible/blob/v2.14.11/changelogs/CHANGELOG-v2.14.rst#v2-14-11 Rebase the patch python3-ensure-py-scripts-use-py3-for-shebang.patch to new version. Reference upstream master commit: https://git.yoctoproject.org/meta-cloud-services/commit/?id=7ecb54163f6252cfbecfd9f7f363536c88dbb58a Signed-off-by: Mingli Yu <mingli.yu@windriver.com> Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com> Signed-off-by: Narpat Mali <narpat.mali@windriver.com> Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
Diffstat (limited to 'recipes-devtools/python')
-rw-r--r--recipes-devtools/python/python-ansible.inc8
-rw-r--r--recipes-devtools/python/python3-ansible/python3-ensure-py-scripts-use-py3-for-shebang.patch1427
-rw-r--r--recipes-devtools/python/python3-ansible_2.14.11.bb (renamed from recipes-devtools/python/python3-ansible_2.3.1.0.bb)0
3 files changed, 482 insertions, 953 deletions
diff --git a/recipes-devtools/python/python-ansible.inc b/recipes-devtools/python/python-ansible.inc
index 0bb663a..c31d10e 100644
--- a/recipes-devtools/python/python-ansible.inc
+++ b/recipes-devtools/python/python-ansible.inc
@@ -6,13 +6,11 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
6 6
7SRCNAME = "ansible" 7SRCNAME = "ansible"
8 8
9SRC_URI = "http://releases.ansible.com/ansible/${SRCNAME}-${PV}.tar.gz" 9SRC_URI = "git://github.com/ansible/ansible.git;protocol=https;branch=stable-2.14"
10 10
11SRC_URI[md5sum] = "b1be8f05864a07c06b8a767dcd48ba1b" 11SRCREV = "dcdb718f7a4c03f174030db425eee2a551ab2698"
12SRC_URI[sha256sum] = "cd4b8f53720fcd0c351156b840fdd15ecfbec22c951b5406ec503de49d40b9f5"
13 12
14 13S = "${WORKDIR}/git"
15S = "${WORKDIR}/${SRCNAME}-${PV}"
16 14
17ANSIBLE_WHITELIST_MODULES ?= "commands files system network/ovs __pycache__ service" 15ANSIBLE_WHITELIST_MODULES ?= "commands files system network/ovs __pycache__ service"
18 16
diff --git a/recipes-devtools/python/python3-ansible/python3-ensure-py-scripts-use-py3-for-shebang.patch b/recipes-devtools/python/python3-ansible/python3-ensure-py-scripts-use-py3-for-shebang.patch
index e98eb46..67142fc 100644
--- a/recipes-devtools/python/python3-ansible/python3-ensure-py-scripts-use-py3-for-shebang.patch
+++ b/recipes-devtools/python/python3-ansible/python3-ensure-py-scripts-use-py3-for-shebang.patch
@@ -1,799 +1,581 @@
1From 66b824da2fadfd5760040be244f89fa8320df55b Mon Sep 17 00:00:00 2001 1From 5f7c3d72eec080b2e1c34565babfd53528fc4770 Mon Sep 17 00:00:00 2001
2From: Mark Asselstine <mark.asselstine@windriver.com> 2From: Mark Asselstine <mark.asselstine@windriver.com>
3Date: Thu, 13 Jul 2017 14:11:46 -0400 3Date: Thu, 11 May 2023 17:05:54 +0800
4Subject: [PATCH] python3: ensure py scripts use py3 for shebang 4Subject: [PATCH] python3: ensure py scripts use py3 for shebang
5 5
6Upstream-Status: Pending
7
6Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> 8Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
9
10Rebase to 2.14.11
11Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
12Signed-off-by: Narpat Mali <narpat.mali@windriver.com>
7--- 13---
8 bin/ansible | 2 +- 14 .azure-pipelines/scripts/combine-coverage.py | 2 +-
9 bin/ansible-connection | 2 +- 15 .azure-pipelines/scripts/publish-codecov.py | 2 +-
10 bin/ansible-console | 2 +- 16 .azure-pipelines/scripts/time-command.py | 2 +-
11 bin/ansible-doc | 2 +- 17 hacking/ansible-profile | 2 +-
12 bin/ansible-galaxy | 2 +- 18 hacking/azp/download.py | 2 +-
13 bin/ansible-playbook | 2 +- 19 hacking/azp/get_recent_coverage_runs.py | 2 +-
14 bin/ansible-pull | 2 +- 20 hacking/azp/incidental.py | 2 +-
15 bin/ansible-vault | 2 +- 21 hacking/azp/run.py | 2 +-
16 contrib/inventory/abiquo.py | 2 +- 22 hacking/backport/backport_of_line_adder.py | 2 +-
17 contrib/inventory/apache-libcloud.py | 2 +- 23 hacking/create_deprecation_bug_reports.py | 2 +-
18 contrib/inventory/apstra_aos.py | 2 +- 24 hacking/fix_test_syntax.py | 2 +-
19 contrib/inventory/azure_rm.py | 2 +- 25 hacking/get_library.py | 2 +-
20 contrib/inventory/brook.py | 2 +- 26 hacking/report.py | 2 +-
21 contrib/inventory/cloudforms.py | 2 +- 27 hacking/return_skeleton_generator.py | 2 +-
22 contrib/inventory/cloudstack.py | 2 +- 28 hacking/test-module.py | 2 +-
23 contrib/inventory/cobbler.py | 2 +- 29 hacking/tests/gen_distribution_version_testcase.py | 2 +-
24 contrib/inventory/collins.py | 2 +- 30 hacking/update-sanity-requirements.py | 2 +-
25 contrib/inventory/consul_io.py | 2 +- 31 lib/ansible/cli/adhoc.py | 2 +-
26 contrib/inventory/digital_ocean.py | 2 +- 32 lib/ansible/cli/config.py | 2 +-
27 contrib/inventory/docker.py | 2 +- 33 lib/ansible/cli/console.py | 2 +-
28 contrib/inventory/ec2.py | 2 +- 34 lib/ansible/cli/doc.py | 2 +-
29 contrib/inventory/fleet.py | 2 +- 35 lib/ansible/cli/galaxy.py | 2 +-
30 contrib/inventory/foreman.py | 2 +- 36 lib/ansible/cli/inventory.py | 2 +-
31 contrib/inventory/freeipa.py | 2 +- 37 lib/ansible/cli/playbook.py | 2 +-
32 contrib/inventory/gce.py | 2 +- 38 lib/ansible/cli/pull.py | 2 +-
33 contrib/inventory/jail.py | 2 +- 39 lib/ansible/cli/scripts/ansible_connection_cli_stub.py | 2 +-
34 contrib/inventory/landscape.py | 2 +- 40 lib/ansible/cli/vault.py | 2 +-
35 contrib/inventory/libvirt_lxc.py | 2 +- 41 packaging/cli-doc/build.py | 2 +-
36 contrib/inventory/linode.py | 2 +- 42 packaging/release.py | 2 +-
37 contrib/inventory/lxc_inventory.py | 2 +- 43 .../targets/ansible-galaxy-collection/files/build_bad_tar.py | 2 +-
38 contrib/inventory/mdt_dynamic_inventory.py | 2 +- 44 .../targets/ansible-galaxy-role/files/create-role-archive.py | 2 +-
39 contrib/inventory/nagios_livestatus.py | 2 +- 45 test/integration/targets/ansible-test-container/runme.py | 2 +-
40 contrib/inventory/nagios_ndo.py | 2 +- 46 .../targets/ansible-test-integration-targets/test.py | 2 +-
41 contrib/inventory/nova.py | 2 +- 47 .../ansible_collections/ns/col/run-with-pty.py | 2 +-
42 contrib/inventory/nsot.py | 2 +- 48 .../ns/col/tests/integration/targets/no-tty/assert-no-tty.py | 2 +-
43 contrib/inventory/openshift.py | 2 +- 49 .../ansible_collections/ns/col/scripts/env_python.py | 2 +-
44 contrib/inventory/openstack.py | 2 +- 50 .../ns/col/tests/integration/targets/valid/env_python.py | 2 +-
45 contrib/inventory/openvz.py | 2 +- 51 test/integration/targets/ansible-test/venv-pythons.py | 2 +-
46 contrib/inventory/ovirt.py | 2 +- 52 test/integration/targets/ansible-vault/faux-editor.py | 2 +-
47 contrib/inventory/ovirt4.py | 2 +- 53 test/integration/targets/ansible-vault/password-script.py | 2 +-
48 contrib/inventory/packet_net.py | 2 +- 54 test/integration/targets/ansible-vault/test-vault-client.py | 2 +-
49 contrib/inventory/proxmox.py | 2 +- 55 .../targets/builtin_vars_prompt/test-vars_prompt.py | 2 +-
50 contrib/inventory/rackhd.py | 2 +- 56 test/integration/targets/cli/test-cli.py | 2 +-
51 contrib/inventory/rax.py | 2 +- 57 test/integration/targets/cli/test_k_and_K.py | 2 +-
52 contrib/inventory/rhv.py | 2 +- 58 test/integration/targets/collection/update-ignore.py | 2 +-
53 contrib/inventory/rudder.py | 2 +- 59 test/integration/targets/debugger/test_run_once.py | 2 +-
54 contrib/inventory/serf.py | 2 +- 60 test/integration/targets/fork_safe_stdio/run-with-pty.py | 2 +-
55 contrib/inventory/softlayer.py | 2 +- 61 test/integration/targets/gathering/uuid.fact | 2 +-
56 contrib/inventory/spacewalk.py | 2 +- 62 test/integration/targets/gathering_facts/uuid.fact | 2 +-
57 contrib/inventory/ssh_config.py | 2 +- 63 test/integration/targets/group/files/gidget.py | 2 +-
58 contrib/inventory/stacki.py | 2 +- 64 test/integration/targets/module_utils/module_utils/foo.py | 2 +-
59 contrib/inventory/vagrant.py | 2 +- 65 test/integration/targets/module_utils/module_utils/sub/bam.py | 2 +-
60 contrib/inventory/vbox.py | 2 +- 66 .../targets/module_utils/module_utils/sub/bam/bam.py | 2 +-
61 contrib/inventory/vmware.py | 2 +- 67 .../targets/module_utils/module_utils/sub/bar/bam.py | 2 +-
62 contrib/inventory/vmware_inventory.py | 2 +- 68 .../targets/module_utils/module_utils/sub/bar/bar.py | 2 +-
63 contrib/inventory/windows_azure.py | 2 +- 69 test/integration/targets/packaging_cli-doc/verify.py | 2 +-
64 contrib/inventory/zabbix.py | 2 +- 70 test/integration/targets/pause/test-pause.py | 2 +-
65 contrib/inventory/zone.py | 2 +- 71 test/integration/targets/pip/files/setup.py | 2 +-
66 docs/docsite/rst/dev_guide/developing_api.rst | 2 +- 72 .../integration/targets/service/files/ansible_test_service.py | 2 +-
67 hacking/dump_playbook_attributes.py | 2 +- 73 .../targets/service_facts/files/ansible_test_service.py | 2 +-
68 hacking/module_formatter.py | 2 +- 74 .../targets/template/role_filter/filter_plugins/myplugin.py | 2 +-
69 lib/ansible/modules/web_infrastructure/django_manage.py | 2 +- 75 test/integration/targets/throttle/test_throttle.py | 2 +-
70 lib/ansible/modules/windows/win_file_version.py | 2 +- 76 .../targets/var_precedence/ansible-var-precedence-check.py | 2 +-
71 lib/ansible/modules/windows/win_firewall_rule.py | 2 +- 77 test/lib/ansible_test/_internal/util_common.py | 2 +-
72 test/compile/compile.py | 2 +- 78 .../_util/controller/sanity/code-smell/shebang.py | 4 ++--
73 test/integration/cleanup_rax.py | 2 +- 79 .../ansible_test/_util/target/cli/ansible_test_cli_stub.py | 2 +-
74 .../targets/embedded_module/library/test_integration_module | 2 +- 80 test/units/executor/module_common/test_module_common.py | 4 ++--
75 test/integration/targets/module_utils/module_utils/foo.py | 2 +- 81 67 files changed, 69 insertions(+), 69 deletions(-)
76 test/integration/targets/module_utils/module_utils/sub/bam.py | 2 +-
77 test/integration/targets/module_utils/module_utils/sub/bam/bam.py | 2 +-
78 test/integration/targets/module_utils/module_utils/sub/bar/bam.py | 2 +-
79 test/integration/targets/module_utils/module_utils/sub/bar/bar.py | 2 +-
80 test/integration/targets/service/files/ansible_test_service | 2 +-
81 test/runner/ansible-test | 2 +-
82 test/runner/injector/ansible | 2 +-
83 test/runner/injector/ansible-console | 2 +-
84 test/runner/injector/ansible-doc | 2 +-
85 test/runner/injector/ansible-galaxy | 2 +-
86 test/runner/injector/ansible-playbook | 2 +-
87 test/runner/injector/ansible-pull | 2 +-
88 test/runner/injector/ansible-vault | 2 +-
89 test/runner/injector/cover | 2 +-
90 test/runner/injector/cover2 | 2 +-
91 test/runner/injector/cover2.4 | 2 +-
92 test/runner/injector/cover2.6 | 2 +-
93 test/runner/injector/cover2.7 | 2 +-
94 test/runner/injector/cover3 | 2 +-
95 test/runner/injector/cover3.5 | 2 +-
96 test/runner/injector/cover3.6 | 2 +-
97 test/runner/injector/injector.py | 2 +-
98 test/runner/injector/pytest | 2 +-
99 test/runner/injector/runner | 2 +-
100 test/runner/injector/runner2 | 2 +-
101 test/runner/injector/runner2.4 | 2 +-
102 test/runner/injector/runner2.6 | 2 +-
103 test/runner/injector/runner2.7 | 2 +-
104 test/runner/injector/runner3 | 2 +-
105 test/runner/injector/runner3.5 | 2 +-
106 test/runner/injector/runner3.6 | 2 +-
107 test/runner/retry.py | 2 +-
108 test/runner/test.py | 2 +-
109 test/sanity/code-smell/ansible-var-precedence-check.py | 2 +-
110 test/sanity/code-smell/integration-aliases.py | 2 +-
111 test/sanity/code-smell/shebang.sh | 4 ++--
112 test/sanity/validate-modules/test_validate_modules_regex.py | 2 +-
113 test/sanity/validate-modules/validate-modules | 2 +-
114 test/units/executor/module_common/test_module_common.py | 4 ++--
115 test/units/modules/network/nxos/test_nxos_config.py | 2 +-
116 test/utils/shippable/ansible-core-ci | 2 +-
117 test/utils/shippable/download.py | 2 +-
118 121 files changed, 123 insertions(+), 123 deletions(-)
119 82
120diff --git a/bin/ansible b/bin/ansible 83diff --git a/.azure-pipelines/scripts/combine-coverage.py b/.azure-pipelines/scripts/combine-coverage.py
121index 24550b9..0587499 100755 84index 506ade6460..15bee40234 100755
122--- a/bin/ansible 85--- a/.azure-pipelines/scripts/combine-coverage.py
123+++ b/bin/ansible 86+++ b/.azure-pipelines/scripts/combine-coverage.py
124@@ -1,4 +1,4 @@
125-#!/usr/bin/env python
126+#!/usr/bin/env python3
127
128 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
129 #
130diff --git a/bin/ansible-connection b/bin/ansible-connection
131index 93d787e..f0b9aa3 100755
132--- a/bin/ansible-connection
133+++ b/bin/ansible-connection
134@@ -1,4 +1,4 @@
135-#!/usr/bin/env python
136+#!/usr/bin/env python3
137
138 # (c) 2016, Ansible, Inc. <support@ansible.com>
139 #
140diff --git a/bin/ansible-console b/bin/ansible-console
141index 24550b9..0587499 100755
142--- a/bin/ansible-console
143+++ b/bin/ansible-console
144@@ -1,4 +1,4 @@ 87@@ -1,4 +1,4 @@
145-#!/usr/bin/env python 88-#!/usr/bin/env python
146+#!/usr/bin/env python3 89+#!/usr/bin/env python3
147 90 """
148 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com> 91 Combine coverage data from multiple jobs, keeping the data only from the most recent attempt from each job.
149 # 92 Coverage artifacts must be named using the format: "Coverage $(System.JobAttempt) {StableUniqueNameForEachJob}"
150diff --git a/bin/ansible-doc b/bin/ansible-doc 93diff --git a/.azure-pipelines/scripts/publish-codecov.py b/.azure-pipelines/scripts/publish-codecov.py
151index 24550b9..0587499 100755 94index f2bc4b84b3..01ad32f494 100755
152--- a/bin/ansible-doc 95--- a/.azure-pipelines/scripts/publish-codecov.py
153+++ b/bin/ansible-doc 96+++ b/.azure-pipelines/scripts/publish-codecov.py
154@@ -1,4 +1,4 @@ 97@@ -1,4 +1,4 @@
155-#!/usr/bin/env python 98-#!/usr/bin/env python
156+#!/usr/bin/env python3 99+#!/usr/bin/env python3
157 100 """
158 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com> 101 Upload code coverage reports to codecov.io.
159 # 102 Multiple coverage files from multiple languages are accepted and aggregated after upload.
160diff --git a/bin/ansible-galaxy b/bin/ansible-galaxy 103diff --git a/.azure-pipelines/scripts/time-command.py b/.azure-pipelines/scripts/time-command.py
161index 24550b9..0587499 100755 104index 5e8eb8d4c8..5450c48900 100755
162--- a/bin/ansible-galaxy 105--- a/.azure-pipelines/scripts/time-command.py
163+++ b/bin/ansible-galaxy 106+++ b/.azure-pipelines/scripts/time-command.py
164@@ -1,4 +1,4 @@ 107@@ -1,4 +1,4 @@
165-#!/usr/bin/env python 108-#!/usr/bin/env python
166+#!/usr/bin/env python3 109+#!/usr/bin/env python3
110 """Prepends a relative timestamp to each input line from stdin and writes it to stdout."""
167 111
168 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com> 112 from __future__ import (absolute_import, division, print_function)
169 # 113diff --git a/hacking/ansible-profile b/hacking/ansible-profile
170diff --git a/bin/ansible-playbook b/bin/ansible-playbook 114index 6612402da6..d67526a161 100755
171index 24550b9..0587499 100755 115--- a/hacking/ansible-profile
172--- a/bin/ansible-playbook 116+++ b/hacking/ansible-profile
173+++ b/bin/ansible-playbook
174@@ -1,4 +1,4 @@ 117@@ -1,4 +1,4 @@
175-#!/usr/bin/env python 118-#!/usr/bin/env python
176+#!/usr/bin/env python3 119+#!/usr/bin/env python3
120 from __future__ import (absolute_import, division, print_function)
121 __metaclass__ = type
177 122
178 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com> 123diff --git a/hacking/azp/download.py b/hacking/azp/download.py
179 # 124index 117e9da5b7..89466cb17b 100755
180diff --git a/bin/ansible-pull b/bin/ansible-pull 125--- a/hacking/azp/download.py
181index 24550b9..0587499 100755 126+++ b/hacking/azp/download.py
182--- a/bin/ansible-pull
183+++ b/bin/ansible-pull
184@@ -1,4 +1,4 @@ 127@@ -1,4 +1,4 @@
185-#!/usr/bin/env python 128-#!/usr/bin/env python
186+#!/usr/bin/env python3 129+#!/usr/bin/env python3
130 # PYTHON_ARGCOMPLETE_OK
187 131
188 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com> 132 # (c) 2016 Red Hat, Inc.
189 # 133diff --git a/hacking/azp/get_recent_coverage_runs.py b/hacking/azp/get_recent_coverage_runs.py
190diff --git a/bin/ansible-vault b/bin/ansible-vault 134index 25e2fa8120..9b0d9b972e 100755
191index 24550b9..0587499 100755 135--- a/hacking/azp/get_recent_coverage_runs.py
192--- a/bin/ansible-vault 136+++ b/hacking/azp/get_recent_coverage_runs.py
193+++ b/bin/ansible-vault
194@@ -1,4 +1,4 @@ 137@@ -1,4 +1,4 @@
195-#!/usr/bin/env python 138-#!/usr/bin/env python
196+#!/usr/bin/env python3 139+#!/usr/bin/env python3
197 140
198 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com> 141 # (c) 2020 Red Hat, Inc.
199 # 142 #
200diff --git a/contrib/inventory/abiquo.py b/contrib/inventory/abiquo.py 143diff --git a/hacking/azp/incidental.py b/hacking/azp/incidental.py
201index 405bbbb..d318949 100755 144index 87d4d213c9..7660e2ed22 100755
202--- a/contrib/inventory/abiquo.py 145--- a/hacking/azp/incidental.py
203+++ b/contrib/inventory/abiquo.py 146+++ b/hacking/azp/incidental.py
204@@ -1,4 +1,4 @@ 147@@ -1,4 +1,4 @@
205-#!/usr/bin/env python 148-#!/usr/bin/env python
206+#!/usr/bin/env python3 149+#!/usr/bin/env python3
207 # -*- coding: utf-8 -*- 150 # PYTHON_ARGCOMPLETE_OK
208 151
209 ''' 152 # (c) 2020 Red Hat, Inc.
210diff --git a/contrib/inventory/apache-libcloud.py b/contrib/inventory/apache-libcloud.py 153diff --git a/hacking/azp/run.py b/hacking/azp/run.py
211index 0120d2b..ce92843 100755 154index 00a177944f..591e6bcc4f 100755
212--- a/contrib/inventory/apache-libcloud.py 155--- a/hacking/azp/run.py
213+++ b/contrib/inventory/apache-libcloud.py 156+++ b/hacking/azp/run.py
214@@ -1,4 +1,4 @@ 157@@ -1,4 +1,4 @@
215-#!/usr/bin/env python 158-#!/usr/bin/env python
216+#!/usr/bin/env python3 159+#!/usr/bin/env python3
160 # PYTHON_ARGCOMPLETE_OK
217 161
218 # (c) 2013, Sebastien Goasguen <runseb@gmail.com> 162 # (c) 2016 Red Hat, Inc.
219 # 163diff --git a/hacking/backport/backport_of_line_adder.py b/hacking/backport/backport_of_line_adder.py
220diff --git a/contrib/inventory/apstra_aos.py b/contrib/inventory/apstra_aos.py 164index ef77ddcf40..bbec15de6a 100755
221index 65838c0..48d293e 100755 165--- a/hacking/backport/backport_of_line_adder.py
222--- a/contrib/inventory/apstra_aos.py 166+++ b/hacking/backport/backport_of_line_adder.py
223+++ b/contrib/inventory/apstra_aos.py
224@@ -1,4 +1,4 @@
225-#!/usr/bin/env python
226+#!/usr/bin/env python3
227 #
228 # (c) 2017 Apstra Inc, <community@apstra.com>
229 #
230diff --git a/contrib/inventory/azure_rm.py b/contrib/inventory/azure_rm.py
231index 73b8b95..87b31b0 100755
232--- a/contrib/inventory/azure_rm.py
233+++ b/contrib/inventory/azure_rm.py
234@@ -1,4 +1,4 @@
235-#!/usr/bin/env python
236+#!/usr/bin/env python3
237 #
238 # Copyright (c) 2016 Matt Davis, <mdavis@ansible.com>
239 # Chris Houseknecht, <house@redhat.com>
240diff --git a/contrib/inventory/brook.py b/contrib/inventory/brook.py
241index a7d4741..e4de982 100755
242--- a/contrib/inventory/brook.py
243+++ b/contrib/inventory/brook.py
244@@ -1,4 +1,4 @@ 167@@ -1,4 +1,4 @@
245-#!/usr/bin/env python 168-#!/usr/bin/env python
246+#!/usr/bin/env python3 169+#!/usr/bin/env python3
247 # Copyright 2016 Doalitic. 170 # (c) 2020, Red Hat, Inc. <relrod@redhat.com>
248 # 171 #
249 # This file is part of Ansible 172 # This file is part of Ansible
250diff --git a/contrib/inventory/cloudforms.py b/contrib/inventory/cloudforms.py 173diff --git a/hacking/create_deprecation_bug_reports.py b/hacking/create_deprecation_bug_reports.py
251index 69c149b..202a6c9 100755 174index e14df4be38..e6b9b9025c 100755
252--- a/contrib/inventory/cloudforms.py 175--- a/hacking/create_deprecation_bug_reports.py
253+++ b/contrib/inventory/cloudforms.py 176+++ b/hacking/create_deprecation_bug_reports.py
254@@ -1,4 +1,4 @@ 177@@ -1,4 +1,4 @@
255-#!/usr/bin/env python 178-#!/usr/bin/env python
256+#!/usr/bin/env python3 179+#!/usr/bin/env python3
257 # vim: set fileencoding=utf-8 : 180 # PYTHON_ARGCOMPLETE_OK
258 # 181 """Create GitHub issues for deprecated features."""
259 # Copyright (C) 2016 Guido Günther <agx@sigxcpu.org> 182
260diff --git a/contrib/inventory/cloudstack.py b/contrib/inventory/cloudstack.py 183diff --git a/hacking/fix_test_syntax.py b/hacking/fix_test_syntax.py
261index a9b6b9f..d7f05ff 100755 184index 7178033406..78d87ef71c 100755
262--- a/contrib/inventory/cloudstack.py 185--- a/hacking/fix_test_syntax.py
263+++ b/contrib/inventory/cloudstack.py 186+++ b/hacking/fix_test_syntax.py
264@@ -1,4 +1,4 @@ 187@@ -1,4 +1,4 @@
265-#!/usr/bin/env python 188-#!/usr/bin/env python
266+#!/usr/bin/env python3 189+#!/usr/bin/env python3
267 # -*- coding: utf-8 -*- 190 # -*- coding: utf-8 -*-
191 # (c) 2017, Matt Martz <matt@sivel.net>
268 # 192 #
269 # (c) 2015, René Moser <mail@renemoser.net> 193diff --git a/hacking/get_library.py b/hacking/get_library.py
270diff --git a/contrib/inventory/cobbler.py b/contrib/inventory/cobbler.py 194index 23bf4a39bb..9346784398 100755
271index 89f9bf7..f2a9ff7 100755 195--- a/hacking/get_library.py
272--- a/contrib/inventory/cobbler.py 196+++ b/hacking/get_library.py
273+++ b/contrib/inventory/cobbler.py
274@@ -1,4 +1,4 @@ 197@@ -1,4 +1,4 @@
275-#!/usr/bin/env python 198-#!/usr/bin/env python
276+#!/usr/bin/env python3 199+#!/usr/bin/env python3
277 200
278 """ 201 # (c) 2014, Will Thames <will@thames.id.au>
279 Cobbler external inventory script 202 #
280diff --git a/contrib/inventory/collins.py b/contrib/inventory/collins.py 203diff --git a/hacking/report.py b/hacking/report.py
281index b7193e2..f0bc2a1 100755 204index 58b3a6b915..78eed516dc 100755
282--- a/contrib/inventory/collins.py 205--- a/hacking/report.py
283+++ b/contrib/inventory/collins.py 206+++ b/hacking/report.py
284@@ -1,4 +1,4 @@ 207@@ -1,4 +1,4 @@
285-#!/usr/bin/env python 208-#!/usr/bin/env python
286+#!/usr/bin/env python3 209+#!/usr/bin/env python3
210 # PYTHON_ARGCOMPLETE_OK
211 """A tool to aggregate data about Ansible source and testing into a sqlite DB for reporting."""
287 212
288 """ 213diff --git a/hacking/return_skeleton_generator.py b/hacking/return_skeleton_generator.py
289 Collins external inventory script 214index 7002b7899d..cff03c38e6 100755
290diff --git a/contrib/inventory/consul_io.py b/contrib/inventory/consul_io.py 215--- a/hacking/return_skeleton_generator.py
291index 8106097..2cdc523 100755 216+++ b/hacking/return_skeleton_generator.py
292--- a/contrib/inventory/consul_io.py
293+++ b/contrib/inventory/consul_io.py
294@@ -1,4 +1,4 @@ 217@@ -1,4 +1,4 @@
295-#!/usr/bin/env python 218-#!/usr/bin/env python
296+#!/usr/bin/env python3 219+#!/usr/bin/env python3
297 220
221 # (c) 2017, Will Thames <will@thames.id.au>
298 # 222 #
299 # (c) 2015, Steve Gargan <steve.gargan@gmail.com> 223diff --git a/hacking/test-module.py b/hacking/test-module.py
300diff --git a/contrib/inventory/digital_ocean.py b/contrib/inventory/digital_ocean.py 224index 54343e07e8..38d4b8c60b 100755
301index 07c124b..0b0e587 100755 225--- a/hacking/test-module.py
302--- a/contrib/inventory/digital_ocean.py 226+++ b/hacking/test-module.py
303+++ b/contrib/inventory/digital_ocean.py
304@@ -1,4 +1,4 @@ 227@@ -1,4 +1,4 @@
305-#!/usr/bin/env python 228-#!/usr/bin/env python
306+#!/usr/bin/env python3 229+#!/usr/bin/env python3
307 230
308 ''' 231 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
309 DigitalOcean external inventory script
310diff --git a/contrib/inventory/docker.py b/contrib/inventory/docker.py
311index da051dd..9b88d0c 100755
312--- a/contrib/inventory/docker.py
313+++ b/contrib/inventory/docker.py
314@@ -1,4 +1,4 @@
315-#!/usr/bin/env python
316+#!/usr/bin/env python3
317 # 232 #
318 # (c) 2016 Paul Durivage <paul.durivage@gmail.com> 233diff --git a/hacking/tests/gen_distribution_version_testcase.py b/hacking/tests/gen_distribution_version_testcase.py
319 # Chris Houseknecht <house@redhat.com> 234index 2fc5a2f932..18e67d7d12 100755
320diff --git a/contrib/inventory/ec2.py b/contrib/inventory/ec2.py 235--- a/hacking/tests/gen_distribution_version_testcase.py
321index 03b9820..9c9b2e4 100755 236+++ b/hacking/tests/gen_distribution_version_testcase.py
322--- a/contrib/inventory/ec2.py
323+++ b/contrib/inventory/ec2.py
324@@ -1,4 +1,4 @@ 237@@ -1,4 +1,4 @@
325-#!/usr/bin/env python 238-#!/usr/bin/env python
326+#!/usr/bin/env python3 239+#!/usr/bin/env python3
327 240
328 '''
329 EC2 external inventory script
330diff --git a/contrib/inventory/fleet.py b/contrib/inventory/fleet.py
331index 4db4ea1..8790f2b 100755
332--- a/contrib/inventory/fleet.py
333+++ b/contrib/inventory/fleet.py
334@@ -1,4 +1,4 @@
335-#!/usr/bin/env python
336+#!/usr/bin/env python3
337 """ 241 """
338 fleetctl base external inventory script. Automatically finds the IPs of the booted coreos instances and 242 This script generated test_cases for test_distribution_version.py.
339 returns it under the host group 'coreos' 243diff --git a/hacking/update-sanity-requirements.py b/hacking/update-sanity-requirements.py
340diff --git a/contrib/inventory/foreman.py b/contrib/inventory/foreman.py 244index 997d6dbf87..16a47f0f3c 100755
341index 9a87397..2483cce 100755 245--- a/hacking/update-sanity-requirements.py
342--- a/contrib/inventory/foreman.py 246+++ b/hacking/update-sanity-requirements.py
343+++ b/contrib/inventory/foreman.py
344@@ -1,4 +1,4 @@
345-#!/usr/bin/env python
346+#!/usr/bin/env python3
347 # vim: set fileencoding=utf-8 :
348 #
349 # Copyright (C) 2016 Guido Günther <agx@sigxcpu.org>,
350diff --git a/contrib/inventory/freeipa.py b/contrib/inventory/freeipa.py
351index a72b774..1f092b2 100755
352--- a/contrib/inventory/freeipa.py
353+++ b/contrib/inventory/freeipa.py
354@@ -1,4 +1,4 @@ 247@@ -1,4 +1,4 @@
355-#!/usr/bin/env python 248-#!/usr/bin/env python
356+#!/usr/bin/env python3 249+#!/usr/bin/env python3
250 # PYTHON_ARGCOMPLETE_OK
251 """Generate frozen sanity test requirements from source requirements files."""
357 252
358 import argparse 253diff --git a/lib/ansible/cli/adhoc.py b/lib/ansible/cli/adhoc.py
359 from ipalib import api 254index e90b44ce10..120948c749 100755
360diff --git a/contrib/inventory/gce.py b/contrib/inventory/gce.py 255--- a/lib/ansible/cli/adhoc.py
361index 5c58146..7616843 100755 256+++ b/lib/ansible/cli/adhoc.py
362--- a/contrib/inventory/gce.py
363+++ b/contrib/inventory/gce.py
364@@ -1,4 +1,4 @@
365-#!/usr/bin/env python
366+#!/usr/bin/env python3
367 # Copyright 2013 Google Inc.
368 #
369 # This file is part of Ansible
370diff --git a/contrib/inventory/jail.py b/contrib/inventory/jail.py
371index 98b6acf..b12289c 100755
372--- a/contrib/inventory/jail.py
373+++ b/contrib/inventory/jail.py
374@@ -1,4 +1,4 @@ 257@@ -1,4 +1,4 @@
375-#!/usr/bin/env python 258-#!/usr/bin/env python
376+#!/usr/bin/env python3 259+#!/usr/bin/env python3
377 260 # Copyright: (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
378 # (c) 2013, Michael Scherer <misc@zarb.org> 261 # Copyright: (c) 2018, Ansible Project
379 # 262 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
380diff --git a/contrib/inventory/landscape.py b/contrib/inventory/landscape.py 263diff --git a/lib/ansible/cli/config.py b/lib/ansible/cli/config.py
381index 4b53171..7f52639 100755 264index c8d99ea09c..987700e11d 100755
382--- a/contrib/inventory/landscape.py 265--- a/lib/ansible/cli/config.py
383+++ b/contrib/inventory/landscape.py 266+++ b/lib/ansible/cli/config.py
384@@ -1,4 +1,4 @@ 267@@ -1,4 +1,4 @@
385-#!/usr/bin/env python 268-#!/usr/bin/env python
386+#!/usr/bin/env python3 269+#!/usr/bin/env python3
387 270 # Copyright: (c) 2017, Ansible Project
388 # (c) 2015, Marc Abramowitz <marca@surveymonkey.com> 271 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
389 # 272 # PYTHON_ARGCOMPLETE_OK
390diff --git a/contrib/inventory/libvirt_lxc.py b/contrib/inventory/libvirt_lxc.py 273diff --git a/lib/ansible/cli/console.py b/lib/ansible/cli/console.py
391index 35ccf40..ba3496d 100755 274index 3125cc47a7..4a2f38bb48 100755
392--- a/contrib/inventory/libvirt_lxc.py 275--- a/lib/ansible/cli/console.py
393+++ b/contrib/inventory/libvirt_lxc.py 276+++ b/lib/ansible/cli/console.py
394@@ -1,4 +1,4 @@ 277@@ -1,4 +1,4 @@
395-#!/usr/bin/env python 278-#!/usr/bin/env python
396+#!/usr/bin/env python3 279+#!/usr/bin/env python3
397 280 # Copyright: (c) 2014, Nandor Sivok <dominis@haxor.hu>
398 # (c) 2013, Michael Scherer <misc@zarb.org> 281 # Copyright: (c) 2016, Redhat Inc
399 # 282 # Copyright: (c) 2018, Ansible Project
400diff --git a/contrib/inventory/linode.py b/contrib/inventory/linode.py 283diff --git a/lib/ansible/cli/doc.py b/lib/ansible/cli/doc.py
401index 6fd922f..cab7a70 100755 284index 9f560bcbc6..a0d34d92f6 100755
402--- a/contrib/inventory/linode.py 285--- a/lib/ansible/cli/doc.py
403+++ b/contrib/inventory/linode.py 286+++ b/lib/ansible/cli/doc.py
404@@ -1,4 +1,4 @@ 287@@ -1,4 +1,4 @@
405-#!/usr/bin/env python 288-#!/usr/bin/env python
406+#!/usr/bin/env python3 289+#!/usr/bin/env python3
407 290 # Copyright: (c) 2014, James Tanner <tanner.jc@gmail.com>
408 ''' 291 # Copyright: (c) 2018, Ansible Project
409 Linode external inventory script 292 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
410diff --git a/contrib/inventory/lxc_inventory.py b/contrib/inventory/lxc_inventory.py 293diff --git a/lib/ansible/cli/galaxy.py b/lib/ansible/cli/galaxy.py
411index d82bb61..f7ac67c 100755 294index 536964e28f..8053119bb6 100755
412--- a/contrib/inventory/lxc_inventory.py 295--- a/lib/ansible/cli/galaxy.py
413+++ b/contrib/inventory/lxc_inventory.py 296+++ b/lib/ansible/cli/galaxy.py
414@@ -1,4 +1,4 @@ 297@@ -1,4 +1,4 @@
415-#!/usr/bin/env python 298-#!/usr/bin/env python
416+#!/usr/bin/env python3 299+#!/usr/bin/env python3
417 # 300 # Copyright: (c) 2013, James Cammarata <jcammarata@ansible.com>
418 # (c) 2015-16 Florian Haas, hastexo Professional Services GmbH 301 # Copyright: (c) 2018-2021, Ansible Project
419 # <florian@hastexo.com> 302 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
420diff --git a/contrib/inventory/mdt_dynamic_inventory.py b/contrib/inventory/mdt_dynamic_inventory.py 303diff --git a/lib/ansible/cli/inventory.py b/lib/ansible/cli/inventory.py
421index 89ecc3e..5540a41 100755 304index 56c370ccf8..085ccda0fd 100755
422--- a/contrib/inventory/mdt_dynamic_inventory.py 305--- a/lib/ansible/cli/inventory.py
423+++ b/contrib/inventory/mdt_dynamic_inventory.py 306+++ b/lib/ansible/cli/inventory.py
424@@ -1,4 +1,4 @@ 307@@ -1,4 +1,4 @@
425-#!/usr/bin/env python 308-#!/usr/bin/env python
426+#!/usr/bin/env python3 309+#!/usr/bin/env python3
427 310 # Copyright: (c) 2017, Brian Coca <bcoca@ansible.com>
428 # (c) 2016, Julian Barnett <jbarnett@tableau.com> 311 # Copyright: (c) 2018, Ansible Project
429 # 312 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
430diff --git a/contrib/inventory/nagios_livestatus.py b/contrib/inventory/nagios_livestatus.py 313diff --git a/lib/ansible/cli/playbook.py b/lib/ansible/cli/playbook.py
431index e1c145e..3e250cb 100755 314index 9c091a675a..27ff7d442e 100755
432--- a/contrib/inventory/nagios_livestatus.py 315--- a/lib/ansible/cli/playbook.py
433+++ b/contrib/inventory/nagios_livestatus.py 316+++ b/lib/ansible/cli/playbook.py
434@@ -1,4 +1,4 @@ 317@@ -1,4 +1,4 @@
435-#!/usr/bin/env python 318-#!/usr/bin/env python
436+#!/usr/bin/env python3 319+#!/usr/bin/env python3
437 320 # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
438 # (c) 2015, Yannig Perre <yannig.perre@gmail.com> 321 # Copyright: (c) 2018, Ansible Project
439 # 322 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
440diff --git a/contrib/inventory/nagios_ndo.py b/contrib/inventory/nagios_ndo.py 323diff --git a/lib/ansible/cli/pull.py b/lib/ansible/cli/pull.py
441index 49ec563..cc10a51 100755 324index dc8f055b44..0e5b030eec 100755
442--- a/contrib/inventory/nagios_ndo.py 325--- a/lib/ansible/cli/pull.py
443+++ b/contrib/inventory/nagios_ndo.py 326+++ b/lib/ansible/cli/pull.py
444@@ -1,4 +1,4 @@ 327@@ -1,4 +1,4 @@
445-#!/usr/bin/env python 328-#!/usr/bin/env python
446+#!/usr/bin/env python3 329+#!/usr/bin/env python3
447 330 # Copyright: (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
448 # (c) 2014, Jonathan Lestrelin <jonathan.lestrelin@gmail.com> 331 # Copyright: (c) 2018, Ansible Project
449 # 332 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
450diff --git a/contrib/inventory/nova.py b/contrib/inventory/nova.py 333diff --git a/lib/ansible/cli/scripts/ansible_connection_cli_stub.py b/lib/ansible/cli/scripts/ansible_connection_cli_stub.py
451index f8c1617..d0ad7f0 100755 334index 9109137e7f..f01b1ec58d 100755
452--- a/contrib/inventory/nova.py 335--- a/lib/ansible/cli/scripts/ansible_connection_cli_stub.py
453+++ b/contrib/inventory/nova.py 336+++ b/lib/ansible/cli/scripts/ansible_connection_cli_stub.py
454@@ -1,4 +1,4 @@ 337@@ -1,4 +1,4 @@
455-#!/usr/bin/env python 338-#!/usr/bin/env python
456+#!/usr/bin/env python3 339+#!/usr/bin/env python3
457 340 # Copyright: (c) 2017, Ansible Project
458 # (c) 2012, Marco Vito Moscaritolo <marco@agavee.com> 341 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
459 # 342 from __future__ import (absolute_import, division, print_function)
460diff --git a/contrib/inventory/nsot.py b/contrib/inventory/nsot.py 343diff --git a/lib/ansible/cli/vault.py b/lib/ansible/cli/vault.py
461index 62be85a..0a8dc9b 100755 344index 3e60329de6..6949940747 100755
462--- a/contrib/inventory/nsot.py 345--- a/lib/ansible/cli/vault.py
463+++ b/contrib/inventory/nsot.py 346+++ b/lib/ansible/cli/vault.py
464@@ -1,4 +1,4 @@ 347@@ -1,4 +1,4 @@
465-#!/usr/bin/env python 348-#!/usr/bin/env python
466+#!/usr/bin/env python3 349+#!/usr/bin/env python3
467 350 # (c) 2014, James Tanner <tanner.jc@gmail.com>
468 ''' 351 # Copyright: (c) 2018, Ansible Project
469 nsot 352 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
470diff --git a/contrib/inventory/openshift.py b/contrib/inventory/openshift.py 353diff --git a/packaging/cli-doc/build.py b/packaging/cli-doc/build.py
471index 479b808..dc398b5 100755 354index 878ba8eabf..64a614f3f7 100755
472--- a/contrib/inventory/openshift.py 355--- a/packaging/cli-doc/build.py
473+++ b/contrib/inventory/openshift.py 356+++ b/packaging/cli-doc/build.py
474@@ -1,4 +1,4 @@ 357@@ -1,4 +1,4 @@
475-#!/usr/bin/env python 358-#!/usr/bin/env python
476+#!/usr/bin/env python3 359+#!/usr/bin/env python3
360 # PYTHON_ARGCOMPLETE_OK
361 """Build documentation for ansible-core CLI programs."""
477 362
478 # (c) 2013, Michael Scherer <misc@zarb.org> 363diff --git a/packaging/release.py b/packaging/release.py
479 # 364index 97c58a7424..fa5a27f794 100755
480diff --git a/contrib/inventory/openstack.py b/contrib/inventory/openstack.py 365--- a/packaging/release.py
481index 6679a2c..eb38742 100755 366+++ b/packaging/release.py
482--- a/contrib/inventory/openstack.py
483+++ b/contrib/inventory/openstack.py
484@@ -1,4 +1,4 @@ 367@@ -1,4 +1,4 @@
485-#!/usr/bin/env python 368-#!/usr/bin/env python
486+#!/usr/bin/env python3 369+#!/usr/bin/env python3
370 # PYTHON_ARGCOMPLETE_OK
371 """Manage upstream ansible-core releases."""
487 372
488 # Copyright (c) 2012, Marco Vito Moscaritolo <marco@agavee.com> 373diff --git a/test/integration/targets/ansible-galaxy-collection/files/build_bad_tar.py b/test/integration/targets/ansible-galaxy-collection/files/build_bad_tar.py
489 # Copyright (c) 2013, Jesse Keating <jesse.keating@rackspace.com> 374index 6182e865db..5829df52b5 100644
490diff --git a/contrib/inventory/openvz.py b/contrib/inventory/openvz.py 375--- a/test/integration/targets/ansible-galaxy-collection/files/build_bad_tar.py
491index 1ef8ab1..d4dfcde 100755 376+++ b/test/integration/targets/ansible-galaxy-collection/files/build_bad_tar.py
492--- a/contrib/inventory/openvz.py
493+++ b/contrib/inventory/openvz.py
494@@ -1,4 +1,4 @@
495-#!/usr/bin/env python
496+#!/usr/bin/env python3
497 # -*- coding: utf-8 -*-
498 #
499 # openvz.py
500diff --git a/contrib/inventory/ovirt.py b/contrib/inventory/ovirt.py
501index 7f505d9..ada01fa 100755
502--- a/contrib/inventory/ovirt.py
503+++ b/contrib/inventory/ovirt.py
504@@ -1,4 +1,4 @@
505-#!/usr/bin/env python
506+#!/usr/bin/env python3
507 # Copyright 2015 IIX Inc.
508 #
509 # This file is part of Ansible
510diff --git a/contrib/inventory/ovirt4.py b/contrib/inventory/ovirt4.py
511index 5ee5986..9d9e940 100755
512--- a/contrib/inventory/ovirt4.py
513+++ b/contrib/inventory/ovirt4.py
514@@ -1,4 +1,4 @@
515-#!/usr/bin/env python
516+#!/usr/bin/env python3
517 # -*- coding: utf-8 -*-
518 #
519 # Copyright (c) 2016 Red Hat, Inc.
520diff --git a/contrib/inventory/packet_net.py b/contrib/inventory/packet_net.py
521index c40c821..d23eba1 100755
522--- a/contrib/inventory/packet_net.py
523+++ b/contrib/inventory/packet_net.py
524@@ -1,4 +1,4 @@ 377@@ -1,4 +1,4 @@
525-#!/usr/bin/env python 378-#!/usr/bin/env python
526+#!/usr/bin/env python3 379+#!/usr/bin/env python3
527 380
528 ''' 381 # Copyright: (c) 2020, Ansible Project
529 Packet.net external inventory script 382 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
530diff --git a/contrib/inventory/proxmox.py b/contrib/inventory/proxmox.py 383diff --git a/test/integration/targets/ansible-galaxy-role/files/create-role-archive.py b/test/integration/targets/ansible-galaxy-role/files/create-role-archive.py
531index c0ffb0b..ef7a394 100755 384index cfd908c17b..3319084473 100755
532--- a/contrib/inventory/proxmox.py 385--- a/test/integration/targets/ansible-galaxy-role/files/create-role-archive.py
533+++ b/contrib/inventory/proxmox.py 386+++ b/test/integration/targets/ansible-galaxy-role/files/create-role-archive.py
534@@ -1,4 +1,4 @@ 387@@ -1,4 +1,4 @@
535-#!/usr/bin/env python 388-#!/usr/bin/env python
536+#!/usr/bin/env python3 389+#!/usr/bin/env python3
390 """Create a role archive which overwrites an arbitrary file."""
537 391
538 # Copyright (C) 2014 Mathieu GAUTHIER-LAFAYE <gauthierl@lapth.cnrs.fr> 392 import argparse
539 # 393diff --git a/test/integration/targets/ansible-test-container/runme.py b/test/integration/targets/ansible-test-container/runme.py
540diff --git a/contrib/inventory/rackhd.py b/contrib/inventory/rackhd.py 394index 687128056f..bd7f367165 100755
541index a89cb04..05b3ada 100755 395--- a/test/integration/targets/ansible-test-container/runme.py
542--- a/contrib/inventory/rackhd.py 396+++ b/test/integration/targets/ansible-test-container/runme.py
543+++ b/contrib/inventory/rackhd.py
544@@ -1,4 +1,4 @@ 397@@ -1,4 +1,4 @@
545-#!/usr/bin/env python 398-#!/usr/bin/env python
546+#!/usr/bin/env python3 399+#!/usr/bin/env python3
400 """Test suite used to verify ansible-test is able to run its containers on various container hosts."""
547 401
548 import json 402 from __future__ import annotations
549 import requests 403diff --git a/test/integration/targets/ansible-test-integration-targets/test.py b/test/integration/targets/ansible-test-integration-targets/test.py
550diff --git a/contrib/inventory/rax.py b/contrib/inventory/rax.py 404index 8effb647fc..4e34c4bbc1 100755
551index d20a8ab..6c34753 100755 405--- a/test/integration/targets/ansible-test-integration-targets/test.py
552--- a/contrib/inventory/rax.py 406+++ b/test/integration/targets/ansible-test-integration-targets/test.py
553+++ b/contrib/inventory/rax.py
554@@ -1,4 +1,4 @@ 407@@ -1,4 +1,4 @@
555-#!/usr/bin/env python 408-#!/usr/bin/env python
556+#!/usr/bin/env python3 409+#!/usr/bin/env python3
557 410
558 # (c) 2013, Jesse Keating <jesse.keating@rackspace.com, 411 import subprocess
559 # Paul Durivage <paul.durivage@rackspace.com>, 412 import unittest
560diff --git a/contrib/inventory/rhv.py b/contrib/inventory/rhv.py 413diff --git a/test/integration/targets/ansible-test-no-tty/ansible_collections/ns/col/run-with-pty.py b/test/integration/targets/ansible-test-no-tty/ansible_collections/ns/col/run-with-pty.py
561index 5ee5986..9d9e940 100755 414index 463915284b..fc2ed398d9 100755
562--- a/contrib/inventory/rhv.py 415--- a/test/integration/targets/ansible-test-no-tty/ansible_collections/ns/col/run-with-pty.py
563+++ b/contrib/inventory/rhv.py 416+++ b/test/integration/targets/ansible-test-no-tty/ansible_collections/ns/col/run-with-pty.py
564@@ -1,4 +1,4 @@
565-#!/usr/bin/env python
566+#!/usr/bin/env python3
567 # -*- coding: utf-8 -*-
568 #
569 # Copyright (c) 2016 Red Hat, Inc.
570diff --git a/contrib/inventory/rudder.py b/contrib/inventory/rudder.py
571index 5cf16c9..a669c37 100755
572--- a/contrib/inventory/rudder.py
573+++ b/contrib/inventory/rudder.py
574@@ -1,4 +1,4 @@ 417@@ -1,4 +1,4 @@
575-#!/usr/bin/env python 418-#!/usr/bin/env python
576+#!/usr/bin/env python3 419+#!/usr/bin/env python3
420 """Run a command using a PTY."""
577 421
578 # Copyright (c) 2015, Normation SAS 422 import sys
579 # 423diff --git a/test/integration/targets/ansible-test-no-tty/ansible_collections/ns/col/tests/integration/targets/no-tty/assert-no-tty.py b/test/integration/targets/ansible-test-no-tty/ansible_collections/ns/col/tests/integration/targets/no-tty/assert-no-tty.py
580diff --git a/contrib/inventory/serf.py b/contrib/inventory/serf.py 424index a2b094e2fc..355dba697a 100755
581index e1340da..6242eda 100755 425--- a/test/integration/targets/ansible-test-no-tty/ansible_collections/ns/col/tests/integration/targets/no-tty/assert-no-tty.py
582--- a/contrib/inventory/serf.py 426+++ b/test/integration/targets/ansible-test-no-tty/ansible_collections/ns/col/tests/integration/targets/no-tty/assert-no-tty.py
583+++ b/contrib/inventory/serf.py
584@@ -1,4 +1,4 @@ 427@@ -1,4 +1,4 @@
585-#!/usr/bin/env python 428-#!/usr/bin/env python
586+#!/usr/bin/env python3 429+#!/usr/bin/env python3
430 """Assert no TTY is available."""
587 431
588 # (c) 2015, Marc Abramowitz <marca@surveymonkey.com> 432 import sys
589 # 433diff --git a/test/integration/targets/ansible-test-sanity-shebang/ansible_collections/ns/col/scripts/env_python.py b/test/integration/targets/ansible-test-sanity-shebang/ansible_collections/ns/col/scripts/env_python.py
590diff --git a/contrib/inventory/softlayer.py b/contrib/inventory/softlayer.py 434index 4265cc3e6c..e5a0d9b483 100755
591index 3933eb4..519092f 100755 435--- a/test/integration/targets/ansible-test-sanity-shebang/ansible_collections/ns/col/scripts/env_python.py
592--- a/contrib/inventory/softlayer.py 436+++ b/test/integration/targets/ansible-test-sanity-shebang/ansible_collections/ns/col/scripts/env_python.py
593+++ b/contrib/inventory/softlayer.py 437@@ -1 +1 @@
594@@ -1,4 +1,4 @@
595-#!/usr/bin/env python 438-#!/usr/bin/env python
596+#!/usr/bin/env python3 439+#!/usr/bin/env python3
597 """ 440diff --git a/test/integration/targets/ansible-test-sanity-shebang/ansible_collections/ns/col/tests/integration/targets/valid/env_python.py b/test/integration/targets/ansible-test-sanity-shebang/ansible_collections/ns/col/tests/integration/targets/valid/env_python.py
598 SoftLayer external inventory script. 441index 4265cc3e6c..e5a0d9b483 100755
599 442--- a/test/integration/targets/ansible-test-sanity-shebang/ansible_collections/ns/col/tests/integration/targets/valid/env_python.py
600diff --git a/contrib/inventory/spacewalk.py b/contrib/inventory/spacewalk.py 443+++ b/test/integration/targets/ansible-test-sanity-shebang/ansible_collections/ns/col/tests/integration/targets/valid/env_python.py
601index 2735a81..2da2720 100755 444@@ -1 +1 @@
602--- a/contrib/inventory/spacewalk.py
603+++ b/contrib/inventory/spacewalk.py
604@@ -1,4 +1,4 @@
605-#!/usr/bin/env python 445-#!/usr/bin/env python
606+#!/usr/bin/env python3 446+#!/usr/bin/env python3
607 447diff --git a/test/integration/targets/ansible-test/venv-pythons.py b/test/integration/targets/ansible-test/venv-pythons.py
608 """ 448index b380f147fc..e97f2fcb33 100755
609 Spacewalk external inventory script 449--- a/test/integration/targets/ansible-test/venv-pythons.py
610diff --git a/contrib/inventory/ssh_config.py b/contrib/inventory/ssh_config.py 450+++ b/test/integration/targets/ansible-test/venv-pythons.py
611index ae41e58..05373ec 100755
612--- a/contrib/inventory/ssh_config.py
613+++ b/contrib/inventory/ssh_config.py
614@@ -1,4 +1,4 @@ 451@@ -1,4 +1,4 @@
615-#!/usr/bin/env python 452-#!/usr/bin/env python
616+#!/usr/bin/env python3 453+#!/usr/bin/env python3
454 """Return target Python options for use with ansible-test."""
617 455
618 # (c) 2014, Tomas Karasek <tomas.karasek@digile.fi> 456 import os
619 # 457diff --git a/test/integration/targets/ansible-vault/faux-editor.py b/test/integration/targets/ansible-vault/faux-editor.py
620diff --git a/contrib/inventory/stacki.py b/contrib/inventory/stacki.py 458index b67c747563..a30c306a83 100755
621index fd4cda5..d6acda3 100755 459--- a/test/integration/targets/ansible-vault/faux-editor.py
622--- a/contrib/inventory/stacki.py 460+++ b/test/integration/targets/ansible-vault/faux-editor.py
623+++ b/contrib/inventory/stacki.py
624@@ -1,4 +1,4 @@ 461@@ -1,4 +1,4 @@
625-#!/usr/bin/env python 462-#!/usr/bin/env python
626+#!/usr/bin/env python3 463+#!/usr/bin/env python3
627
628 # Copyright (c) 2016, Hugh Ma <hugh.ma@flextronics.com>
629 # 464 #
630diff --git a/contrib/inventory/vagrant.py b/contrib/inventory/vagrant.py 465 # Ansible is free software: you can redistribute it and/or modify
631index 37a6741..86fc67d 100755 466 # it under the terms of the GNU General Public License as published by
632--- a/contrib/inventory/vagrant.py 467diff --git a/test/integration/targets/ansible-vault/password-script.py b/test/integration/targets/ansible-vault/password-script.py
633+++ b/contrib/inventory/vagrant.py 468index 1b7f02beb2..0dcada23c7 100755
634@@ -1,4 +1,4 @@ 469--- a/test/integration/targets/ansible-vault/password-script.py
635-#!/usr/bin/env python 470+++ b/test/integration/targets/ansible-vault/password-script.py
636+#!/usr/bin/env python3
637 """
638 Vagrant external inventory script. Automatically finds the IP of the booted vagrant vm(s), and
639 returns it under the host group 'vagrant'
640diff --git a/contrib/inventory/vbox.py b/contrib/inventory/vbox.py
641index 8905fab..141b01a 100755
642--- a/contrib/inventory/vbox.py
643+++ b/contrib/inventory/vbox.py
644@@ -1,4 +1,4 @@ 471@@ -1,4 +1,4 @@
645-#!/usr/bin/env python 472-#!/usr/bin/env python
646+#!/usr/bin/env python3 473+#!/usr/bin/env python3
647
648 # This file is part of Ansible,
649 # 474 #
650diff --git a/contrib/inventory/vmware.py b/contrib/inventory/vmware.py 475 # Ansible is free software: you can redistribute it and/or modify
651index 377c7cb..cee232a 100755 476 # it under the terms of the GNU General Public License as published by
652--- a/contrib/inventory/vmware.py 477diff --git a/test/integration/targets/ansible-vault/test-vault-client.py b/test/integration/targets/ansible-vault/test-vault-client.py
653+++ b/contrib/inventory/vmware.py 478index ee46188742..48244fca09 100755
479--- a/test/integration/targets/ansible-vault/test-vault-client.py
480+++ b/test/integration/targets/ansible-vault/test-vault-client.py
654@@ -1,4 +1,4 @@ 481@@ -1,4 +1,4 @@
655-#!/usr/bin/env python 482-#!/usr/bin/env python
656+#!/usr/bin/env python3 483+#!/usr/bin/env python3
657 # -*- coding: utf-8 -*- 484 # -*- coding: utf-8 -*-
658 ''' 485
659 VMware Inventory Script 486 from __future__ import (absolute_import, division, print_function)
660diff --git a/contrib/inventory/vmware_inventory.py b/contrib/inventory/vmware_inventory.py 487diff --git a/test/integration/targets/builtin_vars_prompt/test-vars_prompt.py b/test/integration/targets/builtin_vars_prompt/test-vars_prompt.py
661index 58ee473..4300fe5 100755 488index 93958fc2ad..33509c826a 100644
662--- a/contrib/inventory/vmware_inventory.py 489--- a/test/integration/targets/builtin_vars_prompt/test-vars_prompt.py
663+++ b/contrib/inventory/vmware_inventory.py 490+++ b/test/integration/targets/builtin_vars_prompt/test-vars_prompt.py
664@@ -1,4 +1,4 @@ 491@@ -1,4 +1,4 @@
665-#!/usr/bin/env python 492-#!/usr/bin/env python
666+#!/usr/bin/env python3 493+#!/usr/bin/env python3
667 494
668 # Requirements 495 from __future__ import (absolute_import, division, print_function)
669 # - pyvmomi >= 6.0.0.2016.4 496 __metaclass__ = type
670diff --git a/contrib/inventory/windows_azure.py b/contrib/inventory/windows_azure.py 497diff --git a/test/integration/targets/cli/test-cli.py b/test/integration/targets/cli/test-cli.py
671index cceed36..f8777be 100755 498index 9893d6652e..7a07dcc108 100644
672--- a/contrib/inventory/windows_azure.py 499--- a/test/integration/targets/cli/test-cli.py
673+++ b/contrib/inventory/windows_azure.py 500+++ b/test/integration/targets/cli/test-cli.py
674@@ -1,4 +1,4 @@ 501@@ -1,4 +1,4 @@
675-#!/usr/bin/env python 502-#!/usr/bin/env python
676+#!/usr/bin/env python3 503+#!/usr/bin/env python3
504 # Copyright (c) 2019 Matt Martz <matt@sivel.net>
505 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
677 506
678 ''' 507diff --git a/test/integration/targets/cli/test_k_and_K.py b/test/integration/targets/cli/test_k_and_K.py
679 Windows Azure external inventory script 508index f7077fba0a..dcc9614129 100644
680diff --git a/contrib/inventory/zabbix.py b/contrib/inventory/zabbix.py 509--- a/test/integration/targets/cli/test_k_and_K.py
681index f6b37b9..241823b 100755 510+++ b/test/integration/targets/cli/test_k_and_K.py
682--- a/contrib/inventory/zabbix.py
683+++ b/contrib/inventory/zabbix.py
684@@ -1,4 +1,4 @@ 511@@ -1,4 +1,4 @@
685-#!/usr/bin/env python 512-#!/usr/bin/env python
686+#!/usr/bin/env python3 513+#!/usr/bin/env python3
514 # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
687 515
688 # (c) 2013, Greg Buehler 516 # Make coding more python3-ish
689 # 517diff --git a/test/integration/targets/collection/update-ignore.py b/test/integration/targets/collection/update-ignore.py
690diff --git a/contrib/inventory/zone.py b/contrib/inventory/zone.py 518index 92a702cf13..9ea69089d5 100755
691index 893953e..b049fd7 100755 519--- a/test/integration/targets/collection/update-ignore.py
692--- a/contrib/inventory/zone.py 520+++ b/test/integration/targets/collection/update-ignore.py
693+++ b/contrib/inventory/zone.py
694@@ -1,4 +1,4 @@ 521@@ -1,4 +1,4 @@
695-#!/usr/bin/env python 522-#!/usr/bin/env python
696+#!/usr/bin/env python3 523+#!/usr/bin/env python3
524 """Rewrite a sanity ignore file to expand Python versions for import ignores and write the file out with the correct Ansible version in the name."""
697 525
698 # (c) 2015, Dagobert Michelsen <dam@baltic-online.de> 526 import os
699 # 527diff --git a/test/integration/targets/debugger/test_run_once.py b/test/integration/targets/debugger/test_run_once.py
700diff --git a/docs/docsite/rst/dev_guide/developing_api.rst b/docs/docsite/rst/dev_guide/developing_api.rst 528index 237f9c2d90..4fe74903d8 100755
701index bb2cbc4..55d4212 100644 529--- a/test/integration/targets/debugger/test_run_once.py
702--- a/docs/docsite/rst/dev_guide/developing_api.rst 530+++ b/test/integration/targets/debugger/test_run_once.py
703+++ b/docs/docsite/rst/dev_guide/developing_api.rst
704@@ -37,7 +37,7 @@ Python API 2.0
705 In 2.0 things get a bit more complicated to start, but you end up with much more discrete and readable classes::
706
707
708- #!/usr/bin/env python
709+ #!/usr/bin/env python3
710
711 import json
712 from collections import namedtuple
713diff --git a/hacking/dump_playbook_attributes.py b/hacking/dump_playbook_attributes.py
714index 204fe3f..9d86b66 100755
715--- a/hacking/dump_playbook_attributes.py
716+++ b/hacking/dump_playbook_attributes.py
717@@ -1,4 +1,4 @@ 531@@ -1,4 +1,4 @@
718-#!/usr/bin/env python 532-#!/usr/bin/env python
719+#!/usr/bin/env python3 533+#!/usr/bin/env python3
720 534
721 import optparse 535 import io
722 from jinja2 import Environment, FileSystemLoader 536 import os
723diff --git a/hacking/module_formatter.py b/hacking/module_formatter.py 537diff --git a/test/integration/targets/fork_safe_stdio/run-with-pty.py b/test/integration/targets/fork_safe_stdio/run-with-pty.py
724index 4f132aa..1bee33a 100755 538index 463915284b..fc2ed398d9 100755
725--- a/hacking/module_formatter.py 539--- a/test/integration/targets/fork_safe_stdio/run-with-pty.py
726+++ b/hacking/module_formatter.py 540+++ b/test/integration/targets/fork_safe_stdio/run-with-pty.py
727@@ -1,4 +1,4 @@ 541@@ -1,4 +1,4 @@
728-#!/usr/bin/env python 542-#!/usr/bin/env python
729+#!/usr/bin/env python3 543+#!/usr/bin/env python3
730 # (c) 2012, Jan-Piet Mens <jpmens () gmail.com> 544 """Run a command using a PTY."""
731 # (c) 2012-2014, Michael DeHaan <michael@ansible.com> and others 545
732 # 546 import sys
733diff --git a/lib/ansible/modules/web_infrastructure/django_manage.py b/lib/ansible/modules/web_infrastructure/django_manage.py 547diff --git a/test/integration/targets/gathering/uuid.fact b/test/integration/targets/gathering/uuid.fact
734index ac24829..90aee1b 100644 548index 79e3f62677..2a294b33a8 100644
735--- a/lib/ansible/modules/web_infrastructure/django_manage.py 549--- a/test/integration/targets/gathering/uuid.fact
736+++ b/lib/ansible/modules/web_infrastructure/django_manage.py 550+++ b/test/integration/targets/gathering/uuid.fact
737@@ -97,7 +97,7 @@ notes:
738 - This module assumes English error messages for the 'createcachetable' command to detect table existence, unfortunately.
739 - To be able to use the migrate command with django versions < 1.7, you must have south installed and added as an app in your settings.
740 - To be able to use the collectstatic command, you must have enabled staticfiles in your settings.
741- - As of ansible 2.x, your I(manage.py) application must be executable (rwxr-xr-x), and must have a valid I(shebang), i.e. "#!/usr/bin/env python", for invoking the appropriate Python interpreter.
742+ - As of ansible 2.x, your I(manage.py) application must be executable (rwxr-xr-x), and must have a valid I(shebang), i.e. "#!/usr/bin/env python3", for invoking the appropriate Python interpreter.
743 requirements: [ "virtualenv", "django" ]
744 author: "Scott Anderson (@tastychutney)"
745 '''
746diff --git a/lib/ansible/modules/windows/win_file_version.py b/lib/ansible/modules/windows/win_file_version.py
747index 399c978..1225a06 100644
748--- a/lib/ansible/modules/windows/win_file_version.py
749+++ b/lib/ansible/modules/windows/win_file_version.py
750@@ -1,4 +1,4 @@ 551@@ -1,4 +1,4 @@
751-#!/usr/bin/env python 552-#!/usr/bin/env python
752+#!/usr/bin/env python3 553+#!/usr/bin/env python3
753 # -*- coding: utf-8 -*- 554 # -*- coding: utf-8 -*-
754 555
755 # Get DLL or EXE build version
756diff --git a/lib/ansible/modules/windows/win_firewall_rule.py b/lib/ansible/modules/windows/win_firewall_rule.py
757index e4ab1e4..456523d 100644
758--- a/lib/ansible/modules/windows/win_firewall_rule.py
759+++ b/lib/ansible/modules/windows/win_firewall_rule.py
760@@ -1,4 +1,4 @@
761-#!/usr/bin/env python
762+#!/usr/bin/env python3
763 556
764 # (c) 2014, Timothy Vandenbrande <timothy.vandenbrande@gmail.com> 557diff --git a/test/integration/targets/gathering_facts/uuid.fact b/test/integration/targets/gathering_facts/uuid.fact
765 # 558index 79e3f62677..2a294b33a8 100644
766diff --git a/test/compile/compile.py b/test/compile/compile.py 559--- a/test/integration/targets/gathering_facts/uuid.fact
767index 01144c6..6e332a9 100755 560+++ b/test/integration/targets/gathering_facts/uuid.fact
768--- a/test/compile/compile.py
769+++ b/test/compile/compile.py
770@@ -1,4 +1,4 @@ 561@@ -1,4 +1,4 @@
771-#!/usr/bin/env python 562-#!/usr/bin/env python
772+#!/usr/bin/env python3 563+#!/usr/bin/env python3
773 """Python syntax checker with lint friendly output.""" 564 # -*- coding: utf-8 -*-
774 565
775 import os
776diff --git a/test/integration/cleanup_rax.py b/test/integration/cleanup_rax.py
777index 5c757f5..bc3448b 100755
778--- a/test/integration/cleanup_rax.py
779+++ b/test/integration/cleanup_rax.py
780@@ -1,4 +1,4 @@
781-#!/usr/bin/env python
782+#!/usr/bin/env python3
783 566
784 import os 567diff --git a/test/integration/targets/group/files/gidget.py b/test/integration/targets/group/files/gidget.py
785 import re 568index 4b771516fd..085dfcdee1 100644
786diff --git a/test/integration/targets/embedded_module/library/test_integration_module b/test/integration/targets/embedded_module/library/test_integration_module 569--- a/test/integration/targets/group/files/gidget.py
787index f564619..0d46d15 100644 570+++ b/test/integration/targets/group/files/gidget.py
788--- a/test/integration/targets/embedded_module/library/test_integration_module 571@@ -1,4 +1,4 @@
789+++ b/test/integration/targets/embedded_module/library/test_integration_module
790@@ -1,3 +1,3 @@
791-#!/usr/bin/env python 572-#!/usr/bin/env python
792+#!/usr/bin/env python3 573+#!/usr/bin/env python3
793 574
794 print('{"changed":false, "msg":"this is the embedded module"}') 575 from __future__ import (absolute_import, division, print_function)
576 __metaclass__ = type
795diff --git a/test/integration/targets/module_utils/module_utils/foo.py b/test/integration/targets/module_utils/module_utils/foo.py 577diff --git a/test/integration/targets/module_utils/module_utils/foo.py b/test/integration/targets/module_utils/module_utils/foo.py
796index 20698f1..0cd5c85 100644 578index 20698f1f46..0cd5c85142 100644
797--- a/test/integration/targets/module_utils/module_utils/foo.py 579--- a/test/integration/targets/module_utils/module_utils/foo.py
798+++ b/test/integration/targets/module_utils/module_utils/foo.py 580+++ b/test/integration/targets/module_utils/module_utils/foo.py
799@@ -1,3 +1,3 @@ 581@@ -1,3 +1,3 @@
@@ -802,7 +584,7 @@ index 20698f1..0cd5c85 100644
802 584
803 foo = "FOO FROM foo.py" 585 foo = "FOO FROM foo.py"
804diff --git a/test/integration/targets/module_utils/module_utils/sub/bam.py b/test/integration/targets/module_utils/module_utils/sub/bam.py 586diff --git a/test/integration/targets/module_utils/module_utils/sub/bam.py b/test/integration/targets/module_utils/module_utils/sub/bam.py
805index 566f8b7..0814485 100644 587index 566f8b7c47..0814485d5f 100644
806--- a/test/integration/targets/module_utils/module_utils/sub/bam.py 588--- a/test/integration/targets/module_utils/module_utils/sub/bam.py
807+++ b/test/integration/targets/module_utils/module_utils/sub/bam.py 589+++ b/test/integration/targets/module_utils/module_utils/sub/bam.py
808@@ -1,3 +1,3 @@ 590@@ -1,3 +1,3 @@
@@ -811,7 +593,7 @@ index 566f8b7..0814485 100644
811 593
812 bam = "BAM FROM sub/bam.py" 594 bam = "BAM FROM sub/bam.py"
813diff --git a/test/integration/targets/module_utils/module_utils/sub/bam/bam.py b/test/integration/targets/module_utils/module_utils/sub/bam/bam.py 595diff --git a/test/integration/targets/module_utils/module_utils/sub/bam/bam.py b/test/integration/targets/module_utils/module_utils/sub/bam/bam.py
814index b7ed707..97f9eed 100644 596index b7ed707211..97f9eedcdb 100644
815--- a/test/integration/targets/module_utils/module_utils/sub/bam/bam.py 597--- a/test/integration/targets/module_utils/module_utils/sub/bam/bam.py
816+++ b/test/integration/targets/module_utils/module_utils/sub/bam/bam.py 598+++ b/test/integration/targets/module_utils/module_utils/sub/bam/bam.py
817@@ -1,3 +1,3 @@ 599@@ -1,3 +1,3 @@
@@ -820,7 +602,7 @@ index b7ed707..97f9eed 100644
820 602
821 bam = "BAM FROM sub/bam/bam.py" 603 bam = "BAM FROM sub/bam/bam.py"
822diff --git a/test/integration/targets/module_utils/module_utils/sub/bar/bam.py b/test/integration/targets/module_utils/module_utils/sub/bar/bam.py 604diff --git a/test/integration/targets/module_utils/module_utils/sub/bar/bam.py b/test/integration/targets/module_utils/module_utils/sub/bar/bam.py
823index 02fafd4..3a93360 100644 605index 02fafd40f3..3a93360c69 100644
824--- a/test/integration/targets/module_utils/module_utils/sub/bar/bam.py 606--- a/test/integration/targets/module_utils/module_utils/sub/bar/bam.py
825+++ b/test/integration/targets/module_utils/module_utils/sub/bar/bam.py 607+++ b/test/integration/targets/module_utils/module_utils/sub/bar/bam.py
826@@ -1,3 +1,3 @@ 608@@ -1,3 +1,3 @@
@@ -829,7 +611,7 @@ index 02fafd4..3a93360 100644
829 611
830 bam = "BAM FROM sub/bar/bam.py" 612 bam = "BAM FROM sub/bar/bam.py"
831diff --git a/test/integration/targets/module_utils/module_utils/sub/bar/bar.py b/test/integration/targets/module_utils/module_utils/sub/bar/bar.py 613diff --git a/test/integration/targets/module_utils/module_utils/sub/bar/bar.py b/test/integration/targets/module_utils/module_utils/sub/bar/bar.py
832index 8566901..40f0c94 100644 614index 8566901f04..40f0c9446c 100644
833--- a/test/integration/targets/module_utils/module_utils/sub/bar/bar.py 615--- a/test/integration/targets/module_utils/module_utils/sub/bar/bar.py
834+++ b/test/integration/targets/module_utils/module_utils/sub/bar/bar.py 616+++ b/test/integration/targets/module_utils/module_utils/sub/bar/bar.py
835@@ -1,3 +1,3 @@ 617@@ -1,3 +1,3 @@
@@ -837,396 +619,145 @@ index 8566901..40f0c94 100644
837+#!/usr/bin/env python3 619+#!/usr/bin/env python3
838 620
839 bar = "BAR FROM sub/bar/bar.py" 621 bar = "BAR FROM sub/bar/bar.py"
840diff --git a/test/integration/targets/service/files/ansible_test_service b/test/integration/targets/service/files/ansible_test_service 622diff --git a/test/integration/targets/packaging_cli-doc/verify.py b/test/integration/targets/packaging_cli-doc/verify.py
841index 682edeb..e858909 100755 623index 7793fa8c24..71f82186dd 100755
842--- a/test/integration/targets/service/files/ansible_test_service 624--- a/test/integration/targets/packaging_cli-doc/verify.py
843+++ b/test/integration/targets/service/files/ansible_test_service 625+++ b/test/integration/targets/packaging_cli-doc/verify.py
844@@ -1,4 +1,4 @@
845-#!/usr/bin/env python
846+#!/usr/bin/env python3
847
848 # this is mostly based off of the code found here:
849 # http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/
850diff --git a/test/runner/ansible-test b/test/runner/ansible-test
851index 801f07f..804aa8f 100755
852--- a/test/runner/ansible-test
853+++ b/test/runner/ansible-test
854@@ -1,4 +1,4 @@
855-#!/usr/bin/env python
856+#!/usr/bin/env python3
857 # PYTHON_ARGCOMPLETE_OK
858 """Test runner for all Ansible tests."""
859
860diff --git a/test/runner/injector/ansible b/test/runner/injector/ansible
861index 57241c9..c463946 100755
862--- a/test/runner/injector/ansible
863+++ b/test/runner/injector/ansible
864@@ -1,4 +1,4 @@
865-#!/usr/bin/env python
866+#!/usr/bin/env python3
867 """Code coverage wrapper."""
868
869 from __future__ import absolute_import, print_function
870diff --git a/test/runner/injector/ansible-console b/test/runner/injector/ansible-console
871index 57241c9..c463946 100755
872--- a/test/runner/injector/ansible-console
873+++ b/test/runner/injector/ansible-console
874@@ -1,4 +1,4 @@
875-#!/usr/bin/env python
876+#!/usr/bin/env python3
877 """Code coverage wrapper."""
878
879 from __future__ import absolute_import, print_function
880diff --git a/test/runner/injector/ansible-doc b/test/runner/injector/ansible-doc
881index 57241c9..c463946 100755
882--- a/test/runner/injector/ansible-doc
883+++ b/test/runner/injector/ansible-doc
884@@ -1,4 +1,4 @@
885-#!/usr/bin/env python
886+#!/usr/bin/env python3
887 """Code coverage wrapper."""
888
889 from __future__ import absolute_import, print_function
890diff --git a/test/runner/injector/ansible-galaxy b/test/runner/injector/ansible-galaxy
891index 57241c9..c463946 100755
892--- a/test/runner/injector/ansible-galaxy
893+++ b/test/runner/injector/ansible-galaxy
894@@ -1,4 +1,4 @@
895-#!/usr/bin/env python
896+#!/usr/bin/env python3
897 """Code coverage wrapper."""
898
899 from __future__ import absolute_import, print_function
900diff --git a/test/runner/injector/ansible-playbook b/test/runner/injector/ansible-playbook
901index 57241c9..c463946 100755
902--- a/test/runner/injector/ansible-playbook
903+++ b/test/runner/injector/ansible-playbook
904@@ -1,4 +1,4 @@
905-#!/usr/bin/env python
906+#!/usr/bin/env python3
907 """Code coverage wrapper."""
908
909 from __future__ import absolute_import, print_function
910diff --git a/test/runner/injector/ansible-pull b/test/runner/injector/ansible-pull
911index 57241c9..c463946 100755
912--- a/test/runner/injector/ansible-pull
913+++ b/test/runner/injector/ansible-pull
914@@ -1,4 +1,4 @@
915-#!/usr/bin/env python
916+#!/usr/bin/env python3
917 """Code coverage wrapper."""
918
919 from __future__ import absolute_import, print_function
920diff --git a/test/runner/injector/ansible-vault b/test/runner/injector/ansible-vault
921index 57241c9..c463946 100755
922--- a/test/runner/injector/ansible-vault
923+++ b/test/runner/injector/ansible-vault
924@@ -1,4 +1,4 @@
925-#!/usr/bin/env python
926+#!/usr/bin/env python3
927 """Code coverage wrapper."""
928
929 from __future__ import absolute_import, print_function
930diff --git a/test/runner/injector/cover b/test/runner/injector/cover
931index 57241c9..c463946 100755
932--- a/test/runner/injector/cover
933+++ b/test/runner/injector/cover
934@@ -1,4 +1,4 @@
935-#!/usr/bin/env python
936+#!/usr/bin/env python3
937 """Code coverage wrapper."""
938
939 from __future__ import absolute_import, print_function
940diff --git a/test/runner/injector/cover2 b/test/runner/injector/cover2
941index 57241c9..c463946 100755
942--- a/test/runner/injector/cover2
943+++ b/test/runner/injector/cover2
944@@ -1,4 +1,4 @@
945-#!/usr/bin/env python
946+#!/usr/bin/env python3
947 """Code coverage wrapper."""
948
949 from __future__ import absolute_import, print_function
950diff --git a/test/runner/injector/cover2.4 b/test/runner/injector/cover2.4
951index 57241c9..c463946 100755
952--- a/test/runner/injector/cover2.4
953+++ b/test/runner/injector/cover2.4
954@@ -1,4 +1,4 @@
955-#!/usr/bin/env python
956+#!/usr/bin/env python3
957 """Code coverage wrapper."""
958
959 from __future__ import absolute_import, print_function
960diff --git a/test/runner/injector/cover2.6 b/test/runner/injector/cover2.6
961index 57241c9..c463946 100755
962--- a/test/runner/injector/cover2.6
963+++ b/test/runner/injector/cover2.6
964@@ -1,4 +1,4 @@
965-#!/usr/bin/env python
966+#!/usr/bin/env python3
967 """Code coverage wrapper."""
968
969 from __future__ import absolute_import, print_function
970diff --git a/test/runner/injector/cover2.7 b/test/runner/injector/cover2.7
971index 57241c9..c463946 100755
972--- a/test/runner/injector/cover2.7
973+++ b/test/runner/injector/cover2.7
974@@ -1,4 +1,4 @@
975-#!/usr/bin/env python
976+#!/usr/bin/env python3
977 """Code coverage wrapper."""
978
979 from __future__ import absolute_import, print_function
980diff --git a/test/runner/injector/cover3 b/test/runner/injector/cover3
981index 57241c9..c463946 100755
982--- a/test/runner/injector/cover3
983+++ b/test/runner/injector/cover3
984@@ -1,4 +1,4 @@ 626@@ -1,4 +1,4 @@
985-#!/usr/bin/env python 627-#!/usr/bin/env python
986+#!/usr/bin/env python3 628+#!/usr/bin/env python3
987 """Code coverage wrapper."""
988 629
989 from __future__ import absolute_import, print_function 630 import os
990diff --git a/test/runner/injector/cover3.5 b/test/runner/injector/cover3.5 631 import pathlib
991index 57241c9..c463946 100755 632diff --git a/test/integration/targets/pause/test-pause.py b/test/integration/targets/pause/test-pause.py
992--- a/test/runner/injector/cover3.5 633index 3703470d06..dd14b2810d 100755
993+++ b/test/runner/injector/cover3.5 634--- a/test/integration/targets/pause/test-pause.py
994@@ -1,4 +1,4 @@ 635+++ b/test/integration/targets/pause/test-pause.py
995-#!/usr/bin/env python
996+#!/usr/bin/env python3
997 """Code coverage wrapper."""
998
999 from __future__ import absolute_import, print_function
1000diff --git a/test/runner/injector/cover3.6 b/test/runner/injector/cover3.6
1001index 57241c9..c463946 100755
1002--- a/test/runner/injector/cover3.6
1003+++ b/test/runner/injector/cover3.6
1004@@ -1,4 +1,4 @@
1005-#!/usr/bin/env python
1006+#!/usr/bin/env python3
1007 """Code coverage wrapper."""
1008
1009 from __future__ import absolute_import, print_function
1010diff --git a/test/runner/injector/injector.py b/test/runner/injector/injector.py
1011index 57241c9..c463946 100755
1012--- a/test/runner/injector/injector.py
1013+++ b/test/runner/injector/injector.py
1014@@ -1,4 +1,4 @@
1015-#!/usr/bin/env python
1016+#!/usr/bin/env python3
1017 """Code coverage wrapper."""
1018
1019 from __future__ import absolute_import, print_function
1020diff --git a/test/runner/injector/pytest b/test/runner/injector/pytest
1021index 57241c9..c463946 100755
1022--- a/test/runner/injector/pytest
1023+++ b/test/runner/injector/pytest
1024@@ -1,4 +1,4 @@
1025-#!/usr/bin/env python
1026+#!/usr/bin/env python3
1027 """Code coverage wrapper."""
1028
1029 from __future__ import absolute_import, print_function
1030diff --git a/test/runner/injector/runner b/test/runner/injector/runner
1031index 57241c9..c463946 100755
1032--- a/test/runner/injector/runner
1033+++ b/test/runner/injector/runner
1034@@ -1,4 +1,4 @@
1035-#!/usr/bin/env python
1036+#!/usr/bin/env python3
1037 """Code coverage wrapper."""
1038
1039 from __future__ import absolute_import, print_function
1040diff --git a/test/runner/injector/runner2 b/test/runner/injector/runner2
1041index 57241c9..c463946 100755
1042--- a/test/runner/injector/runner2
1043+++ b/test/runner/injector/runner2
1044@@ -1,4 +1,4 @@
1045-#!/usr/bin/env python
1046+#!/usr/bin/env python3
1047 """Code coverage wrapper."""
1048
1049 from __future__ import absolute_import, print_function
1050diff --git a/test/runner/injector/runner2.4 b/test/runner/injector/runner2.4
1051index 57241c9..c463946 100755
1052--- a/test/runner/injector/runner2.4
1053+++ b/test/runner/injector/runner2.4
1054@@ -1,4 +1,4 @@
1055-#!/usr/bin/env python
1056+#!/usr/bin/env python3
1057 """Code coverage wrapper."""
1058
1059 from __future__ import absolute_import, print_function
1060diff --git a/test/runner/injector/runner2.6 b/test/runner/injector/runner2.6
1061index 57241c9..c463946 100755
1062--- a/test/runner/injector/runner2.6
1063+++ b/test/runner/injector/runner2.6
1064@@ -1,4 +1,4 @@
1065-#!/usr/bin/env python
1066+#!/usr/bin/env python3
1067 """Code coverage wrapper."""
1068
1069 from __future__ import absolute_import, print_function
1070diff --git a/test/runner/injector/runner2.7 b/test/runner/injector/runner2.7
1071index 57241c9..c463946 100755
1072--- a/test/runner/injector/runner2.7
1073+++ b/test/runner/injector/runner2.7
1074@@ -1,4 +1,4 @@ 636@@ -1,4 +1,4 @@
1075-#!/usr/bin/env python 637-#!/usr/bin/env python
1076+#!/usr/bin/env python3 638+#!/usr/bin/env python3
1077 """Code coverage wrapper."""
1078 639
1079 from __future__ import absolute_import, print_function 640 from __future__ import (absolute_import, division, print_function)
1080diff --git a/test/runner/injector/runner3 b/test/runner/injector/runner3 641 __metaclass__ = type
1081index 57241c9..c463946 100755 642diff --git a/test/integration/targets/pip/files/setup.py b/test/integration/targets/pip/files/setup.py
1082--- a/test/runner/injector/runner3 643index aaf21875ca..2835719e4f 100755
1083+++ b/test/runner/injector/runner3 644--- a/test/integration/targets/pip/files/setup.py
645+++ b/test/integration/targets/pip/files/setup.py
1084@@ -1,4 +1,4 @@ 646@@ -1,4 +1,4 @@
1085-#!/usr/bin/env python 647-#!/usr/bin/env python
1086+#!/usr/bin/env python3 648+#!/usr/bin/env python3
1087 """Code coverage wrapper."""
1088 649
1089 from __future__ import absolute_import, print_function 650 from __future__ import (absolute_import, division, print_function)
1090diff --git a/test/runner/injector/runner3.5 b/test/runner/injector/runner3.5 651 __metaclass__ = type
1091index 57241c9..c463946 100755 652diff --git a/test/integration/targets/service/files/ansible_test_service.py b/test/integration/targets/service/files/ansible_test_service.py
1092--- a/test/runner/injector/runner3.5 653index 522493fcc7..b3aaf7f6b4 100644
1093+++ b/test/runner/injector/runner3.5 654--- a/test/integration/targets/service/files/ansible_test_service.py
655+++ b/test/integration/targets/service/files/ansible_test_service.py
1094@@ -1,4 +1,4 @@ 656@@ -1,4 +1,4 @@
1095-#!/usr/bin/env python 657-#!/usr/bin/env python
1096+#!/usr/bin/env python3 658+#!/usr/bin/env python3
1097 """Code coverage wrapper."""
1098 659
1099 from __future__ import absolute_import, print_function 660 # this is mostly based off of the code found here:
1100diff --git a/test/runner/injector/runner3.6 b/test/runner/injector/runner3.6 661 # http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/
1101index 57241c9..c463946 100755 662diff --git a/test/integration/targets/service_facts/files/ansible_test_service.py b/test/integration/targets/service_facts/files/ansible_test_service.py
1102--- a/test/runner/injector/runner3.6 663index 19f1e29138..609218325d 100644
1103+++ b/test/runner/injector/runner3.6 664--- a/test/integration/targets/service_facts/files/ansible_test_service.py
665+++ b/test/integration/targets/service_facts/files/ansible_test_service.py
1104@@ -1,4 +1,4 @@ 666@@ -1,4 +1,4 @@
1105-#!/usr/bin/env python 667-#!/usr/bin/env python
1106+#!/usr/bin/env python3 668+#!/usr/bin/env python3
1107 """Code coverage wrapper."""
1108 669
1109 from __future__ import absolute_import, print_function 670 # this is mostly based off of the code found here:
1110diff --git a/test/runner/retry.py b/test/runner/retry.py 671 # http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/
1111index 4972131..a9ffb07 100755 672diff --git a/test/integration/targets/template/role_filter/filter_plugins/myplugin.py b/test/integration/targets/template/role_filter/filter_plugins/myplugin.py
1112--- a/test/runner/retry.py 673index b0a8889439..90c83b582b 100644
1113+++ b/test/runner/retry.py 674--- a/test/integration/targets/template/role_filter/filter_plugins/myplugin.py
675+++ b/test/integration/targets/template/role_filter/filter_plugins/myplugin.py
1114@@ -1,4 +1,4 @@ 676@@ -1,4 +1,4 @@
1115-#!/usr/bin/env python 677-#!/usr/bin/env python
1116+#!/usr/bin/env python3 678+#!/usr/bin/env python3
1117 # PYTHON_ARGCOMPLETE_OK
1118 """Automatically retry failed commands."""
1119 679
1120diff --git a/test/runner/test.py b/test/runner/test.py 680 from __future__ import (absolute_import, division, print_function)
1121index 801f07f..804aa8f 100755 681 __metaclass__ = type
1122--- a/test/runner/test.py 682diff --git a/test/integration/targets/throttle/test_throttle.py b/test/integration/targets/throttle/test_throttle.py
1123+++ b/test/runner/test.py 683index 1a5bdd3078..344bcf0f86 100755
684--- a/test/integration/targets/throttle/test_throttle.py
685+++ b/test/integration/targets/throttle/test_throttle.py
1124@@ -1,4 +1,4 @@ 686@@ -1,4 +1,4 @@
1125-#!/usr/bin/env python 687-#!/usr/bin/env python
1126+#!/usr/bin/env python3 688+#!/usr/bin/env python3
1127 # PYTHON_ARGCOMPLETE_OK
1128 """Test runner for all Ansible tests."""
1129 689
1130diff --git a/test/sanity/code-smell/ansible-var-precedence-check.py b/test/sanity/code-smell/ansible-var-precedence-check.py 690 from __future__ import (absolute_import, division, print_function)
1131index e10c097..13c7a73 100755 691 __metaclass__ = type
1132--- a/test/sanity/code-smell/ansible-var-precedence-check.py 692diff --git a/test/integration/targets/var_precedence/ansible-var-precedence-check.py b/test/integration/targets/var_precedence/ansible-var-precedence-check.py
1133+++ b/test/sanity/code-smell/ansible-var-precedence-check.py 693index fc31688be2..f964bbe8d6 100755
694--- a/test/integration/targets/var_precedence/ansible-var-precedence-check.py
695+++ b/test/integration/targets/var_precedence/ansible-var-precedence-check.py
1134@@ -1,4 +1,4 @@ 696@@ -1,4 +1,4 @@
1135-#!/usr/bin/env python 697-#!/usr/bin/env python
1136+#!/usr/bin/env python3 698+#!/usr/bin/env python3
1137 699
1138 # A tool to check the order of precedence for ansible variables 700 # A tool to check the order of precedence for ansible variables
1139 # https://github.com/ansible/ansible/blob/devel/test/integration/test_var_precedence.yml 701 # https://github.com/ansible/ansible/blob/devel/test/integration/test_var_precedence.yml
1140diff --git a/test/sanity/code-smell/integration-aliases.py b/test/sanity/code-smell/integration-aliases.py 702diff --git a/test/lib/ansible_test/_internal/util_common.py b/test/lib/ansible_test/_internal/util_common.py
1141index 50301e3..ac53ca9 100755 703index 222366e473..2b11060113 100644
1142--- a/test/sanity/code-smell/integration-aliases.py 704--- a/test/lib/ansible_test/_internal/util_common.py
1143+++ b/test/sanity/code-smell/integration-aliases.py 705+++ b/test/lib/ansible_test/_internal/util_common.py
1144@@ -1,4 +1,4 @@ 706@@ -303,7 +303,7 @@ def get_injector_path() -> str:
1145-#!/usr/bin/env python 707 ])
1146+#!/usr/bin/env python3 708
1147 709 scripts = (
1148 import os 710- ('python.py', '/usr/bin/env python', MODE_FILE_EXECUTE),
1149 import textwrap 711+ ('python.py', '/usr/bin/env python3', MODE_FILE_EXECUTE),
1150diff --git a/test/sanity/code-smell/shebang.sh b/test/sanity/code-smell/shebang.sh 712 ('virtualenv.sh', '/usr/bin/env bash', MODE_FILE),
1151index 76d72c1..565a198 100755 713 )
1152--- a/test/sanity/code-smell/shebang.sh 714
1153+++ b/test/sanity/code-smell/shebang.sh 715diff --git a/test/lib/ansible_test/_util/controller/sanity/code-smell/shebang.py b/test/lib/ansible_test/_util/controller/sanity/code-smell/shebang.py
1154@@ -8,11 +8,11 @@ grep '^#!' -rIn . \ 716index b0b1319783..9535c3b481 100644
1155 -e '^\./test/integration/targets/[^/]*/library/[^/]*:#!powershell$' \ 717--- a/test/lib/ansible_test/_util/controller/sanity/code-smell/shebang.py
1156 -e '^\./test/integration/targets/[^/]*/library/[^/]*:#!/usr/bin/python$' \ 718+++ b/test/lib/ansible_test/_util/controller/sanity/code-smell/shebang.py
1157 -e '^\./test/integration/targets/module_precedence/.*lib.*:#!/usr/bin/python$' \ 719@@ -16,14 +16,14 @@ def main():
1158- -e '^\./hacking/cherrypick.py:#!/usr/bin/env python3$' \ 720 b'#!/usr/bin/env bash',
1159+ -e '^\./hacking/cherrypick.py:#!/usr/bin/env python33$' \ 721 b'#!/usr/bin/env fish',
1160 -e ':#!/bin/sh$' \ 722 b'#!/usr/bin/env pwsh',
1161 -e ':#!/bin/bash( -[eux]|$)' \ 723- b'#!/usr/bin/env python',
1162 -e ':#!/usr/bin/make -f$' \ 724+ b'#!/usr/bin/env python3',
1163- -e ':#!/usr/bin/env python$' \ 725 b'#!/usr/bin/make -f',
1164+ -e ':#!/usr/bin/env python3$' \ 726 ])
1165 -e ':#!/usr/bin/env bash$' \ 727
1166 -e ':#!/usr/bin/env fish$' \ 728 integration_shebangs = set([
1167 729 b'#!/bin/sh',
1168diff --git a/test/sanity/validate-modules/test_validate_modules_regex.py b/test/sanity/validate-modules/test_validate_modules_regex.py 730 b'#!/usr/bin/env bash',
1169index 0e41ee7..8a86b07 100644 731- b'#!/usr/bin/env python',
1170--- a/test/sanity/validate-modules/test_validate_modules_regex.py 732+ b'#!/usr/bin/env python3',
1171+++ b/test/sanity/validate-modules/test_validate_modules_regex.py 733 ])
734
735 module_shebangs = {
736diff --git a/test/lib/ansible_test/_util/target/cli/ansible_test_cli_stub.py b/test/lib/ansible_test/_util/target/cli/ansible_test_cli_stub.py
737index 930654fc1e..bbf50369d7 100755
738--- a/test/lib/ansible_test/_util/target/cli/ansible_test_cli_stub.py
739+++ b/test/lib/ansible_test/_util/target/cli/ansible_test_cli_stub.py
1172@@ -1,4 +1,4 @@ 740@@ -1,4 +1,4 @@
1173-#!/usr/bin/env python 741-#!/usr/bin/env python
1174+#!/usr/bin/env python3 742+#!/usr/bin/env python3
743 # PYTHON_ARGCOMPLETE_OK
744 """Command line entry point for ansible-test."""
1175 745
1176 # This is a standalone test for the regex inside validate-modules
1177 # It is not suitable to add to the make tests target because the
1178diff --git a/test/sanity/validate-modules/validate-modules b/test/sanity/validate-modules/validate-modules
1179index d03bff1..201cd41 100755
1180--- a/test/sanity/validate-modules/validate-modules
1181+++ b/test/sanity/validate-modules/validate-modules
1182@@ -1,4 +1,4 @@
1183-#!/usr/bin/env python
1184+#!/usr/bin/env python3
1185 # -*- coding: utf-8 -*-
1186 #
1187 # Copyright (C) 2015 Matt Martz <matt@sivel.net>
1188diff --git a/test/units/executor/module_common/test_module_common.py b/test/units/executor/module_common/test_module_common.py 746diff --git a/test/units/executor/module_common/test_module_common.py b/test/units/executor/module_common/test_module_common.py
1189index edbf836..1f3bb5a 100644 747index fa6add8cd6..fcfd096e54 100644
1190--- a/test/units/executor/module_common/test_module_common.py 748--- a/test/units/executor/module_common/test_module_common.py
1191+++ b/test/units/executor/module_common/test_module_common.py 749+++ b/test/units/executor/module_common/test_module_common.py
1192@@ -114,5 +114,5 @@ class TestGetShebang(object): 750@@ -132,8 +132,8 @@ class TestGetShebang:
1193 (u'#!/usr/bin/python3 -tt -OO', u'/usr/bin/python3') 751 (u'#!/usr/bin/python3 -tt -OO', u'/usr/bin/python3')
1194 752
1195 def test_python_via_env(self): 753 def test_python_via_env(self, templar):
1196- assert amc._get_shebang(u'/usr/bin/python', {u'ansible_python_interpreter': u'/usr/bin/env python'}) == \ 754- assert amc._get_shebang(u'/usr/bin/python', {u'ansible_python_interpreter': u'/usr/bin/env python'}, templar) == \
1197- (u'#!/usr/bin/env python', u'/usr/bin/env python') 755- (u'#!/usr/bin/env python', u'/usr/bin/env python')
1198+ assert amc._get_shebang(u'/usr/bin/python', {u'ansible_python_interpreter': u'/usr/bin/env python3'}) == \ 756+ assert amc._get_shebang(u'/usr/bin/python', {u'ansible_python_interpreter': u'/usr/bin/env python3'}, templar) == \
1199+ (u'#!/usr/bin/env python3', u'/usr/bin/env python') 757+ (u'#!/usr/bin/env python3', u'/usr/bin/env python3')
1200diff --git a/test/units/modules/network/nxos/test_nxos_config.py b/test/units/modules/network/nxos/test_nxos_config.py
1201index 8e3a59c..46764a8 100644
1202--- a/test/units/modules/network/nxos/test_nxos_config.py
1203+++ b/test/units/modules/network/nxos/test_nxos_config.py
1204@@ -1,4 +1,4 @@
1205-#!/usr/bin/env python
1206+#!/usr/bin/env python3
1207 #
1208 # (c) 2016 Red Hat Inc.
1209 #
1210diff --git a/test/utils/shippable/ansible-core-ci b/test/utils/shippable/ansible-core-ci
1211index e91b426..44f8fb9 100755
1212--- a/test/utils/shippable/ansible-core-ci
1213+++ b/test/utils/shippable/ansible-core-ci
1214@@ -1,4 +1,4 @@
1215-#!/usr/bin/env python
1216+#!/usr/bin/env python3
1217 758
1218 # (c) 2016 Matt Clay <matt@mystile.com>
1219 #
1220diff --git a/test/utils/shippable/download.py b/test/utils/shippable/download.py
1221index cbda144..e86c8e6 100755
1222--- a/test/utils/shippable/download.py
1223+++ b/test/utils/shippable/download.py
1224@@ -1,4 +1,4 @@
1225-#!/usr/bin/env python
1226+#!/usr/bin/env python3
1227 # PYTHON_ARGCOMPLETE_OK
1228 759
1229 # (c) 2016 Red Hat, Inc. 760 class TestDetectionRegexes:
1230-- 761--
12312.7.4 7622.40.0
1232 763
diff --git a/recipes-devtools/python/python3-ansible_2.3.1.0.bb b/recipes-devtools/python/python3-ansible_2.14.11.bb
index ea0fdbe..ea0fdbe 100644
--- a/recipes-devtools/python/python3-ansible_2.3.1.0.bb
+++ b/recipes-devtools/python/python3-ansible_2.14.11.bb