summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Belanger <pabelanger@redhat.com>2019-08-06 11:46:33 -0400
committerPaul Belanger <pabelanger@redhat.com>2019-12-10 11:28:35 -0500
commit15afed554e2bbac87aad83b0a42cd47c66858cfd (patch)
tree22f935f9e765608bf8a46f729e83826e600916a9
parentdb0fd4e57d918182e800a8b6d83e08595f94a1c4 (diff)
downloadzuul-15afed554e2bbac87aad83b0a42cd47c66858cfd.tar.gz
Support Ansible 2.9
Ansible has released 2.9 and now Zuul also supports it. Change-Id: Iabf2d6278ba8d88e17403a4adae5521eb3e7019b Signed-off-by: Paul Belanger <pabelanger@redhat.com>
-rw-r--r--.zuul.yaml10
-rw-r--r--releasenotes/notes/ansible-2.9-0a868d1c3f216327.yaml4
-rw-r--r--tests/fixtures/config/ansible-versions/git/common-config/zuul.yaml10
-rw-r--r--tests/remote/test_remote_action_modules.py4
-rw-r--r--tests/remote/test_remote_zuul_json.py4
-rw-r--r--tests/remote/test_remote_zuul_stream.py4
-rw-r--r--tests/unit/test_v3.py6
l---------zuul/ansible/2.9/action/__init__.py1
l---------zuul/ansible/2.9/action/add_host.py1
l---------zuul/ansible/2.9/action/add_host.pyi1
l---------zuul/ansible/2.9/action/aireos.py1
l---------zuul/ansible/2.9/action/aireos.pyi1
l---------zuul/ansible/2.9/action/aireos_config.py1
l---------zuul/ansible/2.9/action/aireos_config.pyi1
l---------zuul/ansible/2.9/action/aruba.py1
l---------zuul/ansible/2.9/action/aruba.pyi1
l---------zuul/ansible/2.9/action/aruba_config.py1
l---------zuul/ansible/2.9/action/aruba_config.pyi1
l---------zuul/ansible/2.9/action/asa.py1
l---------zuul/ansible/2.9/action/asa.pyi1
l---------zuul/ansible/2.9/action/asa_config.py1
l---------zuul/ansible/2.9/action/asa_config.pyi1
l---------zuul/ansible/2.9/action/asa_template.py1
l---------zuul/ansible/2.9/action/asa_template.pyi1
l---------zuul/ansible/2.9/action/assemble.py1
l---------zuul/ansible/2.9/action/assemble.pyi1
l---------zuul/ansible/2.9/action/aws_s3.py1
l---------zuul/ansible/2.9/action/aws_s3.pyi1
l---------zuul/ansible/2.9/action/ce.py1
l---------zuul/ansible/2.9/action/ce.pyi1
l---------zuul/ansible/2.9/action/ce_config.py1
l---------zuul/ansible/2.9/action/ce_config.pyi1
l---------zuul/ansible/2.9/action/ce_template.py1
l---------zuul/ansible/2.9/action/ce_template.pyi1
l---------zuul/ansible/2.9/action/copy.py1
l---------zuul/ansible/2.9/action/copy.pyi1
l---------zuul/ansible/2.9/action/dellos10_config.py1
l---------zuul/ansible/2.9/action/dellos10_config.pyi1
l---------zuul/ansible/2.9/action/dellos6_config.py1
l---------zuul/ansible/2.9/action/dellos6_config.pyi1
l---------zuul/ansible/2.9/action/dellos9_config.py1
l---------zuul/ansible/2.9/action/dellos9_config.pyi1
l---------zuul/ansible/2.9/action/eos_config.py1
l---------zuul/ansible/2.9/action/eos_config.pyi1
l---------zuul/ansible/2.9/action/eos_template.py1
l---------zuul/ansible/2.9/action/eos_template.pyi1
l---------zuul/ansible/2.9/action/fetch.py1
l---------zuul/ansible/2.9/action/fetch.pyi1
l---------zuul/ansible/2.9/action/fortios_config.py1
l---------zuul/ansible/2.9/action/fortios_config.pyi1
l---------zuul/ansible/2.9/action/include_vars.py1
l---------zuul/ansible/2.9/action/include_vars.pyi1
l---------zuul/ansible/2.9/action/ios_config.py1
l---------zuul/ansible/2.9/action/ios_config.pyi1
l---------zuul/ansible/2.9/action/ios_template.py1
l---------zuul/ansible/2.9/action/ios_template.pyi1
l---------zuul/ansible/2.9/action/iosxr_config.py1
l---------zuul/ansible/2.9/action/iosxr_config.pyi1
l---------zuul/ansible/2.9/action/iosxr_template.py1
l---------zuul/ansible/2.9/action/iosxr_template.pyi1
l---------zuul/ansible/2.9/action/junos_config.py1
l---------zuul/ansible/2.9/action/junos_config.pyi1
l---------zuul/ansible/2.9/action/junos_template.py1
l---------zuul/ansible/2.9/action/junos_template.pyi1
l---------zuul/ansible/2.9/action/net_banner.py1
l---------zuul/ansible/2.9/action/net_banner.pyi1
l---------zuul/ansible/2.9/action/net_base.py1
l---------zuul/ansible/2.9/action/net_base.pyi1
l---------zuul/ansible/2.9/action/net_config.py1
l---------zuul/ansible/2.9/action/net_config.pyi1
l---------zuul/ansible/2.9/action/net_get.py1
l---------zuul/ansible/2.9/action/net_get.pyi1
l---------zuul/ansible/2.9/action/net_interface.py1
l---------zuul/ansible/2.9/action/net_interface.pyi1
l---------zuul/ansible/2.9/action/net_l2_interface.py1
l---------zuul/ansible/2.9/action/net_l2_interface.pyi1
l---------zuul/ansible/2.9/action/net_l3_interface.py1
l---------zuul/ansible/2.9/action/net_l3_interface.pyi1
l---------zuul/ansible/2.9/action/net_linkagg.py1
l---------zuul/ansible/2.9/action/net_linkagg.pyi1
l---------zuul/ansible/2.9/action/net_lldp.py1
l---------zuul/ansible/2.9/action/net_lldp.pyi1
l---------zuul/ansible/2.9/action/net_lldp_interface.py1
l---------zuul/ansible/2.9/action/net_lldp_interface.pyi1
l---------zuul/ansible/2.9/action/net_logging.py1
l---------zuul/ansible/2.9/action/net_logging.pyi1
l---------zuul/ansible/2.9/action/net_ping.py1
l---------zuul/ansible/2.9/action/net_ping.pyi1
l---------zuul/ansible/2.9/action/net_static_route.py1
l---------zuul/ansible/2.9/action/net_static_route.pyi1
l---------zuul/ansible/2.9/action/net_system.py1
l---------zuul/ansible/2.9/action/net_system.pyi1
l---------zuul/ansible/2.9/action/net_template.py1
l---------zuul/ansible/2.9/action/net_template.pyi1
l---------zuul/ansible/2.9/action/net_user.py1
l---------zuul/ansible/2.9/action/net_user.pyi1
l---------zuul/ansible/2.9/action/net_vlan.py1
l---------zuul/ansible/2.9/action/net_vlan.pyi1
l---------zuul/ansible/2.9/action/net_vrf.py1
l---------zuul/ansible/2.9/action/net_vrf.pyi1
l---------zuul/ansible/2.9/action/netconf_config.py1
l---------zuul/ansible/2.9/action/netconf_config.pyi1
l---------zuul/ansible/2.9/action/network.py1
l---------zuul/ansible/2.9/action/network.pyi1
l---------zuul/ansible/2.9/action/normal.py1
l---------zuul/ansible/2.9/action/normal.pyi1
l---------zuul/ansible/2.9/action/nxos_config.py1
l---------zuul/ansible/2.9/action/nxos_config.pyi1
l---------zuul/ansible/2.9/action/nxos_template.py1
l---------zuul/ansible/2.9/action/nxos_template.pyi1
l---------zuul/ansible/2.9/action/ops_config.py1
l---------zuul/ansible/2.9/action/ops_config.pyi1
l---------zuul/ansible/2.9/action/ops_template.py1
l---------zuul/ansible/2.9/action/ops_template.pyi1
l---------zuul/ansible/2.9/action/patch.py1
l---------zuul/ansible/2.9/action/patch.pyi1
l---------zuul/ansible/2.9/action/raw.py1
l---------zuul/ansible/2.9/action/raw.pyi1
l---------zuul/ansible/2.9/action/script.py1
l---------zuul/ansible/2.9/action/script.pyi1
l---------zuul/ansible/2.9/action/sros_config.py1
l---------zuul/ansible/2.9/action/sros_config.pyi1
l---------zuul/ansible/2.9/action/synchronize.py1
l---------zuul/ansible/2.9/action/synchronize.pyi1
l---------zuul/ansible/2.9/action/template.py1
l---------zuul/ansible/2.9/action/template.pyi1
l---------zuul/ansible/2.9/action/unarchive.py1
l---------zuul/ansible/2.9/action/unarchive.pyi1
l---------zuul/ansible/2.9/action/uri.py1
l---------zuul/ansible/2.9/action/uri.pyi1
l---------zuul/ansible/2.9/action/vyos_config.py1
l---------zuul/ansible/2.9/action/vyos_config.pyi1
l---------zuul/ansible/2.9/action/win_copy.py1
l---------zuul/ansible/2.9/action/win_copy.pyi1
l---------zuul/ansible/2.9/action/win_template.py1
l---------zuul/ansible/2.9/action/win_template.pyi1
l---------zuul/ansible/2.9/actiongeneral/__init__.py1
l---------zuul/ansible/2.9/actiongeneral/command.py1
l---------zuul/ansible/2.9/actiongeneral/command.pyi1
l---------zuul/ansible/2.9/actiongeneral/zuul_return.py1
l---------zuul/ansible/2.9/callback/__init__.py1
l---------zuul/ansible/2.9/callback/zuul_json.py1
l---------zuul/ansible/2.9/callback/zuul_stream.py1
l---------zuul/ansible/2.9/callback/zuul_unreachable.py1
l---------zuul/ansible/2.9/filter/__init__.py1
l---------zuul/ansible/2.9/filter/zuul_filters.py1
l---------zuul/ansible/2.9/library/__init__.py1
l---------zuul/ansible/2.9/library/command.py1
l---------zuul/ansible/2.9/library/zuul_console.py1
l---------zuul/ansible/2.9/logconfig.py1
l---------zuul/ansible/2.9/lookup/__init__.py1
l---------zuul/ansible/2.9/lookup/_banned.py1
l---------zuul/ansible/2.9/lookup/_banned.pyi1
l---------zuul/ansible/2.9/lookup/chef_databag.py1
l---------zuul/ansible/2.9/lookup/chef_databag.pyi1
l---------zuul/ansible/2.9/lookup/consul_kv.py1
l---------zuul/ansible/2.9/lookup/consul_kv.pyi1
l---------zuul/ansible/2.9/lookup/credstash.py1
l---------zuul/ansible/2.9/lookup/credstash.pyi1
l---------zuul/ansible/2.9/lookup/csvfile.py1
l---------zuul/ansible/2.9/lookup/csvfile.pyi1
l---------zuul/ansible/2.9/lookup/cyberarkpassword.py1
l---------zuul/ansible/2.9/lookup/cyberarkpassword.pyi1
l---------zuul/ansible/2.9/lookup/dig.py1
l---------zuul/ansible/2.9/lookup/dig.pyi1
l---------zuul/ansible/2.9/lookup/dnstxt.py1
l---------zuul/ansible/2.9/lookup/dnstxt.pyi1
l---------zuul/ansible/2.9/lookup/env.py1
l---------zuul/ansible/2.9/lookup/env.pyi1
l---------zuul/ansible/2.9/lookup/etcd.py1
l---------zuul/ansible/2.9/lookup/etcd.pyi1
l---------zuul/ansible/2.9/lookup/file.py1
l---------zuul/ansible/2.9/lookup/file.pyi1
l---------zuul/ansible/2.9/lookup/fileglob.py1
l---------zuul/ansible/2.9/lookup/fileglob.pyi1
l---------zuul/ansible/2.9/lookup/filetree.py1
l---------zuul/ansible/2.9/lookup/filetree.pyi1
l---------zuul/ansible/2.9/lookup/first_found.py1
l---------zuul/ansible/2.9/lookup/first_found.pyi1
l---------zuul/ansible/2.9/lookup/hashi_vault.py1
l---------zuul/ansible/2.9/lookup/hashi_vault.pyi1
l---------zuul/ansible/2.9/lookup/hiera.py1
l---------zuul/ansible/2.9/lookup/hiera.pyi1
l---------zuul/ansible/2.9/lookup/ini.py1
l---------zuul/ansible/2.9/lookup/ini.pyi1
l---------zuul/ansible/2.9/lookup/keyring.py1
l---------zuul/ansible/2.9/lookup/keyring.pyi1
l---------zuul/ansible/2.9/lookup/lastpass.py1
l---------zuul/ansible/2.9/lookup/lastpass.pyi1
l---------zuul/ansible/2.9/lookup/lines.py1
l---------zuul/ansible/2.9/lookup/lines.pyi1
l---------zuul/ansible/2.9/lookup/mongodb.py1
l---------zuul/ansible/2.9/lookup/mongodb.pyi1
l---------zuul/ansible/2.9/lookup/password.py1
l---------zuul/ansible/2.9/lookup/password.pyi1
l---------zuul/ansible/2.9/lookup/passwordstore.py1
l---------zuul/ansible/2.9/lookup/passwordstore.pyi1
l---------zuul/ansible/2.9/lookup/pipe.py1
l---------zuul/ansible/2.9/lookup/pipe.pyi1
l---------zuul/ansible/2.9/lookup/redis_kv.py1
l---------zuul/ansible/2.9/lookup/redis_kv.pyi1
l---------zuul/ansible/2.9/lookup/shelvefile.py1
l---------zuul/ansible/2.9/lookup/shelvefile.pyi1
l---------zuul/ansible/2.9/lookup/template.py1
l---------zuul/ansible/2.9/lookup/template.pyi1
l---------zuul/ansible/2.9/lookup/url.py1
l---------zuul/ansible/2.9/lookup/url.pyi1
l---------zuul/ansible/2.9/paths.py1
-rw-r--r--zuul/ansible/base/callback/zuul_stream.py14
-rw-r--r--zuul/lib/ansible-config.conf3
210 files changed, 260 insertions, 0 deletions
diff --git a/.zuul.yaml b/.zuul.yaml
index 718c8ee45..1fe343c15 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -64,6 +64,14 @@
zuul_ansible_version: 2.8
- job:
+ name: zuul-stream-functional-2.9
+ parent: zuul-stream-functional
+ success-url: 'http://zuul.opendev.org/t/zuul/build/{build.uuid}'
+ failure-url: 'http://zuul.opendev.org/t/zuul/build/{build.uuid}'
+ vars:
+ zuul_ansible_version: 2.9
+
+- job:
name: zuul-tox-remote
parent: tox
vars:
@@ -223,6 +231,7 @@
- zuul-stream-functional-2.6
- zuul-stream-functional-2.7
- zuul-stream-functional-2.8
+ - zuul-stream-functional-2.9
- zuul-tox-remote:
timeout: 2700 # 45 minutes
- zuul-quick-start:
@@ -268,6 +277,7 @@
- zuul-stream-functional-2.6
- zuul-stream-functional-2.7
- zuul-stream-functional-2.8
+ - zuul-stream-functional-2.9
- zuul-tox-remote:
timeout: 2700 # 45 minutes
- zuul-quick-start:
diff --git a/releasenotes/notes/ansible-2.9-0a868d1c3f216327.yaml b/releasenotes/notes/ansible-2.9-0a868d1c3f216327.yaml
new file mode 100644
index 000000000..7510c1935
--- /dev/null
+++ b/releasenotes/notes/ansible-2.9-0a868d1c3f216327.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - |
+ Zuul now supports Ansible 2.9 for running jobs.
diff --git a/tests/fixtures/config/ansible-versions/git/common-config/zuul.yaml b/tests/fixtures/config/ansible-versions/git/common-config/zuul.yaml
index 49b129a91..b787b5f38 100644
--- a/tests/fixtures/config/ansible-versions/git/common-config/zuul.yaml
+++ b/tests/fixtures/config/ansible-versions/git/common-config/zuul.yaml
@@ -68,6 +68,14 @@
test_ansible_version_major: 2
test_ansible_version_minor: 8
+- job:
+ name: ansible-29
+ parent: ansible-version
+ ansible-version: 2.9
+ vars:
+ test_ansible_version_major: 2
+ test_ansible_version_minor: 9
+
- project:
name: common-config
@@ -78,6 +86,7 @@
- ansible-26
- ansible-27
- ansible-28
+ - ansible-29
- project:
name: org/project
@@ -88,3 +97,4 @@
- ansible-26
- ansible-27
- ansible-28
+ - ansible-29
diff --git a/tests/remote/test_remote_action_modules.py b/tests/remote/test_remote_action_modules.py
index f05a06ec4..8d1d5d36f 100644
--- a/tests/remote/test_remote_action_modules.py
+++ b/tests/remote/test_remote_action_modules.py
@@ -228,3 +228,7 @@ class TestActionModules27(TestActionModules25):
class TestActionModules28(TestActionModules25):
ansible_version = '2.8'
+
+
+class TestActionModules29(TestActionModules28):
+ ansible_version = '2.9'
diff --git a/tests/remote/test_remote_zuul_json.py b/tests/remote/test_remote_zuul_json.py
index c2451151c..c67d68ab5 100644
--- a/tests/remote/test_remote_zuul_json.py
+++ b/tests/remote/test_remote_zuul_json.py
@@ -191,3 +191,7 @@ class TestZuulJSON28(TestZuulJSON25):
role_path = json_result[0]['plays'][0]['tasks'][1]['role']['path']
self.assertEqual('json-role', os.path.basename(role_path))
+
+
+class TestZuulJSON29(TestZuulJSON28):
+ ansible_version = '2.9'
diff --git a/tests/remote/test_remote_zuul_stream.py b/tests/remote/test_remote_zuul_stream.py
index 384fe75e6..ffe33ad5e 100644
--- a/tests/remote/test_remote_zuul_stream.py
+++ b/tests/remote/test_remote_zuul_stream.py
@@ -275,3 +275,7 @@ class TestZuulStream28(TestZuulStream25):
self.assertLogLine(
r'RUN END RESULT_NORMAL: \[untrusted : review.example.com/'
r'org/project/playbooks/command.yaml@master]', text)
+
+
+class TestZuulStream29(TestZuulStream28):
+ ansible_version = '2.9'
diff --git a/tests/unit/test_v3.py b/tests/unit/test_v3.py
index a6241806f..fffcd1753 100644
--- a/tests/unit/test_v3.py
+++ b/tests/unit/test_v3.py
@@ -2776,6 +2776,10 @@ class TestAnsible28(TestAnsible25):
ansible_version = '2.8'
+class TestAnsible29(TestAnsible28):
+ ansible_version = '2.9'
+
+
class TestPrePlaybooks(AnsibleZuulTestCase):
# A temporary class to hold new tests while others are disabled
@@ -6224,6 +6228,7 @@ class TestAnsibleVersion(AnsibleZuulTestCase):
dict(name='ansible-26', result='SUCCESS', changes='1,1'),
dict(name='ansible-27', result='SUCCESS', changes='1,1'),
dict(name='ansible-28', result='SUCCESS', changes='1,1'),
+ dict(name='ansible-29', result='SUCCESS', changes='1,1'),
], ordered=False)
@@ -6246,4 +6251,5 @@ class TestDefaultAnsibleVersion(AnsibleZuulTestCase):
dict(name='ansible-26', result='SUCCESS', changes='1,1'),
dict(name='ansible-27', result='SUCCESS', changes='1,1'),
dict(name='ansible-28', result='SUCCESS', changes='1,1'),
+ dict(name='ansible-29', result='SUCCESS', changes='1,1'),
], ordered=False)
diff --git a/zuul/ansible/2.9/action/__init__.py b/zuul/ansible/2.9/action/__init__.py
new file mode 120000
index 000000000..4048e7ac1
--- /dev/null
+++ b/zuul/ansible/2.9/action/__init__.py
@@ -0,0 +1 @@
+../../base/action/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/add_host.py b/zuul/ansible/2.9/action/add_host.py
new file mode 120000
index 000000000..fdb7f466b
--- /dev/null
+++ b/zuul/ansible/2.9/action/add_host.py
@@ -0,0 +1 @@
+../../base/action/add_host.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/add_host.pyi b/zuul/ansible/2.9/action/add_host.pyi
new file mode 120000
index 000000000..9257939ce
--- /dev/null
+++ b/zuul/ansible/2.9/action/add_host.pyi
@@ -0,0 +1 @@
+../../base/action/add_host.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aireos.py b/zuul/ansible/2.9/action/aireos.py
new file mode 120000
index 000000000..f2459ab86
--- /dev/null
+++ b/zuul/ansible/2.9/action/aireos.py
@@ -0,0 +1 @@
+../../base/action/aireos.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aireos.pyi b/zuul/ansible/2.9/action/aireos.pyi
new file mode 120000
index 000000000..f58722a86
--- /dev/null
+++ b/zuul/ansible/2.9/action/aireos.pyi
@@ -0,0 +1 @@
+../../base/action/aireos.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aireos_config.py b/zuul/ansible/2.9/action/aireos_config.py
new file mode 120000
index 000000000..acc0dd85e
--- /dev/null
+++ b/zuul/ansible/2.9/action/aireos_config.py
@@ -0,0 +1 @@
+../../base/action/aireos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aireos_config.pyi b/zuul/ansible/2.9/action/aireos_config.pyi
new file mode 120000
index 000000000..fc7b16cf6
--- /dev/null
+++ b/zuul/ansible/2.9/action/aireos_config.pyi
@@ -0,0 +1 @@
+../../base/action/aireos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aruba.py b/zuul/ansible/2.9/action/aruba.py
new file mode 120000
index 000000000..8784b92ed
--- /dev/null
+++ b/zuul/ansible/2.9/action/aruba.py
@@ -0,0 +1 @@
+../../base/action/aruba.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aruba.pyi b/zuul/ansible/2.9/action/aruba.pyi
new file mode 120000
index 000000000..228b3ecfe
--- /dev/null
+++ b/zuul/ansible/2.9/action/aruba.pyi
@@ -0,0 +1 @@
+../../base/action/aruba.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aruba_config.py b/zuul/ansible/2.9/action/aruba_config.py
new file mode 120000
index 000000000..f50d9082b
--- /dev/null
+++ b/zuul/ansible/2.9/action/aruba_config.py
@@ -0,0 +1 @@
+../../base/action/aruba_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aruba_config.pyi b/zuul/ansible/2.9/action/aruba_config.pyi
new file mode 120000
index 000000000..bab9d28fd
--- /dev/null
+++ b/zuul/ansible/2.9/action/aruba_config.pyi
@@ -0,0 +1 @@
+../../base/action/aruba_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/asa.py b/zuul/ansible/2.9/action/asa.py
new file mode 120000
index 000000000..3e7e93dc0
--- /dev/null
+++ b/zuul/ansible/2.9/action/asa.py
@@ -0,0 +1 @@
+../../base/action/asa.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/asa.pyi b/zuul/ansible/2.9/action/asa.pyi
new file mode 120000
index 000000000..e0cdc24b5
--- /dev/null
+++ b/zuul/ansible/2.9/action/asa.pyi
@@ -0,0 +1 @@
+../../base/action/asa.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/asa_config.py b/zuul/ansible/2.9/action/asa_config.py
new file mode 120000
index 000000000..598f400d5
--- /dev/null
+++ b/zuul/ansible/2.9/action/asa_config.py
@@ -0,0 +1 @@
+../../base/action/asa_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/asa_config.pyi b/zuul/ansible/2.9/action/asa_config.pyi
new file mode 120000
index 000000000..86fe03484
--- /dev/null
+++ b/zuul/ansible/2.9/action/asa_config.pyi
@@ -0,0 +1 @@
+../../base/action/asa_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/asa_template.py b/zuul/ansible/2.9/action/asa_template.py
new file mode 120000
index 000000000..e1e8eecbe
--- /dev/null
+++ b/zuul/ansible/2.9/action/asa_template.py
@@ -0,0 +1 @@
+../../base/action/asa_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/asa_template.pyi b/zuul/ansible/2.9/action/asa_template.pyi
new file mode 120000
index 000000000..0753101f1
--- /dev/null
+++ b/zuul/ansible/2.9/action/asa_template.pyi
@@ -0,0 +1 @@
+../../base/action/asa_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/assemble.py b/zuul/ansible/2.9/action/assemble.py
new file mode 120000
index 000000000..22273b123
--- /dev/null
+++ b/zuul/ansible/2.9/action/assemble.py
@@ -0,0 +1 @@
+../../base/action/assemble.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/assemble.pyi b/zuul/ansible/2.9/action/assemble.pyi
new file mode 120000
index 000000000..3a7074ec7
--- /dev/null
+++ b/zuul/ansible/2.9/action/assemble.pyi
@@ -0,0 +1 @@
+../../base/action/assemble.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aws_s3.py b/zuul/ansible/2.9/action/aws_s3.py
new file mode 120000
index 000000000..a2dabf9f8
--- /dev/null
+++ b/zuul/ansible/2.9/action/aws_s3.py
@@ -0,0 +1 @@
+../../base/action/aws_s3.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/aws_s3.pyi b/zuul/ansible/2.9/action/aws_s3.pyi
new file mode 120000
index 000000000..5ac40a7db
--- /dev/null
+++ b/zuul/ansible/2.9/action/aws_s3.pyi
@@ -0,0 +1 @@
+../../base/action/aws_s3.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ce.py b/zuul/ansible/2.9/action/ce.py
new file mode 120000
index 000000000..db95d9121
--- /dev/null
+++ b/zuul/ansible/2.9/action/ce.py
@@ -0,0 +1 @@
+../../base/action/ce.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ce.pyi b/zuul/ansible/2.9/action/ce.pyi
new file mode 120000
index 000000000..ba2365f2b
--- /dev/null
+++ b/zuul/ansible/2.9/action/ce.pyi
@@ -0,0 +1 @@
+../../base/action/ce.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ce_config.py b/zuul/ansible/2.9/action/ce_config.py
new file mode 120000
index 000000000..ec0319843
--- /dev/null
+++ b/zuul/ansible/2.9/action/ce_config.py
@@ -0,0 +1 @@
+../../base/action/ce_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ce_config.pyi b/zuul/ansible/2.9/action/ce_config.pyi
new file mode 120000
index 000000000..b762785d1
--- /dev/null
+++ b/zuul/ansible/2.9/action/ce_config.pyi
@@ -0,0 +1 @@
+../../base/action/ce_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ce_template.py b/zuul/ansible/2.9/action/ce_template.py
new file mode 120000
index 000000000..aa59e80a0
--- /dev/null
+++ b/zuul/ansible/2.9/action/ce_template.py
@@ -0,0 +1 @@
+../../base/action/ce_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ce_template.pyi b/zuul/ansible/2.9/action/ce_template.pyi
new file mode 120000
index 000000000..75ba2250c
--- /dev/null
+++ b/zuul/ansible/2.9/action/ce_template.pyi
@@ -0,0 +1 @@
+../../base/action/ce_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/copy.py b/zuul/ansible/2.9/action/copy.py
new file mode 120000
index 000000000..1c0c2291f
--- /dev/null
+++ b/zuul/ansible/2.9/action/copy.py
@@ -0,0 +1 @@
+../../base/action/copy.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/copy.pyi b/zuul/ansible/2.9/action/copy.pyi
new file mode 120000
index 000000000..189722f2a
--- /dev/null
+++ b/zuul/ansible/2.9/action/copy.pyi
@@ -0,0 +1 @@
+../../base/action/copy.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/dellos10_config.py b/zuul/ansible/2.9/action/dellos10_config.py
new file mode 120000
index 000000000..caf6ce6c3
--- /dev/null
+++ b/zuul/ansible/2.9/action/dellos10_config.py
@@ -0,0 +1 @@
+../../base/action/dellos10_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/dellos10_config.pyi b/zuul/ansible/2.9/action/dellos10_config.pyi
new file mode 120000
index 000000000..ede9a927e
--- /dev/null
+++ b/zuul/ansible/2.9/action/dellos10_config.pyi
@@ -0,0 +1 @@
+../../base/action/dellos10_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/dellos6_config.py b/zuul/ansible/2.9/action/dellos6_config.py
new file mode 120000
index 000000000..080fcce4c
--- /dev/null
+++ b/zuul/ansible/2.9/action/dellos6_config.py
@@ -0,0 +1 @@
+../../base/action/dellos6_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/dellos6_config.pyi b/zuul/ansible/2.9/action/dellos6_config.pyi
new file mode 120000
index 000000000..d5cf3ce15
--- /dev/null
+++ b/zuul/ansible/2.9/action/dellos6_config.pyi
@@ -0,0 +1 @@
+../../base/action/dellos6_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/dellos9_config.py b/zuul/ansible/2.9/action/dellos9_config.py
new file mode 120000
index 000000000..c2e79870c
--- /dev/null
+++ b/zuul/ansible/2.9/action/dellos9_config.py
@@ -0,0 +1 @@
+../../base/action/dellos9_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/dellos9_config.pyi b/zuul/ansible/2.9/action/dellos9_config.pyi
new file mode 120000
index 000000000..b50389ab4
--- /dev/null
+++ b/zuul/ansible/2.9/action/dellos9_config.pyi
@@ -0,0 +1 @@
+../../base/action/dellos9_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/eos_config.py b/zuul/ansible/2.9/action/eos_config.py
new file mode 120000
index 000000000..4d1ab53bb
--- /dev/null
+++ b/zuul/ansible/2.9/action/eos_config.py
@@ -0,0 +1 @@
+../../base/action/eos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/eos_config.pyi b/zuul/ansible/2.9/action/eos_config.pyi
new file mode 120000
index 000000000..f6d058ba1
--- /dev/null
+++ b/zuul/ansible/2.9/action/eos_config.pyi
@@ -0,0 +1 @@
+../../base/action/eos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/eos_template.py b/zuul/ansible/2.9/action/eos_template.py
new file mode 120000
index 000000000..a108bf66f
--- /dev/null
+++ b/zuul/ansible/2.9/action/eos_template.py
@@ -0,0 +1 @@
+../../base/action/eos_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/eos_template.pyi b/zuul/ansible/2.9/action/eos_template.pyi
new file mode 120000
index 000000000..b9cac42e8
--- /dev/null
+++ b/zuul/ansible/2.9/action/eos_template.pyi
@@ -0,0 +1 @@
+../../base/action/eos_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/fetch.py b/zuul/ansible/2.9/action/fetch.py
new file mode 120000
index 000000000..d53e02548
--- /dev/null
+++ b/zuul/ansible/2.9/action/fetch.py
@@ -0,0 +1 @@
+../../base/action/fetch.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/fetch.pyi b/zuul/ansible/2.9/action/fetch.pyi
new file mode 120000
index 000000000..b3ae31523
--- /dev/null
+++ b/zuul/ansible/2.9/action/fetch.pyi
@@ -0,0 +1 @@
+../../base/action/fetch.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/fortios_config.py b/zuul/ansible/2.9/action/fortios_config.py
new file mode 120000
index 000000000..ef38743bc
--- /dev/null
+++ b/zuul/ansible/2.9/action/fortios_config.py
@@ -0,0 +1 @@
+../../base/action/fortios_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/fortios_config.pyi b/zuul/ansible/2.9/action/fortios_config.pyi
new file mode 120000
index 000000000..fa334a059
--- /dev/null
+++ b/zuul/ansible/2.9/action/fortios_config.pyi
@@ -0,0 +1 @@
+../../base/action/fortios_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/include_vars.py b/zuul/ansible/2.9/action/include_vars.py
new file mode 120000
index 000000000..832d5a27a
--- /dev/null
+++ b/zuul/ansible/2.9/action/include_vars.py
@@ -0,0 +1 @@
+../../base/action/include_vars.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/include_vars.pyi b/zuul/ansible/2.9/action/include_vars.pyi
new file mode 120000
index 000000000..4099c1ae6
--- /dev/null
+++ b/zuul/ansible/2.9/action/include_vars.pyi
@@ -0,0 +1 @@
+../../base/action/include_vars.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ios_config.py b/zuul/ansible/2.9/action/ios_config.py
new file mode 120000
index 000000000..f1495d47e
--- /dev/null
+++ b/zuul/ansible/2.9/action/ios_config.py
@@ -0,0 +1 @@
+../../base/action/ios_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ios_config.pyi b/zuul/ansible/2.9/action/ios_config.pyi
new file mode 120000
index 000000000..e6af5e34c
--- /dev/null
+++ b/zuul/ansible/2.9/action/ios_config.pyi
@@ -0,0 +1 @@
+../../base/action/ios_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ios_template.py b/zuul/ansible/2.9/action/ios_template.py
new file mode 120000
index 000000000..ef863cedf
--- /dev/null
+++ b/zuul/ansible/2.9/action/ios_template.py
@@ -0,0 +1 @@
+../../base/action/ios_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ios_template.pyi b/zuul/ansible/2.9/action/ios_template.pyi
new file mode 120000
index 000000000..c37247812
--- /dev/null
+++ b/zuul/ansible/2.9/action/ios_template.pyi
@@ -0,0 +1 @@
+../../base/action/ios_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/iosxr_config.py b/zuul/ansible/2.9/action/iosxr_config.py
new file mode 120000
index 000000000..4eb293626
--- /dev/null
+++ b/zuul/ansible/2.9/action/iosxr_config.py
@@ -0,0 +1 @@
+../../base/action/iosxr_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/iosxr_config.pyi b/zuul/ansible/2.9/action/iosxr_config.pyi
new file mode 120000
index 000000000..70a2d67a3
--- /dev/null
+++ b/zuul/ansible/2.9/action/iosxr_config.pyi
@@ -0,0 +1 @@
+../../base/action/iosxr_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/iosxr_template.py b/zuul/ansible/2.9/action/iosxr_template.py
new file mode 120000
index 000000000..6a60fa49e
--- /dev/null
+++ b/zuul/ansible/2.9/action/iosxr_template.py
@@ -0,0 +1 @@
+../../base/action/iosxr_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/iosxr_template.pyi b/zuul/ansible/2.9/action/iosxr_template.pyi
new file mode 120000
index 000000000..918f5a113
--- /dev/null
+++ b/zuul/ansible/2.9/action/iosxr_template.pyi
@@ -0,0 +1 @@
+../../base/action/iosxr_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/junos_config.py b/zuul/ansible/2.9/action/junos_config.py
new file mode 120000
index 000000000..c50f3bc67
--- /dev/null
+++ b/zuul/ansible/2.9/action/junos_config.py
@@ -0,0 +1 @@
+../../base/action/junos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/junos_config.pyi b/zuul/ansible/2.9/action/junos_config.pyi
new file mode 120000
index 000000000..31cbba451
--- /dev/null
+++ b/zuul/ansible/2.9/action/junos_config.pyi
@@ -0,0 +1 @@
+../../base/action/junos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/junos_template.py b/zuul/ansible/2.9/action/junos_template.py
new file mode 120000
index 000000000..a2119b7cd
--- /dev/null
+++ b/zuul/ansible/2.9/action/junos_template.py
@@ -0,0 +1 @@
+../../base/action/junos_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/junos_template.pyi b/zuul/ansible/2.9/action/junos_template.pyi
new file mode 120000
index 000000000..e6ef22ba9
--- /dev/null
+++ b/zuul/ansible/2.9/action/junos_template.pyi
@@ -0,0 +1 @@
+../../base/action/junos_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_banner.py b/zuul/ansible/2.9/action/net_banner.py
new file mode 120000
index 000000000..69cc6d5a4
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_banner.py
@@ -0,0 +1 @@
+../../base/action/net_banner.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_banner.pyi b/zuul/ansible/2.9/action/net_banner.pyi
new file mode 120000
index 000000000..f926dbf70
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_banner.pyi
@@ -0,0 +1 @@
+../../base/action/net_banner.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_base.py b/zuul/ansible/2.9/action/net_base.py
new file mode 120000
index 000000000..f36b6ecc7
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_base.py
@@ -0,0 +1 @@
+../../base/action/net_base.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_base.pyi b/zuul/ansible/2.9/action/net_base.pyi
new file mode 120000
index 000000000..9f6ce1b7d
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_base.pyi
@@ -0,0 +1 @@
+../../base/action/net_base.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_config.py b/zuul/ansible/2.9/action/net_config.py
new file mode 120000
index 000000000..a817ca518
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_config.py
@@ -0,0 +1 @@
+../../base/action/net_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_config.pyi b/zuul/ansible/2.9/action/net_config.pyi
new file mode 120000
index 000000000..412b8110e
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_config.pyi
@@ -0,0 +1 @@
+../../base/action/net_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_get.py b/zuul/ansible/2.9/action/net_get.py
new file mode 120000
index 000000000..da3d7be0e
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_get.py
@@ -0,0 +1 @@
+../../base/action/net_get.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_get.pyi b/zuul/ansible/2.9/action/net_get.pyi
new file mode 120000
index 000000000..015c4271b
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_get.pyi
@@ -0,0 +1 @@
+../../base/action/net_get.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_interface.py b/zuul/ansible/2.9/action/net_interface.py
new file mode 120000
index 000000000..1d24f7821
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_interface.py
@@ -0,0 +1 @@
+../../base/action/net_interface.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_interface.pyi b/zuul/ansible/2.9/action/net_interface.pyi
new file mode 120000
index 000000000..57bb45316
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_interface.pyi
@@ -0,0 +1 @@
+../../base/action/net_interface.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_l2_interface.py b/zuul/ansible/2.9/action/net_l2_interface.py
new file mode 120000
index 000000000..1f44192c8
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_l2_interface.py
@@ -0,0 +1 @@
+../../base/action/net_l2_interface.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_l2_interface.pyi b/zuul/ansible/2.9/action/net_l2_interface.pyi
new file mode 120000
index 000000000..2b780821d
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_l2_interface.pyi
@@ -0,0 +1 @@
+../../base/action/net_l2_interface.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_l3_interface.py b/zuul/ansible/2.9/action/net_l3_interface.py
new file mode 120000
index 000000000..97017f4e3
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_l3_interface.py
@@ -0,0 +1 @@
+../../base/action/net_l3_interface.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_l3_interface.pyi b/zuul/ansible/2.9/action/net_l3_interface.pyi
new file mode 120000
index 000000000..9317599a2
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_l3_interface.pyi
@@ -0,0 +1 @@
+../../base/action/net_l3_interface.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_linkagg.py b/zuul/ansible/2.9/action/net_linkagg.py
new file mode 120000
index 000000000..d3fc53dd1
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_linkagg.py
@@ -0,0 +1 @@
+../../base/action/net_linkagg.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_linkagg.pyi b/zuul/ansible/2.9/action/net_linkagg.pyi
new file mode 120000
index 000000000..b5fac56b6
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_linkagg.pyi
@@ -0,0 +1 @@
+../../base/action/net_linkagg.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_lldp.py b/zuul/ansible/2.9/action/net_lldp.py
new file mode 120000
index 000000000..15fc3a859
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_lldp.py
@@ -0,0 +1 @@
+../../base/action/net_lldp.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_lldp.pyi b/zuul/ansible/2.9/action/net_lldp.pyi
new file mode 120000
index 000000000..a627fdec7
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_lldp.pyi
@@ -0,0 +1 @@
+../../base/action/net_lldp.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_lldp_interface.py b/zuul/ansible/2.9/action/net_lldp_interface.py
new file mode 120000
index 000000000..f57ec137f
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_lldp_interface.py
@@ -0,0 +1 @@
+../../base/action/net_lldp_interface.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_lldp_interface.pyi b/zuul/ansible/2.9/action/net_lldp_interface.pyi
new file mode 120000
index 000000000..fdd97b078
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_lldp_interface.pyi
@@ -0,0 +1 @@
+../../base/action/net_lldp_interface.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_logging.py b/zuul/ansible/2.9/action/net_logging.py
new file mode 120000
index 000000000..57d9766aa
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_logging.py
@@ -0,0 +1 @@
+../../base/action/net_logging.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_logging.pyi b/zuul/ansible/2.9/action/net_logging.pyi
new file mode 120000
index 000000000..1d6f1b029
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_logging.pyi
@@ -0,0 +1 @@
+../../base/action/net_logging.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_ping.py b/zuul/ansible/2.9/action/net_ping.py
new file mode 120000
index 000000000..696d9f526
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_ping.py
@@ -0,0 +1 @@
+../../base/action/net_ping.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_ping.pyi b/zuul/ansible/2.9/action/net_ping.pyi
new file mode 120000
index 000000000..03f84e975
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_ping.pyi
@@ -0,0 +1 @@
+../../base/action/net_ping.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_static_route.py b/zuul/ansible/2.9/action/net_static_route.py
new file mode 120000
index 000000000..c22b7f0e0
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_static_route.py
@@ -0,0 +1 @@
+../../base/action/net_static_route.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_static_route.pyi b/zuul/ansible/2.9/action/net_static_route.pyi
new file mode 120000
index 000000000..859c20fec
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_static_route.pyi
@@ -0,0 +1 @@
+../../base/action/net_static_route.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_system.py b/zuul/ansible/2.9/action/net_system.py
new file mode 120000
index 000000000..a03dd93c9
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_system.py
@@ -0,0 +1 @@
+../../base/action/net_system.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_system.pyi b/zuul/ansible/2.9/action/net_system.pyi
new file mode 120000
index 000000000..cc159053b
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_system.pyi
@@ -0,0 +1 @@
+../../base/action/net_system.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_template.py b/zuul/ansible/2.9/action/net_template.py
new file mode 120000
index 000000000..18ba965e4
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_template.py
@@ -0,0 +1 @@
+../../base/action/net_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_template.pyi b/zuul/ansible/2.9/action/net_template.pyi
new file mode 120000
index 000000000..3bfbb6f0f
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_template.pyi
@@ -0,0 +1 @@
+../../base/action/net_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_user.py b/zuul/ansible/2.9/action/net_user.py
new file mode 120000
index 000000000..fcfb3f55a
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_user.py
@@ -0,0 +1 @@
+../../base/action/net_user.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_user.pyi b/zuul/ansible/2.9/action/net_user.pyi
new file mode 120000
index 000000000..267f5da34
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_user.pyi
@@ -0,0 +1 @@
+../../base/action/net_user.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_vlan.py b/zuul/ansible/2.9/action/net_vlan.py
new file mode 120000
index 000000000..df275656f
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_vlan.py
@@ -0,0 +1 @@
+../../base/action/net_vlan.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_vlan.pyi b/zuul/ansible/2.9/action/net_vlan.pyi
new file mode 120000
index 000000000..718074899
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_vlan.pyi
@@ -0,0 +1 @@
+../../base/action/net_vlan.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_vrf.py b/zuul/ansible/2.9/action/net_vrf.py
new file mode 120000
index 000000000..c757d2100
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_vrf.py
@@ -0,0 +1 @@
+../../base/action/net_vrf.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/net_vrf.pyi b/zuul/ansible/2.9/action/net_vrf.pyi
new file mode 120000
index 000000000..df043a0cd
--- /dev/null
+++ b/zuul/ansible/2.9/action/net_vrf.pyi
@@ -0,0 +1 @@
+../../base/action/net_vrf.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/netconf_config.py b/zuul/ansible/2.9/action/netconf_config.py
new file mode 120000
index 000000000..4d13bb82c
--- /dev/null
+++ b/zuul/ansible/2.9/action/netconf_config.py
@@ -0,0 +1 @@
+../../base/action/netconf_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/netconf_config.pyi b/zuul/ansible/2.9/action/netconf_config.pyi
new file mode 120000
index 000000000..c75a746b4
--- /dev/null
+++ b/zuul/ansible/2.9/action/netconf_config.pyi
@@ -0,0 +1 @@
+../../base/action/netconf_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/network.py b/zuul/ansible/2.9/action/network.py
new file mode 120000
index 000000000..9e2d1baa4
--- /dev/null
+++ b/zuul/ansible/2.9/action/network.py
@@ -0,0 +1 @@
+../../base/action/network.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/network.pyi b/zuul/ansible/2.9/action/network.pyi
new file mode 120000
index 000000000..e1842d197
--- /dev/null
+++ b/zuul/ansible/2.9/action/network.pyi
@@ -0,0 +1 @@
+../../base/action/network.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/normal.py b/zuul/ansible/2.9/action/normal.py
new file mode 120000
index 000000000..4e131d98d
--- /dev/null
+++ b/zuul/ansible/2.9/action/normal.py
@@ -0,0 +1 @@
+../../base/action/normal.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/normal.pyi b/zuul/ansible/2.9/action/normal.pyi
new file mode 120000
index 000000000..bbbe0704c
--- /dev/null
+++ b/zuul/ansible/2.9/action/normal.pyi
@@ -0,0 +1 @@
+../../base/action/normal.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/nxos_config.py b/zuul/ansible/2.9/action/nxos_config.py
new file mode 120000
index 000000000..0cc233c34
--- /dev/null
+++ b/zuul/ansible/2.9/action/nxos_config.py
@@ -0,0 +1 @@
+../../base/action/nxos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/nxos_config.pyi b/zuul/ansible/2.9/action/nxos_config.pyi
new file mode 120000
index 000000000..b2e63b6e3
--- /dev/null
+++ b/zuul/ansible/2.9/action/nxos_config.pyi
@@ -0,0 +1 @@
+../../base/action/nxos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/nxos_template.py b/zuul/ansible/2.9/action/nxos_template.py
new file mode 120000
index 000000000..3d599062a
--- /dev/null
+++ b/zuul/ansible/2.9/action/nxos_template.py
@@ -0,0 +1 @@
+../../base/action/nxos_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/nxos_template.pyi b/zuul/ansible/2.9/action/nxos_template.pyi
new file mode 120000
index 000000000..e36fa4e90
--- /dev/null
+++ b/zuul/ansible/2.9/action/nxos_template.pyi
@@ -0,0 +1 @@
+../../base/action/nxos_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ops_config.py b/zuul/ansible/2.9/action/ops_config.py
new file mode 120000
index 000000000..2abe0669d
--- /dev/null
+++ b/zuul/ansible/2.9/action/ops_config.py
@@ -0,0 +1 @@
+../../base/action/ops_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ops_config.pyi b/zuul/ansible/2.9/action/ops_config.pyi
new file mode 120000
index 000000000..7517f9c7b
--- /dev/null
+++ b/zuul/ansible/2.9/action/ops_config.pyi
@@ -0,0 +1 @@
+../../base/action/ops_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ops_template.py b/zuul/ansible/2.9/action/ops_template.py
new file mode 120000
index 000000000..5c841ca57
--- /dev/null
+++ b/zuul/ansible/2.9/action/ops_template.py
@@ -0,0 +1 @@
+../../base/action/ops_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/ops_template.pyi b/zuul/ansible/2.9/action/ops_template.pyi
new file mode 120000
index 000000000..4baa28a3f
--- /dev/null
+++ b/zuul/ansible/2.9/action/ops_template.pyi
@@ -0,0 +1 @@
+../../base/action/ops_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/patch.py b/zuul/ansible/2.9/action/patch.py
new file mode 120000
index 000000000..8996710ba
--- /dev/null
+++ b/zuul/ansible/2.9/action/patch.py
@@ -0,0 +1 @@
+../../base/action/patch.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/patch.pyi b/zuul/ansible/2.9/action/patch.pyi
new file mode 120000
index 000000000..577e43600
--- /dev/null
+++ b/zuul/ansible/2.9/action/patch.pyi
@@ -0,0 +1 @@
+../../base/action/patch.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/raw.py b/zuul/ansible/2.9/action/raw.py
new file mode 120000
index 000000000..e4962dd8a
--- /dev/null
+++ b/zuul/ansible/2.9/action/raw.py
@@ -0,0 +1 @@
+../../base/action/raw.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/raw.pyi b/zuul/ansible/2.9/action/raw.pyi
new file mode 120000
index 000000000..741945ef2
--- /dev/null
+++ b/zuul/ansible/2.9/action/raw.pyi
@@ -0,0 +1 @@
+../../base/action/raw.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/script.py b/zuul/ansible/2.9/action/script.py
new file mode 120000
index 000000000..1cccf5805
--- /dev/null
+++ b/zuul/ansible/2.9/action/script.py
@@ -0,0 +1 @@
+../../base/action/script.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/script.pyi b/zuul/ansible/2.9/action/script.pyi
new file mode 120000
index 000000000..aff69744b
--- /dev/null
+++ b/zuul/ansible/2.9/action/script.pyi
@@ -0,0 +1 @@
+../../base/action/script.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/sros_config.py b/zuul/ansible/2.9/action/sros_config.py
new file mode 120000
index 000000000..1762874e4
--- /dev/null
+++ b/zuul/ansible/2.9/action/sros_config.py
@@ -0,0 +1 @@
+../../base/action/sros_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/sros_config.pyi b/zuul/ansible/2.9/action/sros_config.pyi
new file mode 120000
index 000000000..453e4b8e1
--- /dev/null
+++ b/zuul/ansible/2.9/action/sros_config.pyi
@@ -0,0 +1 @@
+../../base/action/sros_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/synchronize.py b/zuul/ansible/2.9/action/synchronize.py
new file mode 120000
index 000000000..f2126166c
--- /dev/null
+++ b/zuul/ansible/2.9/action/synchronize.py
@@ -0,0 +1 @@
+../../base/action/synchronize.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/synchronize.pyi b/zuul/ansible/2.9/action/synchronize.pyi
new file mode 120000
index 000000000..4ff1a2ee9
--- /dev/null
+++ b/zuul/ansible/2.9/action/synchronize.pyi
@@ -0,0 +1 @@
+../../base/action/synchronize.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/template.py b/zuul/ansible/2.9/action/template.py
new file mode 120000
index 000000000..720717d83
--- /dev/null
+++ b/zuul/ansible/2.9/action/template.py
@@ -0,0 +1 @@
+../../base/action/template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/template.pyi b/zuul/ansible/2.9/action/template.pyi
new file mode 120000
index 000000000..aed7fb07a
--- /dev/null
+++ b/zuul/ansible/2.9/action/template.pyi
@@ -0,0 +1 @@
+../../base/action/template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/unarchive.py b/zuul/ansible/2.9/action/unarchive.py
new file mode 120000
index 000000000..2d7ce5aed
--- /dev/null
+++ b/zuul/ansible/2.9/action/unarchive.py
@@ -0,0 +1 @@
+../../base/action/unarchive.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/unarchive.pyi b/zuul/ansible/2.9/action/unarchive.pyi
new file mode 120000
index 000000000..fead9ca55
--- /dev/null
+++ b/zuul/ansible/2.9/action/unarchive.pyi
@@ -0,0 +1 @@
+../../base/action/unarchive.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/uri.py b/zuul/ansible/2.9/action/uri.py
new file mode 120000
index 000000000..7c4b15f45
--- /dev/null
+++ b/zuul/ansible/2.9/action/uri.py
@@ -0,0 +1 @@
+../../base/action/uri.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/uri.pyi b/zuul/ansible/2.9/action/uri.pyi
new file mode 120000
index 000000000..015bb9fe3
--- /dev/null
+++ b/zuul/ansible/2.9/action/uri.pyi
@@ -0,0 +1 @@
+../../base/action/uri.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/vyos_config.py b/zuul/ansible/2.9/action/vyos_config.py
new file mode 120000
index 000000000..2732fd7a1
--- /dev/null
+++ b/zuul/ansible/2.9/action/vyos_config.py
@@ -0,0 +1 @@
+../../base/action/vyos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/vyos_config.pyi b/zuul/ansible/2.9/action/vyos_config.pyi
new file mode 120000
index 000000000..ac5d76632
--- /dev/null
+++ b/zuul/ansible/2.9/action/vyos_config.pyi
@@ -0,0 +1 @@
+../../base/action/vyos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/win_copy.py b/zuul/ansible/2.9/action/win_copy.py
new file mode 120000
index 000000000..80c3f3846
--- /dev/null
+++ b/zuul/ansible/2.9/action/win_copy.py
@@ -0,0 +1 @@
+../../base/action/win_copy.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/win_copy.pyi b/zuul/ansible/2.9/action/win_copy.pyi
new file mode 120000
index 000000000..017c792ff
--- /dev/null
+++ b/zuul/ansible/2.9/action/win_copy.pyi
@@ -0,0 +1 @@
+../../base/action/win_copy.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/win_template.py b/zuul/ansible/2.9/action/win_template.py
new file mode 120000
index 000000000..f2a8b2d63
--- /dev/null
+++ b/zuul/ansible/2.9/action/win_template.py
@@ -0,0 +1 @@
+../../base/action/win_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/action/win_template.pyi b/zuul/ansible/2.9/action/win_template.pyi
new file mode 120000
index 000000000..40825895b
--- /dev/null
+++ b/zuul/ansible/2.9/action/win_template.pyi
@@ -0,0 +1 @@
+../../base/action/win_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/actiongeneral/__init__.py b/zuul/ansible/2.9/actiongeneral/__init__.py
new file mode 120000
index 000000000..38d887448
--- /dev/null
+++ b/zuul/ansible/2.9/actiongeneral/__init__.py
@@ -0,0 +1 @@
+../../base/actiongeneral/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/actiongeneral/command.py b/zuul/ansible/2.9/actiongeneral/command.py
new file mode 120000
index 000000000..f190db2cc
--- /dev/null
+++ b/zuul/ansible/2.9/actiongeneral/command.py
@@ -0,0 +1 @@
+../../base/actiongeneral/command.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/actiongeneral/command.pyi b/zuul/ansible/2.9/actiongeneral/command.pyi
new file mode 120000
index 000000000..81305dd03
--- /dev/null
+++ b/zuul/ansible/2.9/actiongeneral/command.pyi
@@ -0,0 +1 @@
+../../base/actiongeneral/command.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/actiongeneral/zuul_return.py b/zuul/ansible/2.9/actiongeneral/zuul_return.py
new file mode 120000
index 000000000..2f5b2559e
--- /dev/null
+++ b/zuul/ansible/2.9/actiongeneral/zuul_return.py
@@ -0,0 +1 @@
+../../base/actiongeneral/zuul_return.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/callback/__init__.py b/zuul/ansible/2.9/callback/__init__.py
new file mode 120000
index 000000000..00b974388
--- /dev/null
+++ b/zuul/ansible/2.9/callback/__init__.py
@@ -0,0 +1 @@
+../../base/callback/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/callback/zuul_json.py b/zuul/ansible/2.9/callback/zuul_json.py
new file mode 120000
index 000000000..b0a07779b
--- /dev/null
+++ b/zuul/ansible/2.9/callback/zuul_json.py
@@ -0,0 +1 @@
+../../base/callback/zuul_json.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/callback/zuul_stream.py b/zuul/ansible/2.9/callback/zuul_stream.py
new file mode 120000
index 000000000..f75561bf4
--- /dev/null
+++ b/zuul/ansible/2.9/callback/zuul_stream.py
@@ -0,0 +1 @@
+../../base/callback/zuul_stream.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/callback/zuul_unreachable.py b/zuul/ansible/2.9/callback/zuul_unreachable.py
new file mode 120000
index 000000000..205baca6f
--- /dev/null
+++ b/zuul/ansible/2.9/callback/zuul_unreachable.py
@@ -0,0 +1 @@
+../../base/callback/zuul_unreachable.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/filter/__init__.py b/zuul/ansible/2.9/filter/__init__.py
new file mode 120000
index 000000000..f80a4da61
--- /dev/null
+++ b/zuul/ansible/2.9/filter/__init__.py
@@ -0,0 +1 @@
+../../base/filter/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/filter/zuul_filters.py b/zuul/ansible/2.9/filter/zuul_filters.py
new file mode 120000
index 000000000..d406e5fe6
--- /dev/null
+++ b/zuul/ansible/2.9/filter/zuul_filters.py
@@ -0,0 +1 @@
+../../base/filter/zuul_filters.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/library/__init__.py b/zuul/ansible/2.9/library/__init__.py
new file mode 120000
index 000000000..0b68ce0f4
--- /dev/null
+++ b/zuul/ansible/2.9/library/__init__.py
@@ -0,0 +1 @@
+../../base/library/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/library/command.py b/zuul/ansible/2.9/library/command.py
new file mode 120000
index 000000000..9c7633169
--- /dev/null
+++ b/zuul/ansible/2.9/library/command.py
@@ -0,0 +1 @@
+../../base/library/command.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/library/zuul_console.py b/zuul/ansible/2.9/library/zuul_console.py
new file mode 120000
index 000000000..7c905e0f9
--- /dev/null
+++ b/zuul/ansible/2.9/library/zuul_console.py
@@ -0,0 +1 @@
+../../base/library/zuul_console.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/logconfig.py b/zuul/ansible/2.9/logconfig.py
new file mode 120000
index 000000000..767cb2e81
--- /dev/null
+++ b/zuul/ansible/2.9/logconfig.py
@@ -0,0 +1 @@
+../logconfig.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/__init__.py b/zuul/ansible/2.9/lookup/__init__.py
new file mode 120000
index 000000000..b008ecb3b
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/__init__.py
@@ -0,0 +1 @@
+../../base/lookup/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/_banned.py b/zuul/ansible/2.9/lookup/_banned.py
new file mode 120000
index 000000000..2e127f4e7
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/_banned.py
@@ -0,0 +1 @@
+../../base/lookup/_banned.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/_banned.pyi b/zuul/ansible/2.9/lookup/_banned.pyi
new file mode 120000
index 000000000..d7909135d
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/_banned.pyi
@@ -0,0 +1 @@
+../../base/lookup/_banned.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/chef_databag.py b/zuul/ansible/2.9/lookup/chef_databag.py
new file mode 120000
index 000000000..d4efe7e85
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/chef_databag.py
@@ -0,0 +1 @@
+../../base/lookup/chef_databag.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/chef_databag.pyi b/zuul/ansible/2.9/lookup/chef_databag.pyi
new file mode 120000
index 000000000..c06fc3001
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/chef_databag.pyi
@@ -0,0 +1 @@
+../../base/lookup/chef_databag.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/consul_kv.py b/zuul/ansible/2.9/lookup/consul_kv.py
new file mode 120000
index 000000000..66b6f7617
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/consul_kv.py
@@ -0,0 +1 @@
+../../base/lookup/consul_kv.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/consul_kv.pyi b/zuul/ansible/2.9/lookup/consul_kv.pyi
new file mode 120000
index 000000000..33d848347
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/consul_kv.pyi
@@ -0,0 +1 @@
+../../base/lookup/consul_kv.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/credstash.py b/zuul/ansible/2.9/lookup/credstash.py
new file mode 120000
index 000000000..2c343a27e
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/credstash.py
@@ -0,0 +1 @@
+../../base/lookup/credstash.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/credstash.pyi b/zuul/ansible/2.9/lookup/credstash.pyi
new file mode 120000
index 000000000..071af9d1a
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/credstash.pyi
@@ -0,0 +1 @@
+../../base/lookup/credstash.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/csvfile.py b/zuul/ansible/2.9/lookup/csvfile.py
new file mode 120000
index 000000000..981754791
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/csvfile.py
@@ -0,0 +1 @@
+../../base/lookup/csvfile.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/csvfile.pyi b/zuul/ansible/2.9/lookup/csvfile.pyi
new file mode 120000
index 000000000..18ded3684
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/csvfile.pyi
@@ -0,0 +1 @@
+../../base/lookup/csvfile.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/cyberarkpassword.py b/zuul/ansible/2.9/lookup/cyberarkpassword.py
new file mode 120000
index 000000000..a573c0cf3
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/cyberarkpassword.py
@@ -0,0 +1 @@
+../../base/lookup/cyberarkpassword.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/cyberarkpassword.pyi b/zuul/ansible/2.9/lookup/cyberarkpassword.pyi
new file mode 120000
index 000000000..01543847e
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/cyberarkpassword.pyi
@@ -0,0 +1 @@
+../../base/lookup/cyberarkpassword.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/dig.py b/zuul/ansible/2.9/lookup/dig.py
new file mode 120000
index 000000000..92a628c4a
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/dig.py
@@ -0,0 +1 @@
+../../base/lookup/dig.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/dig.pyi b/zuul/ansible/2.9/lookup/dig.pyi
new file mode 120000
index 000000000..7268b42c3
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/dig.pyi
@@ -0,0 +1 @@
+../../base/lookup/dig.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/dnstxt.py b/zuul/ansible/2.9/lookup/dnstxt.py
new file mode 120000
index 000000000..aa3e0f2d9
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/dnstxt.py
@@ -0,0 +1 @@
+../../base/lookup/dnstxt.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/dnstxt.pyi b/zuul/ansible/2.9/lookup/dnstxt.pyi
new file mode 120000
index 000000000..1c221784c
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/dnstxt.pyi
@@ -0,0 +1 @@
+../../base/lookup/dnstxt.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/env.py b/zuul/ansible/2.9/lookup/env.py
new file mode 120000
index 000000000..124393630
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/env.py
@@ -0,0 +1 @@
+../../base/lookup/env.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/env.pyi b/zuul/ansible/2.9/lookup/env.pyi
new file mode 120000
index 000000000..e0ecae07a
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/env.pyi
@@ -0,0 +1 @@
+../../base/lookup/env.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/etcd.py b/zuul/ansible/2.9/lookup/etcd.py
new file mode 120000
index 000000000..c42007aa6
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/etcd.py
@@ -0,0 +1 @@
+../../base/lookup/etcd.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/etcd.pyi b/zuul/ansible/2.9/lookup/etcd.pyi
new file mode 120000
index 000000000..a1d4e0458
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/etcd.pyi
@@ -0,0 +1 @@
+../../base/lookup/etcd.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/file.py b/zuul/ansible/2.9/lookup/file.py
new file mode 120000
index 000000000..d1c0692d7
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/file.py
@@ -0,0 +1 @@
+../../base/lookup/file.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/file.pyi b/zuul/ansible/2.9/lookup/file.pyi
new file mode 120000
index 000000000..588dc50c6
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/file.pyi
@@ -0,0 +1 @@
+../../base/lookup/file.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/fileglob.py b/zuul/ansible/2.9/lookup/fileglob.py
new file mode 120000
index 000000000..0249540ac
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/fileglob.py
@@ -0,0 +1 @@
+../../base/lookup/fileglob.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/fileglob.pyi b/zuul/ansible/2.9/lookup/fileglob.pyi
new file mode 120000
index 000000000..ffce6462b
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/fileglob.pyi
@@ -0,0 +1 @@
+../../base/lookup/fileglob.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/filetree.py b/zuul/ansible/2.9/lookup/filetree.py
new file mode 120000
index 000000000..96cc789ac
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/filetree.py
@@ -0,0 +1 @@
+../../base/lookup/filetree.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/filetree.pyi b/zuul/ansible/2.9/lookup/filetree.pyi
new file mode 120000
index 000000000..ca38966f5
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/filetree.pyi
@@ -0,0 +1 @@
+../../base/lookup/filetree.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/first_found.py b/zuul/ansible/2.9/lookup/first_found.py
new file mode 120000
index 000000000..0a01ced20
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/first_found.py
@@ -0,0 +1 @@
+../../base/lookup/first_found.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/first_found.pyi b/zuul/ansible/2.9/lookup/first_found.pyi
new file mode 120000
index 000000000..a3a92f250
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/first_found.pyi
@@ -0,0 +1 @@
+../../base/lookup/first_found.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/hashi_vault.py b/zuul/ansible/2.9/lookup/hashi_vault.py
new file mode 120000
index 000000000..6fd3dda3e
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/hashi_vault.py
@@ -0,0 +1 @@
+../../base/lookup/hashi_vault.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/hashi_vault.pyi b/zuul/ansible/2.9/lookup/hashi_vault.pyi
new file mode 120000
index 000000000..f0b0ceb19
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/hashi_vault.pyi
@@ -0,0 +1 @@
+../../base/lookup/hashi_vault.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/hiera.py b/zuul/ansible/2.9/lookup/hiera.py
new file mode 120000
index 000000000..01e1883e3
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/hiera.py
@@ -0,0 +1 @@
+../../base/lookup/hiera.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/hiera.pyi b/zuul/ansible/2.9/lookup/hiera.pyi
new file mode 120000
index 000000000..b7756855a
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/hiera.pyi
@@ -0,0 +1 @@
+../../base/lookup/hiera.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/ini.py b/zuul/ansible/2.9/lookup/ini.py
new file mode 120000
index 000000000..6453943b9
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/ini.py
@@ -0,0 +1 @@
+../../base/lookup/ini.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/ini.pyi b/zuul/ansible/2.9/lookup/ini.pyi
new file mode 120000
index 000000000..b66fe999a
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/ini.pyi
@@ -0,0 +1 @@
+../../base/lookup/ini.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/keyring.py b/zuul/ansible/2.9/lookup/keyring.py
new file mode 120000
index 000000000..864d62d6f
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/keyring.py
@@ -0,0 +1 @@
+../../base/lookup/keyring.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/keyring.pyi b/zuul/ansible/2.9/lookup/keyring.pyi
new file mode 120000
index 000000000..9a0c24b55
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/keyring.pyi
@@ -0,0 +1 @@
+../../base/lookup/keyring.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/lastpass.py b/zuul/ansible/2.9/lookup/lastpass.py
new file mode 120000
index 000000000..a28abff20
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/lastpass.py
@@ -0,0 +1 @@
+../../base/lookup/lastpass.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/lastpass.pyi b/zuul/ansible/2.9/lookup/lastpass.pyi
new file mode 120000
index 000000000..dfd6e6b31
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/lastpass.pyi
@@ -0,0 +1 @@
+../../base/lookup/lastpass.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/lines.py b/zuul/ansible/2.9/lookup/lines.py
new file mode 120000
index 000000000..c2cae632b
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/lines.py
@@ -0,0 +1 @@
+../../base/lookup/lines.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/lines.pyi b/zuul/ansible/2.9/lookup/lines.pyi
new file mode 120000
index 000000000..3ddc687f9
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/lines.pyi
@@ -0,0 +1 @@
+../../base/lookup/lines.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/mongodb.py b/zuul/ansible/2.9/lookup/mongodb.py
new file mode 120000
index 000000000..737037fa1
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/mongodb.py
@@ -0,0 +1 @@
+../../base/lookup/mongodb.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/mongodb.pyi b/zuul/ansible/2.9/lookup/mongodb.pyi
new file mode 120000
index 000000000..4c8f754ef
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/mongodb.pyi
@@ -0,0 +1 @@
+../../base/lookup/mongodb.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/password.py b/zuul/ansible/2.9/lookup/password.py
new file mode 120000
index 000000000..478e6bee6
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/password.py
@@ -0,0 +1 @@
+../../base/lookup/password.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/password.pyi b/zuul/ansible/2.9/lookup/password.pyi
new file mode 120000
index 000000000..370986cbc
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/password.pyi
@@ -0,0 +1 @@
+../../base/lookup/password.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/passwordstore.py b/zuul/ansible/2.9/lookup/passwordstore.py
new file mode 120000
index 000000000..af4c4aa92
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/passwordstore.py
@@ -0,0 +1 @@
+../../base/lookup/passwordstore.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/passwordstore.pyi b/zuul/ansible/2.9/lookup/passwordstore.pyi
new file mode 120000
index 000000000..9ba9b718a
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/passwordstore.pyi
@@ -0,0 +1 @@
+../../base/lookup/passwordstore.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/pipe.py b/zuul/ansible/2.9/lookup/pipe.py
new file mode 120000
index 000000000..ea688c3a3
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/pipe.py
@@ -0,0 +1 @@
+../../base/lookup/pipe.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/pipe.pyi b/zuul/ansible/2.9/lookup/pipe.pyi
new file mode 120000
index 000000000..01d6b935d
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/pipe.pyi
@@ -0,0 +1 @@
+../../base/lookup/pipe.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/redis_kv.py b/zuul/ansible/2.9/lookup/redis_kv.py
new file mode 120000
index 000000000..a711e2651
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/redis_kv.py
@@ -0,0 +1 @@
+../../base/lookup/redis_kv.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/redis_kv.pyi b/zuul/ansible/2.9/lookup/redis_kv.pyi
new file mode 120000
index 000000000..da9acca45
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/redis_kv.pyi
@@ -0,0 +1 @@
+../../base/lookup/redis_kv.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/shelvefile.py b/zuul/ansible/2.9/lookup/shelvefile.py
new file mode 120000
index 000000000..2c76ec937
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/shelvefile.py
@@ -0,0 +1 @@
+../../base/lookup/shelvefile.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/shelvefile.pyi b/zuul/ansible/2.9/lookup/shelvefile.pyi
new file mode 120000
index 000000000..827f4b076
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/shelvefile.pyi
@@ -0,0 +1 @@
+../../base/lookup/shelvefile.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/template.py b/zuul/ansible/2.9/lookup/template.py
new file mode 120000
index 000000000..ef6565ceb
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/template.py
@@ -0,0 +1 @@
+../../base/lookup/template.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/template.pyi b/zuul/ansible/2.9/lookup/template.pyi
new file mode 120000
index 000000000..f03685d5c
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/template.pyi
@@ -0,0 +1 @@
+../../base/lookup/template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/url.py b/zuul/ansible/2.9/lookup/url.py
new file mode 120000
index 000000000..f936b748e
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/url.py
@@ -0,0 +1 @@
+../../base/lookup/url.py \ No newline at end of file
diff --git a/zuul/ansible/2.9/lookup/url.pyi b/zuul/ansible/2.9/lookup/url.pyi
new file mode 120000
index 000000000..fc13f47c5
--- /dev/null
+++ b/zuul/ansible/2.9/lookup/url.pyi
@@ -0,0 +1 @@
+../../base/lookup/url.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.9/paths.py b/zuul/ansible/2.9/paths.py
new file mode 120000
index 000000000..dbdb1858e
--- /dev/null
+++ b/zuul/ansible/2.9/paths.py
@@ -0,0 +1 @@
+../paths.py \ No newline at end of file
diff --git a/zuul/ansible/base/callback/zuul_stream.py b/zuul/ansible/base/callback/zuul_stream.py
index 084a47f12..5b2206e14 100644
--- a/zuul/ansible/base/callback/zuul_stream.py
+++ b/zuul/ansible/base/callback/zuul_stream.py
@@ -19,6 +19,20 @@
# so just put in the __future__ statement.
from __future__ import absolute_import
+DOCUMENTATION = '''
+ callback: zuul_stream
+ short_description: This is the Zuul streaming callback
+ version_added: "2.4"
+ description:
+ - This callback is necessary for Zuul to properly stream logs from the
+ remote test node.
+ type: stdout
+ extends_documentation_fragment:
+ - default_callback
+ requirements:
+ - Set as stdout in config
+'''
+
import datetime
import logging
import logging.config
diff --git a/zuul/lib/ansible-config.conf b/zuul/lib/ansible-config.conf
index 2b3a8ddd1..6d190051d 100644
--- a/zuul/lib/ansible-config.conf
+++ b/zuul/lib/ansible-config.conf
@@ -16,3 +16,6 @@ requirements = ansible>=2.7,<2.8
[2.8]
requirements = ansible>=2.8,<2.9
+
+[2.9]
+requirements = ansible>=2.9,<2.10