summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Henkel <tobias.henkel@bmw.de>2020-05-12 13:08:13 +0200
committerTobias Henkel <tobias.henkel@bmw.de>2020-05-15 09:22:38 +0200
commit4728382a8ea43a4994808c05fe14edf3558e3754 (patch)
tree351fa03acbfdc59c1d1deafd9edc597e4726363e
parent93c19d389a1d6d407c793185a88c7053acac4c77 (diff)
downloadzuul-4728382a8ea43a4994808c05fe14edf3558e3754.tar.gz
Drop support for ansible 2.6
Ansible 2.6 has been unmaintained since several months now so remove support for it. Change-Id: Ifb604eb5cb86fd0210c1dfd8418f069273e302b6
-rw-r--r--.zuul.yaml11
-rw-r--r--releasenotes/notes/ansible-2.6-4392044bd6e95e03.yaml4
-rw-r--r--tests/fixtures/config/ansible-versions/git/common-config/zuul.yaml12
-rw-r--r--tests/fixtures/zuul-default-ansible-version.conf2
-rw-r--r--tests/remote/test_remote_action_modules.py26
-rw-r--r--tests/remote/test_remote_zuul_json.py17
-rw-r--r--tests/remote/test_remote_zuul_stream.py20
-rw-r--r--tests/unit/test_v3.py6
-rwxr-xr-xzuul/ansible/2.5/library/command.py652
l---------zuul/ansible/2.5/lookup/hashi_vault.py1
l---------zuul/ansible/2.5/lookup/hashi_vault.pyi1
l---------zuul/ansible/2.6/action/__init__.py1
l---------zuul/ansible/2.6/action/add_host.py1
l---------zuul/ansible/2.6/action/add_host.pyi1
l---------zuul/ansible/2.6/action/aireos.py1
l---------zuul/ansible/2.6/action/aireos.pyi1
l---------zuul/ansible/2.6/action/aireos_config.py1
l---------zuul/ansible/2.6/action/aireos_config.pyi1
l---------zuul/ansible/2.6/action/aruba.py1
l---------zuul/ansible/2.6/action/aruba.pyi1
l---------zuul/ansible/2.6/action/aruba_config.py1
l---------zuul/ansible/2.6/action/aruba_config.pyi1
l---------zuul/ansible/2.6/action/asa.py1
l---------zuul/ansible/2.6/action/asa.pyi1
l---------zuul/ansible/2.6/action/asa_config.py1
l---------zuul/ansible/2.6/action/asa_config.pyi1
l---------zuul/ansible/2.6/action/asa_template.py1
l---------zuul/ansible/2.6/action/asa_template.pyi1
l---------zuul/ansible/2.6/action/assemble.py1
l---------zuul/ansible/2.6/action/assemble.pyi1
l---------zuul/ansible/2.6/action/aws_s3.py1
l---------zuul/ansible/2.6/action/aws_s3.pyi1
l---------zuul/ansible/2.6/action/ce.py1
l---------zuul/ansible/2.6/action/ce.pyi1
l---------zuul/ansible/2.6/action/ce_config.py1
l---------zuul/ansible/2.6/action/ce_config.pyi1
l---------zuul/ansible/2.6/action/ce_template.py1
l---------zuul/ansible/2.6/action/ce_template.pyi1
l---------zuul/ansible/2.6/action/copy.py1
l---------zuul/ansible/2.6/action/copy.pyi1
l---------zuul/ansible/2.6/action/dellos10_config.py1
l---------zuul/ansible/2.6/action/dellos10_config.pyi1
l---------zuul/ansible/2.6/action/dellos6_config.py1
l---------zuul/ansible/2.6/action/dellos6_config.pyi1
l---------zuul/ansible/2.6/action/dellos9_config.py1
l---------zuul/ansible/2.6/action/dellos9_config.pyi1
l---------zuul/ansible/2.6/action/eos_config.py1
l---------zuul/ansible/2.6/action/eos_config.pyi1
l---------zuul/ansible/2.6/action/eos_template.py1
l---------zuul/ansible/2.6/action/eos_template.pyi1
l---------zuul/ansible/2.6/action/fetch.py1
l---------zuul/ansible/2.6/action/fetch.pyi1
l---------zuul/ansible/2.6/action/fortios_config.py1
l---------zuul/ansible/2.6/action/fortios_config.pyi1
l---------zuul/ansible/2.6/action/include_vars.py1
l---------zuul/ansible/2.6/action/include_vars.pyi1
l---------zuul/ansible/2.6/action/ios_config.py1
l---------zuul/ansible/2.6/action/ios_config.pyi1
l---------zuul/ansible/2.6/action/ios_template.py1
l---------zuul/ansible/2.6/action/ios_template.pyi1
l---------zuul/ansible/2.6/action/iosxr_config.py1
l---------zuul/ansible/2.6/action/iosxr_config.pyi1
l---------zuul/ansible/2.6/action/iosxr_template.py1
l---------zuul/ansible/2.6/action/iosxr_template.pyi1
l---------zuul/ansible/2.6/action/junos_config.py1
l---------zuul/ansible/2.6/action/junos_config.pyi1
l---------zuul/ansible/2.6/action/junos_template.py1
l---------zuul/ansible/2.6/action/junos_template.pyi1
l---------zuul/ansible/2.6/action/net_banner.py1
l---------zuul/ansible/2.6/action/net_banner.pyi1
l---------zuul/ansible/2.6/action/net_base.py1
l---------zuul/ansible/2.6/action/net_base.pyi1
l---------zuul/ansible/2.6/action/net_config.py1
l---------zuul/ansible/2.6/action/net_config.pyi1
l---------zuul/ansible/2.6/action/net_get.py1
l---------zuul/ansible/2.6/action/net_get.pyi1
l---------zuul/ansible/2.6/action/net_interface.py1
l---------zuul/ansible/2.6/action/net_interface.pyi1
l---------zuul/ansible/2.6/action/net_l2_interface.py1
l---------zuul/ansible/2.6/action/net_l2_interface.pyi1
l---------zuul/ansible/2.6/action/net_l3_interface.py1
l---------zuul/ansible/2.6/action/net_l3_interface.pyi1
l---------zuul/ansible/2.6/action/net_linkagg.py1
l---------zuul/ansible/2.6/action/net_linkagg.pyi1
l---------zuul/ansible/2.6/action/net_lldp.py1
l---------zuul/ansible/2.6/action/net_lldp.pyi1
l---------zuul/ansible/2.6/action/net_lldp_interface.py1
l---------zuul/ansible/2.6/action/net_lldp_interface.pyi1
l---------zuul/ansible/2.6/action/net_logging.py1
l---------zuul/ansible/2.6/action/net_logging.pyi1
l---------zuul/ansible/2.6/action/net_ping.py1
l---------zuul/ansible/2.6/action/net_ping.pyi1
l---------zuul/ansible/2.6/action/net_static_route.py1
l---------zuul/ansible/2.6/action/net_static_route.pyi1
l---------zuul/ansible/2.6/action/net_system.py1
l---------zuul/ansible/2.6/action/net_system.pyi1
l---------zuul/ansible/2.6/action/net_template.py1
l---------zuul/ansible/2.6/action/net_template.pyi1
l---------zuul/ansible/2.6/action/net_user.py1
l---------zuul/ansible/2.6/action/net_user.pyi1
l---------zuul/ansible/2.6/action/net_vlan.py1
l---------zuul/ansible/2.6/action/net_vlan.pyi1
l---------zuul/ansible/2.6/action/net_vrf.py1
l---------zuul/ansible/2.6/action/net_vrf.pyi1
l---------zuul/ansible/2.6/action/netconf_config.py1
l---------zuul/ansible/2.6/action/netconf_config.pyi1
l---------zuul/ansible/2.6/action/network.py1
l---------zuul/ansible/2.6/action/network.pyi1
l---------zuul/ansible/2.6/action/normal.py1
l---------zuul/ansible/2.6/action/normal.pyi1
l---------zuul/ansible/2.6/action/nxos_config.py1
l---------zuul/ansible/2.6/action/nxos_config.pyi1
l---------zuul/ansible/2.6/action/nxos_template.py1
l---------zuul/ansible/2.6/action/nxos_template.pyi1
l---------zuul/ansible/2.6/action/ops_config.py1
l---------zuul/ansible/2.6/action/ops_config.pyi1
l---------zuul/ansible/2.6/action/ops_template.py1
l---------zuul/ansible/2.6/action/ops_template.pyi1
l---------zuul/ansible/2.6/action/patch.py1
l---------zuul/ansible/2.6/action/patch.pyi1
l---------zuul/ansible/2.6/action/raw.py1
l---------zuul/ansible/2.6/action/raw.pyi1
l---------zuul/ansible/2.6/action/script.py1
l---------zuul/ansible/2.6/action/script.pyi1
l---------zuul/ansible/2.6/action/sros_config.py1
l---------zuul/ansible/2.6/action/sros_config.pyi1
l---------zuul/ansible/2.6/action/synchronize.py1
l---------zuul/ansible/2.6/action/synchronize.pyi1
l---------zuul/ansible/2.6/action/template.py1
l---------zuul/ansible/2.6/action/template.pyi1
l---------zuul/ansible/2.6/action/unarchive.py1
l---------zuul/ansible/2.6/action/unarchive.pyi1
l---------zuul/ansible/2.6/action/vyos_config.py1
l---------zuul/ansible/2.6/action/vyos_config.pyi1
l---------zuul/ansible/2.6/action/win_copy.py1
l---------zuul/ansible/2.6/action/win_copy.pyi1
l---------zuul/ansible/2.6/action/win_template.py1
l---------zuul/ansible/2.6/action/win_template.pyi1
l---------zuul/ansible/2.6/actiongeneral/__init__.py1
l---------zuul/ansible/2.6/actiongeneral/command.py1
l---------zuul/ansible/2.6/actiongeneral/command.pyi1
l---------zuul/ansible/2.6/actiongeneral/zuul_return.py1
l---------zuul/ansible/2.6/callback/__init__.py1
l---------zuul/ansible/2.6/callback/zuul_json.py1
l---------zuul/ansible/2.6/callback/zuul_stream.py1
l---------zuul/ansible/2.6/callback/zuul_unreachable.py1
l---------zuul/ansible/2.6/filter/__init__.py1
l---------zuul/ansible/2.6/filter/zuul_filters.py1
l---------zuul/ansible/2.6/library/__init__.py1
l---------zuul/ansible/2.6/library/command.py1
l---------zuul/ansible/2.6/library/zuul_console.py1
l---------zuul/ansible/2.6/logconfig.py1
l---------zuul/ansible/2.6/lookup/__init__.py1
l---------zuul/ansible/2.6/lookup/_banned.py1
l---------zuul/ansible/2.6/lookup/_banned.pyi1
l---------zuul/ansible/2.6/lookup/chef_databag.py1
l---------zuul/ansible/2.6/lookup/chef_databag.pyi1
l---------zuul/ansible/2.6/lookup/consul_kv.py1
l---------zuul/ansible/2.6/lookup/consul_kv.pyi1
l---------zuul/ansible/2.6/lookup/credstash.py1
l---------zuul/ansible/2.6/lookup/credstash.pyi1
l---------zuul/ansible/2.6/lookup/csvfile.py1
l---------zuul/ansible/2.6/lookup/csvfile.pyi1
l---------zuul/ansible/2.6/lookup/cyberarkpassword.py1
l---------zuul/ansible/2.6/lookup/cyberarkpassword.pyi1
l---------zuul/ansible/2.6/lookup/dig.py1
l---------zuul/ansible/2.6/lookup/dig.pyi1
l---------zuul/ansible/2.6/lookup/dnstxt.py1
l---------zuul/ansible/2.6/lookup/dnstxt.pyi1
l---------zuul/ansible/2.6/lookup/env.py1
l---------zuul/ansible/2.6/lookup/env.pyi1
l---------zuul/ansible/2.6/lookup/etcd.py1
l---------zuul/ansible/2.6/lookup/etcd.pyi1
l---------zuul/ansible/2.6/lookup/file.py1
l---------zuul/ansible/2.6/lookup/file.pyi1
l---------zuul/ansible/2.6/lookup/fileglob.py1
l---------zuul/ansible/2.6/lookup/fileglob.pyi1
l---------zuul/ansible/2.6/lookup/filetree.py1
l---------zuul/ansible/2.6/lookup/filetree.pyi1
l---------zuul/ansible/2.6/lookup/first_found.py1
l---------zuul/ansible/2.6/lookup/first_found.pyi1
l---------zuul/ansible/2.6/lookup/hashi_vault.py1
l---------zuul/ansible/2.6/lookup/hashi_vault.pyi1
l---------zuul/ansible/2.6/lookup/hiera.py1
l---------zuul/ansible/2.6/lookup/hiera.pyi1
l---------zuul/ansible/2.6/lookup/ini.py1
l---------zuul/ansible/2.6/lookup/ini.pyi1
l---------zuul/ansible/2.6/lookup/keyring.py1
l---------zuul/ansible/2.6/lookup/keyring.pyi1
l---------zuul/ansible/2.6/lookup/lastpass.py1
l---------zuul/ansible/2.6/lookup/lastpass.pyi1
l---------zuul/ansible/2.6/lookup/lines.py1
l---------zuul/ansible/2.6/lookup/lines.pyi1
l---------zuul/ansible/2.6/lookup/mongodb.py1
l---------zuul/ansible/2.6/lookup/mongodb.pyi1
l---------zuul/ansible/2.6/lookup/password.py1
l---------zuul/ansible/2.6/lookup/password.pyi1
l---------zuul/ansible/2.6/lookup/passwordstore.py1
l---------zuul/ansible/2.6/lookup/passwordstore.pyi1
l---------zuul/ansible/2.6/lookup/pipe.py1
l---------zuul/ansible/2.6/lookup/pipe.pyi1
l---------zuul/ansible/2.6/lookup/redis_kv.py1
l---------zuul/ansible/2.6/lookup/redis_kv.pyi1
l---------zuul/ansible/2.6/lookup/shelvefile.py1
l---------zuul/ansible/2.6/lookup/shelvefile.pyi1
l---------zuul/ansible/2.6/lookup/template.py1
l---------zuul/ansible/2.6/lookup/template.pyi1
l---------zuul/ansible/2.6/lookup/url.py1
l---------zuul/ansible/2.6/lookup/url.pyi1
l---------zuul/ansible/2.6/paths.py1
-rw-r--r--zuul/lib/ansible-config.conf4
211 files changed, 51 insertions, 904 deletions
diff --git a/.zuul.yaml b/.zuul.yaml
index 913d34965..c64cebb34 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -28,15 +28,6 @@
- playbooks/zuul-stream/.*
- job:
- name: zuul-stream-functional-2.6
- parent: zuul-stream-functional
- # Force executor to use same Ansible version as "controller" node so
- # that the inventory.yaml file will be correct for that version.
- ansible-version: 2.6
- vars:
- zuul_ansible_version: 2.6
-
-- job:
name: zuul-stream-functional-2.7
parent: zuul-stream-functional
# Force executor to use same Ansible version as "controller" node so
@@ -239,7 +230,6 @@
success-url: 'npm/reports/bundle.html'
files:
- web/.*
- - zuul-stream-functional-2.6
- zuul-stream-functional-2.7
- zuul-stream-functional-2.8
- zuul-stream-functional-2.9
@@ -297,7 +287,6 @@
success-url: 'npm/reports/bundle.html'
files:
- web/.*
- - zuul-stream-functional-2.6
- zuul-stream-functional-2.7
- zuul-stream-functional-2.8
- zuul-stream-functional-2.9
diff --git a/releasenotes/notes/ansible-2.6-4392044bd6e95e03.yaml b/releasenotes/notes/ansible-2.6-4392044bd6e95e03.yaml
new file mode 100644
index 000000000..b53abc64d
--- /dev/null
+++ b/releasenotes/notes/ansible-2.6-4392044bd6e95e03.yaml
@@ -0,0 +1,4 @@
+---
+upgrade:
+ - |
+ Support for Ansible 2.6 has been removed.
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 8e8c7f619..488e41a5c 100644
--- a/tests/fixtures/config/ansible-versions/git/common-config/zuul.yaml
+++ b/tests/fixtures/config/ansible-versions/git/common-config/zuul.yaml
@@ -34,15 +34,7 @@
parent: ansible-version
vars:
test_ansible_version_major: 2
- test_ansible_version_minor: 6
-
-- job:
- name: ansible-26
- parent: ansible-version
- ansible-version: 2.6
- vars:
- test_ansible_version_major: 2
- test_ansible_version_minor: 6
+ test_ansible_version_minor: 7
- job:
name: ansible-27
@@ -74,7 +66,6 @@
check:
jobs:
- ansible-default
- - ansible-26
- ansible-27
- ansible-28
- ansible-29
@@ -84,7 +75,6 @@
check:
jobs:
- ansible-default-zuul-conf
- - ansible-26
- ansible-27
- ansible-28
- ansible-29
diff --git a/tests/fixtures/zuul-default-ansible-version.conf b/tests/fixtures/zuul-default-ansible-version.conf
index 3a63ad892..caecb38ef 100644
--- a/tests/fixtures/zuul-default-ansible-version.conf
+++ b/tests/fixtures/zuul-default-ansible-version.conf
@@ -9,7 +9,7 @@ server=127.0.0.1
[scheduler]
tenant_config=main.yaml
relative_priority=true
-default_ansible_version=2.6
+default_ansible_version=2.7
[merger]
git_dir=/tmp/zuul-test/merger-git
diff --git a/tests/remote/test_remote_action_modules.py b/tests/remote/test_remote_action_modules.py
index 744b7659f..b3a0803ee 100644
--- a/tests/remote/test_remote_action_modules.py
+++ b/tests/remote/test_remote_action_modules.py
@@ -23,12 +23,12 @@ ERROR_SYNC_FROM_OUTSIDE = "Syncing files from outside the working dir"
ERROR_SYNC_RSH = "Using custom synchronize rsh is prohibited"
-class TestActionModules26(AnsibleZuulTestCase):
+class FunctionalActionModulesMixIn:
tenant_config_file = 'config/remote-action-modules/main.yaml'
- ansible_version = '2.6'
+ # This should be overriden in child classes.
+ ansible_version = '2.9'
- def setUp(self):
- super().setUp()
+ def _setUp(self):
self.fake_nodepool.remote_ansible = True
ansible_remote = os.environ.get('ZUUL_REMOTE_IPV4')
@@ -218,13 +218,25 @@ class TestActionModules26(AnsibleZuulTestCase):
self._run_job('known-hosts-bad', 'FAILURE', ERROR_ACCESS_OUTSIDE)
-class TestActionModules27(TestActionModules26):
+class TestActionModules27(AnsibleZuulTestCase, FunctionalActionModulesMixIn):
ansible_version = '2.7'
+ def setUp(self):
+ super().setUp()
+ self._setUp()
+
-class TestActionModules28(TestActionModules27):
+class TestActionModules28(AnsibleZuulTestCase, FunctionalActionModulesMixIn):
ansible_version = '2.8'
+ def setUp(self):
+ super().setUp()
+ self._setUp()
+
-class TestActionModules29(TestActionModules28):
+class TestActionModules29(AnsibleZuulTestCase, FunctionalActionModulesMixIn):
ansible_version = '2.9'
+
+ def setUp(self):
+ super().setUp()
+ self._setUp()
diff --git a/tests/remote/test_remote_zuul_json.py b/tests/remote/test_remote_zuul_json.py
index 744b2bbf3..e93f3f119 100644
--- a/tests/remote/test_remote_zuul_json.py
+++ b/tests/remote/test_remote_zuul_json.py
@@ -20,12 +20,11 @@ import textwrap
from tests.base import AnsibleZuulTestCase
-class TestZuulJSON26(AnsibleZuulTestCase):
+class FunctionalZuulJSONMixIn:
tenant_config_file = 'config/remote-zuul-json/main.yaml'
ansible_version = '2.6'
- def setUp(self):
- super().setUp()
+ def _setUp(self):
self.fake_nodepool.remote_ansible = True
ansible_remote = os.environ.get('ZUUL_REMOTE_IPV4')
@@ -144,13 +143,21 @@ class TestZuulJSON26(AnsibleZuulTestCase):
dateutil.parser.parse(play_end_time)
-class TestZuulJSON27(TestZuulJSON26):
+class TestZuulJSON27(AnsibleZuulTestCase, FunctionalZuulJSONMixIn):
ansible_version = '2.7'
+ def setUp(self):
+ super().setUp()
+ self._setUp()
+
-class TestZuulJSON28(TestZuulJSON27):
+class TestZuulJSON28(AnsibleZuulTestCase, FunctionalZuulJSONMixIn):
ansible_version = '2.8'
+ def setUp(self):
+ super().setUp()
+ self._setUp()
+
def test_json_task_action(self):
job = self._run_job('no-log')
with self.jobLog(job):
diff --git a/tests/remote/test_remote_zuul_stream.py b/tests/remote/test_remote_zuul_stream.py
index 76392c73f..9ac7b32b0 100644
--- a/tests/remote/test_remote_zuul_stream.py
+++ b/tests/remote/test_remote_zuul_stream.py
@@ -19,13 +19,13 @@ import textwrap
from tests.base import AnsibleZuulTestCase
-class TestZuulStream26(AnsibleZuulTestCase):
+class FunctionalZuulStreamMixIn:
tenant_config_file = 'config/remote-zuul-stream/main.yaml'
- ansible_version = '2.6'
+ # This should be overriden in child classes.
+ ansible_version = '2.9'
- def setUp(self):
+ def _setUp(self):
self.log_console_port = 19000 + int(self.ansible_version.split('.')[1])
- super().setUp()
self.fake_nodepool.remote_ansible = True
ansible_remote = os.environ.get('ZUUL_REMOTE_IPV4')
@@ -192,13 +192,21 @@ class TestZuulStream26(AnsibleZuulTestCase):
self.assertLogLine(regex, text)
-class TestZuulStream27(TestZuulStream26):
+class TestZuulStream27(AnsibleZuulTestCase, FunctionalZuulStreamMixIn):
ansible_version = '2.7'
+ def setUp(self):
+ super().setUp()
+ self._setUp()
-class TestZuulStream28(TestZuulStream27):
+
+class TestZuulStream28(AnsibleZuulTestCase, FunctionalZuulStreamMixIn):
ansible_version = '2.8'
+ def setUp(self):
+ super().setUp()
+ self._setUp()
+
def test_command(self):
job = self._run_job('command')
with self.jobLog(job):
diff --git a/tests/unit/test_v3.py b/tests/unit/test_v3.py
index 7753b9633..6d21be976 100644
--- a/tests/unit/test_v3.py
+++ b/tests/unit/test_v3.py
@@ -2849,10 +2849,6 @@ class FunctionalAnsibleMixIn(object):
self._test_plugins(plugin_tests)
-class TestAnsible26(AnsibleZuulTestCase, FunctionalAnsibleMixIn):
- ansible_version = '2.6'
-
-
class TestAnsible27(AnsibleZuulTestCase, FunctionalAnsibleMixIn):
ansible_version = '2.7'
@@ -6413,7 +6409,6 @@ class TestAnsibleVersion(AnsibleZuulTestCase):
self.assertHistory([
dict(name='ansible-default', result='SUCCESS', changes='1,1'),
- 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'),
@@ -6435,7 +6430,6 @@ class TestDefaultAnsibleVersion(AnsibleZuulTestCase):
self.assertHistory([
dict(name='ansible-default-zuul-conf', result='SUCCESS',
changes='1,1'),
- 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'),
diff --git a/zuul/ansible/2.5/library/command.py b/zuul/ansible/2.5/library/command.py
deleted file mode 100755
index db186788c..000000000
--- a/zuul/ansible/2.5/library/command.py
+++ /dev/null
@@ -1,652 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Copyright: (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>, and others
-# Copyright: (c) 2016, Toshio Kuratomi <tkuratomi@ansible.com>
-#
-# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
-
-from __future__ import absolute_import, division, print_function
-__metaclass__ = type
-
-
-ANSIBLE_METADATA = {'metadata_version': '1.1',
- 'status': ['stableinterface'],
- 'supported_by': 'core'}
-
-
-# flake8: noqa
-# This file shares a significant chunk of code with an upstream ansible
-# function, run_command. The goal is to not have to fork quite so much
-# of that function, and discussing that design with upstream means we
-# should keep the changes to substantive ones only. For that reason, this
-# file is purposely not enforcing pep8, as making the function pep8 clean
-# would remove our ability to easily have a discussion with our friends
-# upstream
-
-DOCUMENTATION = '''
----
-module: command
-short_description: Executes a command on a remote node
-version_added: historical
-description:
- - The C(command) module takes the command name followed by a list of space-delimited arguments.
- - The given command will be executed on all selected nodes. It will not be
- processed through the shell, so variables like C($HOME) and operations
- like C("<"), C(">"), C("|"), C(";") and C("&") will not work (use the M(shell)
- module if you need these features).
- - For Windows targets, use the M(win_command) module instead.
-options:
- free_form:
- description:
- - The command module takes a free form command to run. There is no parameter actually named 'free form'.
- See the examples!
- required: yes
- creates:
- description:
- - A filename or (since 2.0) glob pattern, when it already exists, this step will B(not) be run.
- removes:
- description:
- - A filename or (since 2.0) glob pattern, when it does not exist, this step will B(not) be run.
- version_added: "0.8"
- chdir:
- description:
- - Change into this directory before running the command.
- version_added: "0.6"
- warn:
- description:
- - If command_warnings are on in ansible.cfg, do not warn about this particular line if set to C(no).
- type: bool
- default: 'yes'
- version_added: "1.8"
- stdin:
- version_added: "2.4"
- description:
- - Set the stdin of the command directly to the specified value.
- required: false
- default: null
-notes:
- - If you want to run a command through the shell (say you are using C(<), C(>), C(|), etc), you actually want the M(shell) module instead.
- Parsing shell metacharacters can lead to unexpected commands being executed if quoting is not done correctly so it is more secure to
- use the C(command) module when possible.
- - " C(creates), C(removes), and C(chdir) can be specified after the command.
- For instance, if you only want to run a command if a certain file does not exist, use this."
- - The C(executable) parameter is removed since version 2.4. If you have a need for this parameter, use the M(shell) module instead.
- - For Windows targets, use the M(win_command) module instead.
-author:
- - Ansible Core Team
- - Michael DeHaan
-'''
-
-EXAMPLES = '''
-- name: return motd to registered var
- command: cat /etc/motd
- register: mymotd
-
-- name: Run the command if the specified file does not exist.
- command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database
-
-# You can also use the 'args' form to provide the options.
-- name: This command will change the working directory to somedir/ and will only run when /path/to/database doesn't exist.
- command: /usr/bin/make_database.sh arg1 arg2
- args:
- chdir: somedir/
- creates: /path/to/database
-
-- name: safely use templated variable to run command. Always use the quote filter to avoid injection issues.
- command: cat {{ myfile|quote }}
- register: myoutput
-'''
-
-RETURN = '''
-cmd:
- description: the cmd that was run on the remote machine
- returned: always
- type: list
- sample:
- - echo
- - hello
-delta:
- description: cmd end time - cmd start time
- returned: always
- type: string
- sample: 0:00:00.001529
-end:
- description: cmd end time
- returned: always
- type: string
- sample: '2017-09-29 22:03:48.084657'
-start:
- description: cmd start time
- returned: always
- type: string
- sample: '2017-09-29 22:03:48.083128'
-'''
-
-import datetime
-import glob
-import os
-import shlex
-
-from ansible.module_utils.basic import AnsibleModule
-
-# Imports needed for Zuul things
-import re
-import subprocess
-import traceback
-import threading
-from ansible.module_utils.basic import heuristic_log_sanitize
-from ansible.module_utils.six import (
- PY2,
- PY3,
- b,
- binary_type,
- string_types,
- text_type,
-)
-from ansible.module_utils.six.moves import shlex_quote
-from ansible.module_utils._text import to_native, to_bytes, to_text
-
-
-LOG_STREAM_FILE = '/tmp/console-{log_uuid}.log'
-PASSWD_ARG_RE = re.compile(r'^[-]{0,2}pass[-]?(word|wd)?')
-# List to save stdout log lines in as we collect them
-_log_lines = []
-
-
-class Console(object):
- def __init__(self, log_uuid):
- self.logfile_name = LOG_STREAM_FILE.format(log_uuid=log_uuid)
-
- def __enter__(self):
- self.logfile = open(self.logfile_name, 'ab', buffering=0)
- return self
-
- def __exit__(self, etype, value, tb):
- self.logfile.close()
-
- def addLine(self, ln):
- # Note this format with deliminator is "inspired" by the old
- # Jenkins format but with microsecond resolution instead of
- # millisecond. It is kept so log parsing/formatting remains
- # consistent.
- ts = str(datetime.datetime.now()).encode('utf-8')
- if not isinstance(ln, bytes):
- try:
- ln = ln.encode('utf-8')
- except Exception:
- ln = repr(ln).encode('utf-8') + b'\n'
- outln = b'%s | %s' % (ts, ln)
- self.logfile.write(outln)
-
-
-def follow(fd, log_uuid):
- newline_warning = False
- with Console(log_uuid) as console:
- while True:
- line = fd.readline()
- if not line:
- break
- _log_lines.append(line)
- if not line.endswith(b'\n'):
- line += b'\n'
- newline_warning = True
- console.addLine(line)
- if newline_warning:
- console.addLine('[Zuul] No trailing newline\n')
-
-
-# Taken from ansible/module_utils/basic.py ... forking the method for now
-# so that we can dive in and figure out how to make appropriate hook points
-def zuul_run_command(self, args, zuul_log_id, check_rc=False, close_fds=True, executable=None, data=None, binary_data=False, path_prefix=None, cwd=None,
- use_unsafe_shell=False, prompt_regex=None, environ_update=None, umask=None, encoding='utf-8', errors='surrogate_or_strict'):
- '''
- Execute a command, returns rc, stdout, and stderr.
-
- :arg args: is the command to run
- * If args is a list, the command will be run with shell=False.
- * If args is a string and use_unsafe_shell=False it will split args to a list and run with shell=False
- * If args is a string and use_unsafe_shell=True it runs with shell=True.
- :kw check_rc: Whether to call fail_json in case of non zero RC.
- Default False
- :kw close_fds: See documentation for subprocess.Popen(). Default True
- :kw executable: See documentation for subprocess.Popen(). Default None
- :kw data: If given, information to write to the stdin of the command
- :kw binary_data: If False, append a newline to the data. Default False
- :kw path_prefix: If given, additional path to find the command in.
- This adds to the PATH environment vairable so helper commands in
- the same directory can also be found
- :kw cwd: If given, working directory to run the command inside
- :kw use_unsafe_shell: See `args` parameter. Default False
- :kw prompt_regex: Regex string (not a compiled regex) which can be
- used to detect prompts in the stdout which would otherwise cause
- the execution to hang (especially if no input data is specified)
- :kw environ_update: dictionary to *update* os.environ with
- :kw umask: Umask to be used when running the command. Default None
- :kw encoding: Since we return native strings, on python3 we need to
- know the encoding to use to transform from bytes to text. If you
- want to always get bytes back, use encoding=None. The default is
- "utf-8". This does not affect transformation of strings given as
- args.
- :kw errors: Since we return native strings, on python3 we need to
- transform stdout and stderr from bytes to text. If the bytes are
- undecodable in the ``encoding`` specified, then use this error
- handler to deal with them. The default is ``surrogate_or_strict``
- which means that the bytes will be decoded using the
- surrogateescape error handler if available (available on all
- python3 versions we support) otherwise a UnicodeError traceback
- will be raised. This does not affect transformations of strings
- given as args.
- :returns: A 3-tuple of return code (integer), stdout (native string),
- and stderr (native string). On python2, stdout and stderr are both
- byte strings. On python3, stdout and stderr are text strings converted
- according to the encoding and errors parameters. If you want byte
- strings on python3, use encoding=None to turn decoding to text off.
- '''
-
- if not isinstance(args, (list, binary_type, text_type)):
- msg = "Argument 'args' to run_command must be list or string"
- self.fail_json(rc=257, cmd=args, msg=msg)
-
- shell = False
- if use_unsafe_shell:
-
- # stringify args for unsafe/direct shell usage
- if isinstance(args, list):
- args = " ".join([shlex_quote(x) for x in args])
-
- # not set explicitly, check if set by controller
- if executable:
- args = [executable, '-c', args]
- elif self._shell not in (None, '/bin/sh'):
- args = [self._shell, '-c', args]
- else:
- shell = True
- else:
- # ensure args are a list
- if isinstance(args, (binary_type, text_type)):
- # On python2.6 and below, shlex has problems with text type
- # On python3, shlex needs a text type.
- if PY2:
- args = to_bytes(args, errors='surrogate_or_strict')
- elif PY3:
- args = to_text(args, errors='surrogateescape')
- args = shlex.split(args)
-
- # expand shellisms
- args = [os.path.expanduser(os.path.expandvars(x)) for x in args if x is not None]
-
- prompt_re = None
- if prompt_regex:
- if isinstance(prompt_regex, text_type):
- if PY3:
- prompt_regex = to_bytes(prompt_regex, errors='surrogateescape')
- elif PY2:
- prompt_regex = to_bytes(prompt_regex, errors='surrogate_or_strict')
- try:
- prompt_re = re.compile(prompt_regex, re.MULTILINE)
- except re.error:
- self.fail_json(msg="invalid prompt regular expression given to run_command")
-
- rc = 0
- msg = None
- st_in = None
-
- # Manipulate the environ we'll send to the new process
- old_env_vals = {}
- # We can set this from both an attribute and per call
- for key, val in self.run_command_environ_update.items():
- old_env_vals[key] = os.environ.get(key, None)
- os.environ[key] = val
- if environ_update:
- for key, val in environ_update.items():
- old_env_vals[key] = os.environ.get(key, None)
- os.environ[key] = val
- if path_prefix:
- old_env_vals['PATH'] = os.environ['PATH']
- os.environ['PATH'] = "%s:%s" % (path_prefix, os.environ['PATH'])
-
- # If using test-module and explode, the remote lib path will resemble ...
- # /tmp/test_module_scratch/debug_dir/ansible/module_utils/basic.py
- # If using ansible or ansible-playbook with a remote system ...
- # /tmp/ansible_vmweLQ/ansible_modlib.zip/ansible/module_utils/basic.py
-
- # Clean out python paths set by ansiballz
- if 'PYTHONPATH' in os.environ:
- pypaths = os.environ['PYTHONPATH'].split(':')
- pypaths = [x for x in pypaths
- if not x.endswith('/ansible_modlib.zip') and
- not x.endswith('/debug_dir')]
- os.environ['PYTHONPATH'] = ':'.join(pypaths)
- if not os.environ['PYTHONPATH']:
- del os.environ['PYTHONPATH']
-
- # create a printable version of the command for use
- # in reporting later, which strips out things like
- # passwords from the args list
- to_clean_args = args
- if PY2:
- if isinstance(args, text_type):
- to_clean_args = to_bytes(args)
- else:
- if isinstance(args, binary_type):
- to_clean_args = to_text(args)
- if isinstance(args, (text_type, binary_type)):
- to_clean_args = shlex.split(to_clean_args)
-
- clean_args = []
- is_passwd = False
- for arg in (to_native(a) for a in to_clean_args):
- if is_passwd:
- is_passwd = False
- clean_args.append('********')
- continue
- if PASSWD_ARG_RE.match(arg):
- sep_idx = arg.find('=')
- if sep_idx > -1:
- clean_args.append('%s=********' % arg[:sep_idx])
- continue
- else:
- is_passwd = True
- arg = heuristic_log_sanitize(arg, self.no_log_values)
- clean_args.append(arg)
- clean_args = ' '.join(shlex_quote(arg) for arg in clean_args)
-
- if data:
- st_in = subprocess.PIPE
-
- # ZUUL: changed stderr to follow stdout
- kwargs = dict(
- executable=executable,
- shell=shell,
- close_fds=close_fds,
- stdin=st_in,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- )
-
- # store the pwd
- prev_dir = os.getcwd()
-
- # make sure we're in the right working directory
- if cwd and os.path.isdir(cwd):
- cwd = os.path.abspath(os.path.expanduser(cwd))
- kwargs['cwd'] = cwd
- try:
- os.chdir(cwd)
- except (OSError, IOError) as e:
- self.fail_json(rc=e.errno, msg="Could not open %s, %s" % (cwd, to_native(e)),
- exception=traceback.format_exc())
-
- old_umask = None
- if umask:
- old_umask = os.umask(umask)
-
- t = None
- fail_json_kwargs = None
-
- try:
- if self._debug:
- self.log('Executing: ' + clean_args)
-
- # ZUUL: Replaced the execution loop with the zuul_runner run function
-
- cmd = subprocess.Popen(args, **kwargs)
- if self.no_log:
- t = None
- else:
- t = threading.Thread(target=follow, args=(cmd.stdout, zuul_log_id))
- t.daemon = True
- t.start()
-
- # ZUUL: Our log thread will catch the output so don't do that here.
-
- # # the communication logic here is essentially taken from that
- # # of the _communicate() function in ssh.py
- #
- # stdout = b('')
- # stderr = b('')
- #
- # # ZUUL: stderr follows stdout
- # rpipes = [cmd.stdout]
- #
- # if data:
- # if not binary_data:
- # data += '\n'
- # if isinstance(data, text_type):
- # data = to_bytes(data)
- # cmd.stdin.write(data)
- # cmd.stdin.close()
- #
- # while True:
- # rfds, wfds, efds = select.select(rpipes, [], rpipes, 1)
- # stdout += self._read_from_pipes(rpipes, rfds, cmd.stdout)
- #
- # # ZUUL: stderr follows stdout
- # # stderr += self._read_from_pipes(rpipes, rfds, cmd.stderr)
- #
- # # if we're checking for prompts, do it now
- # if prompt_re:
- # if prompt_re.search(stdout) and not data:
- # if encoding:
- # stdout = to_native(stdout, encoding=encoding, errors=errors)
- # else:
- # stdout = stdout
- # return (257, stdout, "A prompt was encountered while running a command, but no input data was specified")
- # # only break out if no pipes are left to read or
- # # the pipes are completely read and
- # # the process is terminated
- # if (not rpipes or not rfds) and cmd.poll() is not None:
- # break
- # # No pipes are left to read but process is not yet terminated
- # # Only then it is safe to wait for the process to be finished
- # # NOTE: Actually cmd.poll() is always None here if rpipes is empty
- # elif not rpipes and cmd.poll() is None:
- # cmd.wait()
- # # The process is terminated. Since no pipes to read from are
- # # left, there is no need to call select() again.
- # break
-
- # ZUUL: If the console log follow thread *is* stuck in readline,
- # we can't close stdout (attempting to do so raises an
- # exception) , so this is disabled.
- # cmd.stdout.close()
- # cmd.stderr.close()
-
- rc = cmd.wait()
-
- # Give the thread that is writing the console log up to 10 seconds
- # to catch up and exit. If it hasn't done so by then, it is very
- # likely stuck in readline() because it spawed a child that is
- # holding stdout or stderr open.
- if t:
- t.join(10)
- with Console(zuul_log_id) as console:
- if t.isAlive():
- console.addLine("[Zuul] standard output/error still open "
- "after child exited")
- # ZUUL: stdout and stderr are in the console log file
- # ZUUL: return the saved log lines so we can ship them back
- stdout = b('').join(_log_lines)
- else:
- stdout = b('')
- stderr = b('')
-
- except (OSError, IOError) as e:
- self.log("Error Executing CMD:%s Exception:%s" % (clean_args, to_native(e)))
- # ZUUL: store fail_json_kwargs and fail later in finally
- fail_json_kwargs = dict(rc=e.errno, msg=to_native(e), cmd=clean_args)
- except Exception as e:
- self.log("Error Executing CMD:%s Exception:%s" % (clean_args, to_native(traceback.format_exc())))
- # ZUUL: store fail_json_kwargs and fail later in finally
- fail_json_kwargs = dict(rc=257, msg=to_native(e), exception=traceback.format_exc(), cmd=clean_args)
- finally:
- if t:
- with Console(zuul_log_id) as console:
- if t.isAlive():
- console.addLine("[Zuul] standard output/error still open "
- "after child exited")
- if fail_json_kwargs:
- # we hit an exception and need to use the rc from
- # fail_json_kwargs
- rc = fail_json_kwargs['rc']
-
- console.addLine("[Zuul] Task exit code: %s\n" % rc)
-
- if fail_json_kwargs:
- self.fail_json(**fail_json_kwargs)
-
- # Restore env settings
- for key, val in old_env_vals.items():
- if val is None:
- del os.environ[key]
- else:
- os.environ[key] = val
-
- if old_umask:
- os.umask(old_umask)
-
- if rc != 0 and check_rc:
- msg = heuristic_log_sanitize(stderr.rstrip(), self.no_log_values)
- self.fail_json(cmd=clean_args, rc=rc, stdout=stdout, stderr=stderr, msg=msg)
-
- # reset the pwd
- os.chdir(prev_dir)
-
- if encoding is not None:
- return (rc, to_native(stdout, encoding=encoding, errors=errors),
- to_native(stderr, encoding=encoding, errors=errors))
- return (rc, stdout, stderr)
-
-
-def check_command(module, commandline):
- arguments = {'chown': 'owner', 'chmod': 'mode', 'chgrp': 'group',
- 'ln': 'state=link', 'mkdir': 'state=directory',
- 'rmdir': 'state=absent', 'rm': 'state=absent', 'touch': 'state=touch'}
- commands = {'curl': 'get_url or uri', 'wget': 'get_url or uri',
- 'svn': 'subversion', 'service': 'service',
- 'mount': 'mount', 'rpm': 'yum, dnf or zypper', 'yum': 'yum', 'apt-get': 'apt',
- 'tar': 'unarchive', 'unzip': 'unarchive', 'sed': 'replace, lineinfile or template',
- 'dnf': 'dnf', 'zypper': 'zypper'}
- become = ['sudo', 'su', 'pbrun', 'pfexec', 'runas', 'pmrun']
- command = os.path.basename(commandline.split()[0])
-
- disable_suffix = "If you need to use command because {mod} is insufficient you can add" \
- " warn=False to this command task or set command_warnings=False in" \
- " ansible.cfg to get rid of this message."
- substitutions = {'mod': None, 'cmd': command}
-
- if command in arguments:
- msg = "Consider using the {mod} module with {subcmd} rather than running {cmd}. " + disable_suffix
- substitutions['mod'] = 'file'
- substitutions['subcmd'] = arguments[command]
- module.warn(msg.format(**substitutions))
-
- if command in commands:
- msg = "Consider using the {mod} module rather than running {cmd}. " + disable_suffix
- substitutions['mod'] = commands[command]
- module.warn(msg.format(**substitutions))
-
- if command in become:
- module.warn("Consider using 'become', 'become_method', and 'become_user' rather than running %s" % (command,))
-
-
-def main():
-
- # the command module is the one ansible module that does not take key=value args
- # hence don't copy this one if you are looking to build others!
- module = AnsibleModule(
- argument_spec=dict(
- _raw_params=dict(),
- _uses_shell=dict(type='bool', default=False),
- chdir=dict(type='path'),
- executable=dict(),
- creates=dict(type='path'),
- removes=dict(type='path'),
- # The default for this really comes from the action plugin
- warn=dict(type='bool', default=True),
- stdin=dict(required=False),
- zuul_log_id=dict(type='str'),
- )
- )
-
- shell = module.params['_uses_shell']
- chdir = module.params['chdir']
- executable = module.params['executable']
- args = module.params['_raw_params']
- creates = module.params['creates']
- removes = module.params['removes']
- warn = module.params['warn']
- stdin = module.params['stdin']
- zuul_log_id = module.params['zuul_log_id']
-
- if not shell and executable:
- module.warn("As of Ansible 2.4, the parameter 'executable' is no longer supported with the 'command' module. Not using '%s'." % executable)
- executable = None
-
- if not zuul_log_id:
- module.fail_json(rc=256, msg="zuul_log_id missing: %s" % module.params)
-
- if not args or args.strip() == '':
- module.fail_json(rc=256, msg="no command given")
-
- if chdir:
- chdir = os.path.abspath(chdir)
- os.chdir(chdir)
-
- if creates:
- # do not run the command if the line contains creates=filename
- # and the filename already exists. This allows idempotence
- # of command executions.
- if glob.glob(creates):
- module.exit_json(
- cmd=args,
- stdout="skipped, since %s exists" % creates,
- changed=False,
- rc=0
- )
-
- if removes:
- # do not run the command if the line contains removes=filename
- # and the filename does not exist. This allows idempotence
- # of command executions.
- if not glob.glob(removes):
- module.exit_json(
- cmd=args,
- stdout="skipped, since %s does not exist" % removes,
- changed=False,
- rc=0
- )
-
- if warn:
- check_command(module, args)
-
- if not shell:
- args = shlex.split(args)
- startd = datetime.datetime.now()
-
- rc, out, err = zuul_run_command(module, args, zuul_log_id, executable=executable, use_unsafe_shell=shell, encoding=None, data=stdin)
-
- endd = datetime.datetime.now()
- delta = endd - startd
-
- result = dict(
- cmd=args,
- stdout=out.rstrip(b"\r\n"),
- stderr=err.rstrip(b"\r\n"),
- rc=rc,
- start=str(startd),
- end=str(endd),
- delta=str(delta),
- changed=True,
- zuul_log_id=zuul_log_id
- )
-
- if rc != 0:
- module.fail_json(msg='non-zero return code', **result)
-
- module.exit_json(**result)
-
-
-if __name__ == '__main__':
- main()
diff --git a/zuul/ansible/2.5/lookup/hashi_vault.py b/zuul/ansible/2.5/lookup/hashi_vault.py
deleted file mode 120000
index 6fd3dda3e..000000000
--- a/zuul/ansible/2.5/lookup/hashi_vault.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/hashi_vault.py \ No newline at end of file
diff --git a/zuul/ansible/2.5/lookup/hashi_vault.pyi b/zuul/ansible/2.5/lookup/hashi_vault.pyi
deleted file mode 120000
index f0b0ceb19..000000000
--- a/zuul/ansible/2.5/lookup/hashi_vault.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/hashi_vault.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/__init__.py b/zuul/ansible/2.6/action/__init__.py
deleted file mode 120000
index 4048e7ac1..000000000
--- a/zuul/ansible/2.6/action/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/add_host.py b/zuul/ansible/2.6/action/add_host.py
deleted file mode 120000
index fdb7f466b..000000000
--- a/zuul/ansible/2.6/action/add_host.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/add_host.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/add_host.pyi b/zuul/ansible/2.6/action/add_host.pyi
deleted file mode 120000
index 9257939ce..000000000
--- a/zuul/ansible/2.6/action/add_host.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/add_host.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aireos.py b/zuul/ansible/2.6/action/aireos.py
deleted file mode 120000
index f2459ab86..000000000
--- a/zuul/ansible/2.6/action/aireos.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aireos.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aireos.pyi b/zuul/ansible/2.6/action/aireos.pyi
deleted file mode 120000
index f58722a86..000000000
--- a/zuul/ansible/2.6/action/aireos.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aireos.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aireos_config.py b/zuul/ansible/2.6/action/aireos_config.py
deleted file mode 120000
index acc0dd85e..000000000
--- a/zuul/ansible/2.6/action/aireos_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aireos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aireos_config.pyi b/zuul/ansible/2.6/action/aireos_config.pyi
deleted file mode 120000
index fc7b16cf6..000000000
--- a/zuul/ansible/2.6/action/aireos_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aireos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aruba.py b/zuul/ansible/2.6/action/aruba.py
deleted file mode 120000
index 8784b92ed..000000000
--- a/zuul/ansible/2.6/action/aruba.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aruba.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aruba.pyi b/zuul/ansible/2.6/action/aruba.pyi
deleted file mode 120000
index 228b3ecfe..000000000
--- a/zuul/ansible/2.6/action/aruba.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aruba.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aruba_config.py b/zuul/ansible/2.6/action/aruba_config.py
deleted file mode 120000
index f50d9082b..000000000
--- a/zuul/ansible/2.6/action/aruba_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aruba_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aruba_config.pyi b/zuul/ansible/2.6/action/aruba_config.pyi
deleted file mode 120000
index bab9d28fd..000000000
--- a/zuul/ansible/2.6/action/aruba_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aruba_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/asa.py b/zuul/ansible/2.6/action/asa.py
deleted file mode 120000
index 3e7e93dc0..000000000
--- a/zuul/ansible/2.6/action/asa.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/asa.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/asa.pyi b/zuul/ansible/2.6/action/asa.pyi
deleted file mode 120000
index e0cdc24b5..000000000
--- a/zuul/ansible/2.6/action/asa.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/asa.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/asa_config.py b/zuul/ansible/2.6/action/asa_config.py
deleted file mode 120000
index 598f400d5..000000000
--- a/zuul/ansible/2.6/action/asa_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/asa_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/asa_config.pyi b/zuul/ansible/2.6/action/asa_config.pyi
deleted file mode 120000
index 86fe03484..000000000
--- a/zuul/ansible/2.6/action/asa_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/asa_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/asa_template.py b/zuul/ansible/2.6/action/asa_template.py
deleted file mode 120000
index e1e8eecbe..000000000
--- a/zuul/ansible/2.6/action/asa_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/asa_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/asa_template.pyi b/zuul/ansible/2.6/action/asa_template.pyi
deleted file mode 120000
index 0753101f1..000000000
--- a/zuul/ansible/2.6/action/asa_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/asa_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/assemble.py b/zuul/ansible/2.6/action/assemble.py
deleted file mode 120000
index 22273b123..000000000
--- a/zuul/ansible/2.6/action/assemble.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/assemble.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/assemble.pyi b/zuul/ansible/2.6/action/assemble.pyi
deleted file mode 120000
index 3a7074ec7..000000000
--- a/zuul/ansible/2.6/action/assemble.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/assemble.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aws_s3.py b/zuul/ansible/2.6/action/aws_s3.py
deleted file mode 120000
index a2dabf9f8..000000000
--- a/zuul/ansible/2.6/action/aws_s3.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aws_s3.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/aws_s3.pyi b/zuul/ansible/2.6/action/aws_s3.pyi
deleted file mode 120000
index 5ac40a7db..000000000
--- a/zuul/ansible/2.6/action/aws_s3.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/aws_s3.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ce.py b/zuul/ansible/2.6/action/ce.py
deleted file mode 120000
index db95d9121..000000000
--- a/zuul/ansible/2.6/action/ce.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ce.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ce.pyi b/zuul/ansible/2.6/action/ce.pyi
deleted file mode 120000
index ba2365f2b..000000000
--- a/zuul/ansible/2.6/action/ce.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ce.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ce_config.py b/zuul/ansible/2.6/action/ce_config.py
deleted file mode 120000
index ec0319843..000000000
--- a/zuul/ansible/2.6/action/ce_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ce_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ce_config.pyi b/zuul/ansible/2.6/action/ce_config.pyi
deleted file mode 120000
index b762785d1..000000000
--- a/zuul/ansible/2.6/action/ce_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ce_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ce_template.py b/zuul/ansible/2.6/action/ce_template.py
deleted file mode 120000
index aa59e80a0..000000000
--- a/zuul/ansible/2.6/action/ce_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ce_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ce_template.pyi b/zuul/ansible/2.6/action/ce_template.pyi
deleted file mode 120000
index 75ba2250c..000000000
--- a/zuul/ansible/2.6/action/ce_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ce_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/copy.py b/zuul/ansible/2.6/action/copy.py
deleted file mode 120000
index 1c0c2291f..000000000
--- a/zuul/ansible/2.6/action/copy.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/copy.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/copy.pyi b/zuul/ansible/2.6/action/copy.pyi
deleted file mode 120000
index 189722f2a..000000000
--- a/zuul/ansible/2.6/action/copy.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/copy.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/dellos10_config.py b/zuul/ansible/2.6/action/dellos10_config.py
deleted file mode 120000
index caf6ce6c3..000000000
--- a/zuul/ansible/2.6/action/dellos10_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/dellos10_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/dellos10_config.pyi b/zuul/ansible/2.6/action/dellos10_config.pyi
deleted file mode 120000
index ede9a927e..000000000
--- a/zuul/ansible/2.6/action/dellos10_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/dellos10_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/dellos6_config.py b/zuul/ansible/2.6/action/dellos6_config.py
deleted file mode 120000
index 080fcce4c..000000000
--- a/zuul/ansible/2.6/action/dellos6_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/dellos6_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/dellos6_config.pyi b/zuul/ansible/2.6/action/dellos6_config.pyi
deleted file mode 120000
index d5cf3ce15..000000000
--- a/zuul/ansible/2.6/action/dellos6_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/dellos6_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/dellos9_config.py b/zuul/ansible/2.6/action/dellos9_config.py
deleted file mode 120000
index c2e79870c..000000000
--- a/zuul/ansible/2.6/action/dellos9_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/dellos9_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/dellos9_config.pyi b/zuul/ansible/2.6/action/dellos9_config.pyi
deleted file mode 120000
index b50389ab4..000000000
--- a/zuul/ansible/2.6/action/dellos9_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/dellos9_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/eos_config.py b/zuul/ansible/2.6/action/eos_config.py
deleted file mode 120000
index 4d1ab53bb..000000000
--- a/zuul/ansible/2.6/action/eos_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/eos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/eos_config.pyi b/zuul/ansible/2.6/action/eos_config.pyi
deleted file mode 120000
index f6d058ba1..000000000
--- a/zuul/ansible/2.6/action/eos_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/eos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/eos_template.py b/zuul/ansible/2.6/action/eos_template.py
deleted file mode 120000
index a108bf66f..000000000
--- a/zuul/ansible/2.6/action/eos_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/eos_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/eos_template.pyi b/zuul/ansible/2.6/action/eos_template.pyi
deleted file mode 120000
index b9cac42e8..000000000
--- a/zuul/ansible/2.6/action/eos_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/eos_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/fetch.py b/zuul/ansible/2.6/action/fetch.py
deleted file mode 120000
index d53e02548..000000000
--- a/zuul/ansible/2.6/action/fetch.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/fetch.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/fetch.pyi b/zuul/ansible/2.6/action/fetch.pyi
deleted file mode 120000
index b3ae31523..000000000
--- a/zuul/ansible/2.6/action/fetch.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/fetch.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/fortios_config.py b/zuul/ansible/2.6/action/fortios_config.py
deleted file mode 120000
index ef38743bc..000000000
--- a/zuul/ansible/2.6/action/fortios_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/fortios_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/fortios_config.pyi b/zuul/ansible/2.6/action/fortios_config.pyi
deleted file mode 120000
index fa334a059..000000000
--- a/zuul/ansible/2.6/action/fortios_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/fortios_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/include_vars.py b/zuul/ansible/2.6/action/include_vars.py
deleted file mode 120000
index 832d5a27a..000000000
--- a/zuul/ansible/2.6/action/include_vars.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/include_vars.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/include_vars.pyi b/zuul/ansible/2.6/action/include_vars.pyi
deleted file mode 120000
index 4099c1ae6..000000000
--- a/zuul/ansible/2.6/action/include_vars.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/include_vars.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ios_config.py b/zuul/ansible/2.6/action/ios_config.py
deleted file mode 120000
index f1495d47e..000000000
--- a/zuul/ansible/2.6/action/ios_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ios_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ios_config.pyi b/zuul/ansible/2.6/action/ios_config.pyi
deleted file mode 120000
index e6af5e34c..000000000
--- a/zuul/ansible/2.6/action/ios_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ios_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ios_template.py b/zuul/ansible/2.6/action/ios_template.py
deleted file mode 120000
index ef863cedf..000000000
--- a/zuul/ansible/2.6/action/ios_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ios_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ios_template.pyi b/zuul/ansible/2.6/action/ios_template.pyi
deleted file mode 120000
index c37247812..000000000
--- a/zuul/ansible/2.6/action/ios_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ios_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/iosxr_config.py b/zuul/ansible/2.6/action/iosxr_config.py
deleted file mode 120000
index 4eb293626..000000000
--- a/zuul/ansible/2.6/action/iosxr_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/iosxr_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/iosxr_config.pyi b/zuul/ansible/2.6/action/iosxr_config.pyi
deleted file mode 120000
index 70a2d67a3..000000000
--- a/zuul/ansible/2.6/action/iosxr_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/iosxr_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/iosxr_template.py b/zuul/ansible/2.6/action/iosxr_template.py
deleted file mode 120000
index 6a60fa49e..000000000
--- a/zuul/ansible/2.6/action/iosxr_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/iosxr_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/iosxr_template.pyi b/zuul/ansible/2.6/action/iosxr_template.pyi
deleted file mode 120000
index 918f5a113..000000000
--- a/zuul/ansible/2.6/action/iosxr_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/iosxr_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/junos_config.py b/zuul/ansible/2.6/action/junos_config.py
deleted file mode 120000
index c50f3bc67..000000000
--- a/zuul/ansible/2.6/action/junos_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/junos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/junos_config.pyi b/zuul/ansible/2.6/action/junos_config.pyi
deleted file mode 120000
index 31cbba451..000000000
--- a/zuul/ansible/2.6/action/junos_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/junos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/junos_template.py b/zuul/ansible/2.6/action/junos_template.py
deleted file mode 120000
index a2119b7cd..000000000
--- a/zuul/ansible/2.6/action/junos_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/junos_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/junos_template.pyi b/zuul/ansible/2.6/action/junos_template.pyi
deleted file mode 120000
index e6ef22ba9..000000000
--- a/zuul/ansible/2.6/action/junos_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/junos_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_banner.py b/zuul/ansible/2.6/action/net_banner.py
deleted file mode 120000
index 69cc6d5a4..000000000
--- a/zuul/ansible/2.6/action/net_banner.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_banner.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_banner.pyi b/zuul/ansible/2.6/action/net_banner.pyi
deleted file mode 120000
index f926dbf70..000000000
--- a/zuul/ansible/2.6/action/net_banner.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_banner.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_base.py b/zuul/ansible/2.6/action/net_base.py
deleted file mode 120000
index f36b6ecc7..000000000
--- a/zuul/ansible/2.6/action/net_base.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_base.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_base.pyi b/zuul/ansible/2.6/action/net_base.pyi
deleted file mode 120000
index 9f6ce1b7d..000000000
--- a/zuul/ansible/2.6/action/net_base.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_base.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_config.py b/zuul/ansible/2.6/action/net_config.py
deleted file mode 120000
index a817ca518..000000000
--- a/zuul/ansible/2.6/action/net_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_config.pyi b/zuul/ansible/2.6/action/net_config.pyi
deleted file mode 120000
index 412b8110e..000000000
--- a/zuul/ansible/2.6/action/net_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_get.py b/zuul/ansible/2.6/action/net_get.py
deleted file mode 120000
index da3d7be0e..000000000
--- a/zuul/ansible/2.6/action/net_get.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_get.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_get.pyi b/zuul/ansible/2.6/action/net_get.pyi
deleted file mode 120000
index 015c4271b..000000000
--- a/zuul/ansible/2.6/action/net_get.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_get.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_interface.py b/zuul/ansible/2.6/action/net_interface.py
deleted file mode 120000
index 1d24f7821..000000000
--- a/zuul/ansible/2.6/action/net_interface.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_interface.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_interface.pyi b/zuul/ansible/2.6/action/net_interface.pyi
deleted file mode 120000
index 57bb45316..000000000
--- a/zuul/ansible/2.6/action/net_interface.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_interface.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_l2_interface.py b/zuul/ansible/2.6/action/net_l2_interface.py
deleted file mode 120000
index 1f44192c8..000000000
--- a/zuul/ansible/2.6/action/net_l2_interface.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_l2_interface.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_l2_interface.pyi b/zuul/ansible/2.6/action/net_l2_interface.pyi
deleted file mode 120000
index 2b780821d..000000000
--- a/zuul/ansible/2.6/action/net_l2_interface.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_l2_interface.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_l3_interface.py b/zuul/ansible/2.6/action/net_l3_interface.py
deleted file mode 120000
index 97017f4e3..000000000
--- a/zuul/ansible/2.6/action/net_l3_interface.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_l3_interface.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_l3_interface.pyi b/zuul/ansible/2.6/action/net_l3_interface.pyi
deleted file mode 120000
index 9317599a2..000000000
--- a/zuul/ansible/2.6/action/net_l3_interface.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_l3_interface.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_linkagg.py b/zuul/ansible/2.6/action/net_linkagg.py
deleted file mode 120000
index d3fc53dd1..000000000
--- a/zuul/ansible/2.6/action/net_linkagg.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_linkagg.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_linkagg.pyi b/zuul/ansible/2.6/action/net_linkagg.pyi
deleted file mode 120000
index b5fac56b6..000000000
--- a/zuul/ansible/2.6/action/net_linkagg.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_linkagg.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_lldp.py b/zuul/ansible/2.6/action/net_lldp.py
deleted file mode 120000
index 15fc3a859..000000000
--- a/zuul/ansible/2.6/action/net_lldp.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_lldp.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_lldp.pyi b/zuul/ansible/2.6/action/net_lldp.pyi
deleted file mode 120000
index a627fdec7..000000000
--- a/zuul/ansible/2.6/action/net_lldp.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_lldp.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_lldp_interface.py b/zuul/ansible/2.6/action/net_lldp_interface.py
deleted file mode 120000
index f57ec137f..000000000
--- a/zuul/ansible/2.6/action/net_lldp_interface.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_lldp_interface.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_lldp_interface.pyi b/zuul/ansible/2.6/action/net_lldp_interface.pyi
deleted file mode 120000
index fdd97b078..000000000
--- a/zuul/ansible/2.6/action/net_lldp_interface.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_lldp_interface.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_logging.py b/zuul/ansible/2.6/action/net_logging.py
deleted file mode 120000
index 57d9766aa..000000000
--- a/zuul/ansible/2.6/action/net_logging.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_logging.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_logging.pyi b/zuul/ansible/2.6/action/net_logging.pyi
deleted file mode 120000
index 1d6f1b029..000000000
--- a/zuul/ansible/2.6/action/net_logging.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_logging.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_ping.py b/zuul/ansible/2.6/action/net_ping.py
deleted file mode 120000
index 696d9f526..000000000
--- a/zuul/ansible/2.6/action/net_ping.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_ping.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_ping.pyi b/zuul/ansible/2.6/action/net_ping.pyi
deleted file mode 120000
index 03f84e975..000000000
--- a/zuul/ansible/2.6/action/net_ping.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_ping.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_static_route.py b/zuul/ansible/2.6/action/net_static_route.py
deleted file mode 120000
index c22b7f0e0..000000000
--- a/zuul/ansible/2.6/action/net_static_route.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_static_route.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_static_route.pyi b/zuul/ansible/2.6/action/net_static_route.pyi
deleted file mode 120000
index 859c20fec..000000000
--- a/zuul/ansible/2.6/action/net_static_route.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_static_route.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_system.py b/zuul/ansible/2.6/action/net_system.py
deleted file mode 120000
index a03dd93c9..000000000
--- a/zuul/ansible/2.6/action/net_system.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_system.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_system.pyi b/zuul/ansible/2.6/action/net_system.pyi
deleted file mode 120000
index cc159053b..000000000
--- a/zuul/ansible/2.6/action/net_system.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_system.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_template.py b/zuul/ansible/2.6/action/net_template.py
deleted file mode 120000
index 18ba965e4..000000000
--- a/zuul/ansible/2.6/action/net_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_template.pyi b/zuul/ansible/2.6/action/net_template.pyi
deleted file mode 120000
index 3bfbb6f0f..000000000
--- a/zuul/ansible/2.6/action/net_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_user.py b/zuul/ansible/2.6/action/net_user.py
deleted file mode 120000
index fcfb3f55a..000000000
--- a/zuul/ansible/2.6/action/net_user.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_user.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_user.pyi b/zuul/ansible/2.6/action/net_user.pyi
deleted file mode 120000
index 267f5da34..000000000
--- a/zuul/ansible/2.6/action/net_user.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_user.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_vlan.py b/zuul/ansible/2.6/action/net_vlan.py
deleted file mode 120000
index df275656f..000000000
--- a/zuul/ansible/2.6/action/net_vlan.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_vlan.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_vlan.pyi b/zuul/ansible/2.6/action/net_vlan.pyi
deleted file mode 120000
index 718074899..000000000
--- a/zuul/ansible/2.6/action/net_vlan.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_vlan.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_vrf.py b/zuul/ansible/2.6/action/net_vrf.py
deleted file mode 120000
index c757d2100..000000000
--- a/zuul/ansible/2.6/action/net_vrf.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_vrf.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/net_vrf.pyi b/zuul/ansible/2.6/action/net_vrf.pyi
deleted file mode 120000
index df043a0cd..000000000
--- a/zuul/ansible/2.6/action/net_vrf.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/net_vrf.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/netconf_config.py b/zuul/ansible/2.6/action/netconf_config.py
deleted file mode 120000
index 4d13bb82c..000000000
--- a/zuul/ansible/2.6/action/netconf_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/netconf_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/netconf_config.pyi b/zuul/ansible/2.6/action/netconf_config.pyi
deleted file mode 120000
index c75a746b4..000000000
--- a/zuul/ansible/2.6/action/netconf_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/netconf_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/network.py b/zuul/ansible/2.6/action/network.py
deleted file mode 120000
index 9e2d1baa4..000000000
--- a/zuul/ansible/2.6/action/network.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/network.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/network.pyi b/zuul/ansible/2.6/action/network.pyi
deleted file mode 120000
index e1842d197..000000000
--- a/zuul/ansible/2.6/action/network.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/network.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/normal.py b/zuul/ansible/2.6/action/normal.py
deleted file mode 120000
index 4e131d98d..000000000
--- a/zuul/ansible/2.6/action/normal.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/normal.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/normal.pyi b/zuul/ansible/2.6/action/normal.pyi
deleted file mode 120000
index bbbe0704c..000000000
--- a/zuul/ansible/2.6/action/normal.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/normal.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/nxos_config.py b/zuul/ansible/2.6/action/nxos_config.py
deleted file mode 120000
index 0cc233c34..000000000
--- a/zuul/ansible/2.6/action/nxos_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/nxos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/nxos_config.pyi b/zuul/ansible/2.6/action/nxos_config.pyi
deleted file mode 120000
index b2e63b6e3..000000000
--- a/zuul/ansible/2.6/action/nxos_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/nxos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/nxos_template.py b/zuul/ansible/2.6/action/nxos_template.py
deleted file mode 120000
index 3d599062a..000000000
--- a/zuul/ansible/2.6/action/nxos_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/nxos_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/nxos_template.pyi b/zuul/ansible/2.6/action/nxos_template.pyi
deleted file mode 120000
index e36fa4e90..000000000
--- a/zuul/ansible/2.6/action/nxos_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/nxos_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ops_config.py b/zuul/ansible/2.6/action/ops_config.py
deleted file mode 120000
index 2abe0669d..000000000
--- a/zuul/ansible/2.6/action/ops_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ops_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ops_config.pyi b/zuul/ansible/2.6/action/ops_config.pyi
deleted file mode 120000
index 7517f9c7b..000000000
--- a/zuul/ansible/2.6/action/ops_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ops_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ops_template.py b/zuul/ansible/2.6/action/ops_template.py
deleted file mode 120000
index 5c841ca57..000000000
--- a/zuul/ansible/2.6/action/ops_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ops_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/ops_template.pyi b/zuul/ansible/2.6/action/ops_template.pyi
deleted file mode 120000
index 4baa28a3f..000000000
--- a/zuul/ansible/2.6/action/ops_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/ops_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/patch.py b/zuul/ansible/2.6/action/patch.py
deleted file mode 120000
index 8996710ba..000000000
--- a/zuul/ansible/2.6/action/patch.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/patch.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/patch.pyi b/zuul/ansible/2.6/action/patch.pyi
deleted file mode 120000
index 577e43600..000000000
--- a/zuul/ansible/2.6/action/patch.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/patch.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/raw.py b/zuul/ansible/2.6/action/raw.py
deleted file mode 120000
index e4962dd8a..000000000
--- a/zuul/ansible/2.6/action/raw.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/raw.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/raw.pyi b/zuul/ansible/2.6/action/raw.pyi
deleted file mode 120000
index 741945ef2..000000000
--- a/zuul/ansible/2.6/action/raw.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/raw.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/script.py b/zuul/ansible/2.6/action/script.py
deleted file mode 120000
index 1cccf5805..000000000
--- a/zuul/ansible/2.6/action/script.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/script.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/script.pyi b/zuul/ansible/2.6/action/script.pyi
deleted file mode 120000
index aff69744b..000000000
--- a/zuul/ansible/2.6/action/script.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/script.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/sros_config.py b/zuul/ansible/2.6/action/sros_config.py
deleted file mode 120000
index 1762874e4..000000000
--- a/zuul/ansible/2.6/action/sros_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/sros_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/sros_config.pyi b/zuul/ansible/2.6/action/sros_config.pyi
deleted file mode 120000
index 453e4b8e1..000000000
--- a/zuul/ansible/2.6/action/sros_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/sros_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/synchronize.py b/zuul/ansible/2.6/action/synchronize.py
deleted file mode 120000
index f2126166c..000000000
--- a/zuul/ansible/2.6/action/synchronize.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/synchronize.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/synchronize.pyi b/zuul/ansible/2.6/action/synchronize.pyi
deleted file mode 120000
index 4ff1a2ee9..000000000
--- a/zuul/ansible/2.6/action/synchronize.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/synchronize.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/template.py b/zuul/ansible/2.6/action/template.py
deleted file mode 120000
index 720717d83..000000000
--- a/zuul/ansible/2.6/action/template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/template.pyi b/zuul/ansible/2.6/action/template.pyi
deleted file mode 120000
index aed7fb07a..000000000
--- a/zuul/ansible/2.6/action/template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/unarchive.py b/zuul/ansible/2.6/action/unarchive.py
deleted file mode 120000
index 2d7ce5aed..000000000
--- a/zuul/ansible/2.6/action/unarchive.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/unarchive.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/unarchive.pyi b/zuul/ansible/2.6/action/unarchive.pyi
deleted file mode 120000
index fead9ca55..000000000
--- a/zuul/ansible/2.6/action/unarchive.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/unarchive.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/vyos_config.py b/zuul/ansible/2.6/action/vyos_config.py
deleted file mode 120000
index 2732fd7a1..000000000
--- a/zuul/ansible/2.6/action/vyos_config.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/vyos_config.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/vyos_config.pyi b/zuul/ansible/2.6/action/vyos_config.pyi
deleted file mode 120000
index ac5d76632..000000000
--- a/zuul/ansible/2.6/action/vyos_config.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/vyos_config.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/win_copy.py b/zuul/ansible/2.6/action/win_copy.py
deleted file mode 120000
index 80c3f3846..000000000
--- a/zuul/ansible/2.6/action/win_copy.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/win_copy.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/win_copy.pyi b/zuul/ansible/2.6/action/win_copy.pyi
deleted file mode 120000
index 017c792ff..000000000
--- a/zuul/ansible/2.6/action/win_copy.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/win_copy.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/win_template.py b/zuul/ansible/2.6/action/win_template.py
deleted file mode 120000
index f2a8b2d63..000000000
--- a/zuul/ansible/2.6/action/win_template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/win_template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/action/win_template.pyi b/zuul/ansible/2.6/action/win_template.pyi
deleted file mode 120000
index 40825895b..000000000
--- a/zuul/ansible/2.6/action/win_template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/action/win_template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/actiongeneral/__init__.py b/zuul/ansible/2.6/actiongeneral/__init__.py
deleted file mode 120000
index 38d887448..000000000
--- a/zuul/ansible/2.6/actiongeneral/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/actiongeneral/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/actiongeneral/command.py b/zuul/ansible/2.6/actiongeneral/command.py
deleted file mode 120000
index f190db2cc..000000000
--- a/zuul/ansible/2.6/actiongeneral/command.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/actiongeneral/command.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/actiongeneral/command.pyi b/zuul/ansible/2.6/actiongeneral/command.pyi
deleted file mode 120000
index 81305dd03..000000000
--- a/zuul/ansible/2.6/actiongeneral/command.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/actiongeneral/command.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/actiongeneral/zuul_return.py b/zuul/ansible/2.6/actiongeneral/zuul_return.py
deleted file mode 120000
index 2f5b2559e..000000000
--- a/zuul/ansible/2.6/actiongeneral/zuul_return.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/actiongeneral/zuul_return.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/callback/__init__.py b/zuul/ansible/2.6/callback/__init__.py
deleted file mode 120000
index 00b974388..000000000
--- a/zuul/ansible/2.6/callback/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/callback/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/callback/zuul_json.py b/zuul/ansible/2.6/callback/zuul_json.py
deleted file mode 120000
index b0a07779b..000000000
--- a/zuul/ansible/2.6/callback/zuul_json.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/callback/zuul_json.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/callback/zuul_stream.py b/zuul/ansible/2.6/callback/zuul_stream.py
deleted file mode 120000
index f75561bf4..000000000
--- a/zuul/ansible/2.6/callback/zuul_stream.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/callback/zuul_stream.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/callback/zuul_unreachable.py b/zuul/ansible/2.6/callback/zuul_unreachable.py
deleted file mode 120000
index 205baca6f..000000000
--- a/zuul/ansible/2.6/callback/zuul_unreachable.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/callback/zuul_unreachable.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/filter/__init__.py b/zuul/ansible/2.6/filter/__init__.py
deleted file mode 120000
index f80a4da61..000000000
--- a/zuul/ansible/2.6/filter/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/filter/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/filter/zuul_filters.py b/zuul/ansible/2.6/filter/zuul_filters.py
deleted file mode 120000
index d406e5fe6..000000000
--- a/zuul/ansible/2.6/filter/zuul_filters.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/filter/zuul_filters.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/library/__init__.py b/zuul/ansible/2.6/library/__init__.py
deleted file mode 120000
index 0b68ce0f4..000000000
--- a/zuul/ansible/2.6/library/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/library/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/library/command.py b/zuul/ansible/2.6/library/command.py
deleted file mode 120000
index 9c7633169..000000000
--- a/zuul/ansible/2.6/library/command.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/library/command.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/library/zuul_console.py b/zuul/ansible/2.6/library/zuul_console.py
deleted file mode 120000
index 7c905e0f9..000000000
--- a/zuul/ansible/2.6/library/zuul_console.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/library/zuul_console.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/logconfig.py b/zuul/ansible/2.6/logconfig.py
deleted file mode 120000
index 767cb2e81..000000000
--- a/zuul/ansible/2.6/logconfig.py
+++ /dev/null
@@ -1 +0,0 @@
-../logconfig.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/__init__.py b/zuul/ansible/2.6/lookup/__init__.py
deleted file mode 120000
index b008ecb3b..000000000
--- a/zuul/ansible/2.6/lookup/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/__init__.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/_banned.py b/zuul/ansible/2.6/lookup/_banned.py
deleted file mode 120000
index 2e127f4e7..000000000
--- a/zuul/ansible/2.6/lookup/_banned.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/_banned.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/_banned.pyi b/zuul/ansible/2.6/lookup/_banned.pyi
deleted file mode 120000
index d7909135d..000000000
--- a/zuul/ansible/2.6/lookup/_banned.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/_banned.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/chef_databag.py b/zuul/ansible/2.6/lookup/chef_databag.py
deleted file mode 120000
index d4efe7e85..000000000
--- a/zuul/ansible/2.6/lookup/chef_databag.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/chef_databag.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/chef_databag.pyi b/zuul/ansible/2.6/lookup/chef_databag.pyi
deleted file mode 120000
index c06fc3001..000000000
--- a/zuul/ansible/2.6/lookup/chef_databag.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/chef_databag.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/consul_kv.py b/zuul/ansible/2.6/lookup/consul_kv.py
deleted file mode 120000
index 66b6f7617..000000000
--- a/zuul/ansible/2.6/lookup/consul_kv.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/consul_kv.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/consul_kv.pyi b/zuul/ansible/2.6/lookup/consul_kv.pyi
deleted file mode 120000
index 33d848347..000000000
--- a/zuul/ansible/2.6/lookup/consul_kv.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/consul_kv.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/credstash.py b/zuul/ansible/2.6/lookup/credstash.py
deleted file mode 120000
index 2c343a27e..000000000
--- a/zuul/ansible/2.6/lookup/credstash.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/credstash.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/credstash.pyi b/zuul/ansible/2.6/lookup/credstash.pyi
deleted file mode 120000
index 071af9d1a..000000000
--- a/zuul/ansible/2.6/lookup/credstash.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/credstash.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/csvfile.py b/zuul/ansible/2.6/lookup/csvfile.py
deleted file mode 120000
index 981754791..000000000
--- a/zuul/ansible/2.6/lookup/csvfile.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/csvfile.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/csvfile.pyi b/zuul/ansible/2.6/lookup/csvfile.pyi
deleted file mode 120000
index 18ded3684..000000000
--- a/zuul/ansible/2.6/lookup/csvfile.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/csvfile.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/cyberarkpassword.py b/zuul/ansible/2.6/lookup/cyberarkpassword.py
deleted file mode 120000
index a573c0cf3..000000000
--- a/zuul/ansible/2.6/lookup/cyberarkpassword.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/cyberarkpassword.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/cyberarkpassword.pyi b/zuul/ansible/2.6/lookup/cyberarkpassword.pyi
deleted file mode 120000
index 01543847e..000000000
--- a/zuul/ansible/2.6/lookup/cyberarkpassword.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/cyberarkpassword.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/dig.py b/zuul/ansible/2.6/lookup/dig.py
deleted file mode 120000
index 92a628c4a..000000000
--- a/zuul/ansible/2.6/lookup/dig.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/dig.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/dig.pyi b/zuul/ansible/2.6/lookup/dig.pyi
deleted file mode 120000
index 7268b42c3..000000000
--- a/zuul/ansible/2.6/lookup/dig.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/dig.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/dnstxt.py b/zuul/ansible/2.6/lookup/dnstxt.py
deleted file mode 120000
index aa3e0f2d9..000000000
--- a/zuul/ansible/2.6/lookup/dnstxt.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/dnstxt.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/dnstxt.pyi b/zuul/ansible/2.6/lookup/dnstxt.pyi
deleted file mode 120000
index 1c221784c..000000000
--- a/zuul/ansible/2.6/lookup/dnstxt.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/dnstxt.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/env.py b/zuul/ansible/2.6/lookup/env.py
deleted file mode 120000
index 124393630..000000000
--- a/zuul/ansible/2.6/lookup/env.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/env.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/env.pyi b/zuul/ansible/2.6/lookup/env.pyi
deleted file mode 120000
index e0ecae07a..000000000
--- a/zuul/ansible/2.6/lookup/env.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/env.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/etcd.py b/zuul/ansible/2.6/lookup/etcd.py
deleted file mode 120000
index c42007aa6..000000000
--- a/zuul/ansible/2.6/lookup/etcd.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/etcd.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/etcd.pyi b/zuul/ansible/2.6/lookup/etcd.pyi
deleted file mode 120000
index a1d4e0458..000000000
--- a/zuul/ansible/2.6/lookup/etcd.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/etcd.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/file.py b/zuul/ansible/2.6/lookup/file.py
deleted file mode 120000
index d1c0692d7..000000000
--- a/zuul/ansible/2.6/lookup/file.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/file.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/file.pyi b/zuul/ansible/2.6/lookup/file.pyi
deleted file mode 120000
index 588dc50c6..000000000
--- a/zuul/ansible/2.6/lookup/file.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/file.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/fileglob.py b/zuul/ansible/2.6/lookup/fileglob.py
deleted file mode 120000
index 0249540ac..000000000
--- a/zuul/ansible/2.6/lookup/fileglob.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/fileglob.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/fileglob.pyi b/zuul/ansible/2.6/lookup/fileglob.pyi
deleted file mode 120000
index ffce6462b..000000000
--- a/zuul/ansible/2.6/lookup/fileglob.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/fileglob.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/filetree.py b/zuul/ansible/2.6/lookup/filetree.py
deleted file mode 120000
index 96cc789ac..000000000
--- a/zuul/ansible/2.6/lookup/filetree.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/filetree.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/filetree.pyi b/zuul/ansible/2.6/lookup/filetree.pyi
deleted file mode 120000
index ca38966f5..000000000
--- a/zuul/ansible/2.6/lookup/filetree.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/filetree.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/first_found.py b/zuul/ansible/2.6/lookup/first_found.py
deleted file mode 120000
index 0a01ced20..000000000
--- a/zuul/ansible/2.6/lookup/first_found.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/first_found.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/first_found.pyi b/zuul/ansible/2.6/lookup/first_found.pyi
deleted file mode 120000
index a3a92f250..000000000
--- a/zuul/ansible/2.6/lookup/first_found.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/first_found.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/hashi_vault.py b/zuul/ansible/2.6/lookup/hashi_vault.py
deleted file mode 120000
index 6fd3dda3e..000000000
--- a/zuul/ansible/2.6/lookup/hashi_vault.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/hashi_vault.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/hashi_vault.pyi b/zuul/ansible/2.6/lookup/hashi_vault.pyi
deleted file mode 120000
index f0b0ceb19..000000000
--- a/zuul/ansible/2.6/lookup/hashi_vault.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/hashi_vault.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/hiera.py b/zuul/ansible/2.6/lookup/hiera.py
deleted file mode 120000
index 01e1883e3..000000000
--- a/zuul/ansible/2.6/lookup/hiera.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/hiera.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/hiera.pyi b/zuul/ansible/2.6/lookup/hiera.pyi
deleted file mode 120000
index b7756855a..000000000
--- a/zuul/ansible/2.6/lookup/hiera.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/hiera.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/ini.py b/zuul/ansible/2.6/lookup/ini.py
deleted file mode 120000
index 6453943b9..000000000
--- a/zuul/ansible/2.6/lookup/ini.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/ini.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/ini.pyi b/zuul/ansible/2.6/lookup/ini.pyi
deleted file mode 120000
index b66fe999a..000000000
--- a/zuul/ansible/2.6/lookup/ini.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/ini.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/keyring.py b/zuul/ansible/2.6/lookup/keyring.py
deleted file mode 120000
index 864d62d6f..000000000
--- a/zuul/ansible/2.6/lookup/keyring.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/keyring.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/keyring.pyi b/zuul/ansible/2.6/lookup/keyring.pyi
deleted file mode 120000
index 9a0c24b55..000000000
--- a/zuul/ansible/2.6/lookup/keyring.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/keyring.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/lastpass.py b/zuul/ansible/2.6/lookup/lastpass.py
deleted file mode 120000
index a28abff20..000000000
--- a/zuul/ansible/2.6/lookup/lastpass.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/lastpass.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/lastpass.pyi b/zuul/ansible/2.6/lookup/lastpass.pyi
deleted file mode 120000
index dfd6e6b31..000000000
--- a/zuul/ansible/2.6/lookup/lastpass.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/lastpass.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/lines.py b/zuul/ansible/2.6/lookup/lines.py
deleted file mode 120000
index c2cae632b..000000000
--- a/zuul/ansible/2.6/lookup/lines.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/lines.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/lines.pyi b/zuul/ansible/2.6/lookup/lines.pyi
deleted file mode 120000
index 3ddc687f9..000000000
--- a/zuul/ansible/2.6/lookup/lines.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/lines.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/mongodb.py b/zuul/ansible/2.6/lookup/mongodb.py
deleted file mode 120000
index 737037fa1..000000000
--- a/zuul/ansible/2.6/lookup/mongodb.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/mongodb.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/mongodb.pyi b/zuul/ansible/2.6/lookup/mongodb.pyi
deleted file mode 120000
index 4c8f754ef..000000000
--- a/zuul/ansible/2.6/lookup/mongodb.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/mongodb.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/password.py b/zuul/ansible/2.6/lookup/password.py
deleted file mode 120000
index 478e6bee6..000000000
--- a/zuul/ansible/2.6/lookup/password.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/password.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/password.pyi b/zuul/ansible/2.6/lookup/password.pyi
deleted file mode 120000
index 370986cbc..000000000
--- a/zuul/ansible/2.6/lookup/password.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/password.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/passwordstore.py b/zuul/ansible/2.6/lookup/passwordstore.py
deleted file mode 120000
index af4c4aa92..000000000
--- a/zuul/ansible/2.6/lookup/passwordstore.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/passwordstore.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/passwordstore.pyi b/zuul/ansible/2.6/lookup/passwordstore.pyi
deleted file mode 120000
index 9ba9b718a..000000000
--- a/zuul/ansible/2.6/lookup/passwordstore.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/passwordstore.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/pipe.py b/zuul/ansible/2.6/lookup/pipe.py
deleted file mode 120000
index ea688c3a3..000000000
--- a/zuul/ansible/2.6/lookup/pipe.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/pipe.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/pipe.pyi b/zuul/ansible/2.6/lookup/pipe.pyi
deleted file mode 120000
index 01d6b935d..000000000
--- a/zuul/ansible/2.6/lookup/pipe.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/pipe.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/redis_kv.py b/zuul/ansible/2.6/lookup/redis_kv.py
deleted file mode 120000
index a711e2651..000000000
--- a/zuul/ansible/2.6/lookup/redis_kv.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/redis_kv.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/redis_kv.pyi b/zuul/ansible/2.6/lookup/redis_kv.pyi
deleted file mode 120000
index da9acca45..000000000
--- a/zuul/ansible/2.6/lookup/redis_kv.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/redis_kv.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/shelvefile.py b/zuul/ansible/2.6/lookup/shelvefile.py
deleted file mode 120000
index 2c76ec937..000000000
--- a/zuul/ansible/2.6/lookup/shelvefile.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/shelvefile.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/shelvefile.pyi b/zuul/ansible/2.6/lookup/shelvefile.pyi
deleted file mode 120000
index 827f4b076..000000000
--- a/zuul/ansible/2.6/lookup/shelvefile.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/shelvefile.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/template.py b/zuul/ansible/2.6/lookup/template.py
deleted file mode 120000
index ef6565ceb..000000000
--- a/zuul/ansible/2.6/lookup/template.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/template.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/template.pyi b/zuul/ansible/2.6/lookup/template.pyi
deleted file mode 120000
index f03685d5c..000000000
--- a/zuul/ansible/2.6/lookup/template.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/template.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/url.py b/zuul/ansible/2.6/lookup/url.py
deleted file mode 120000
index f936b748e..000000000
--- a/zuul/ansible/2.6/lookup/url.py
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/url.py \ No newline at end of file
diff --git a/zuul/ansible/2.6/lookup/url.pyi b/zuul/ansible/2.6/lookup/url.pyi
deleted file mode 120000
index fc13f47c5..000000000
--- a/zuul/ansible/2.6/lookup/url.pyi
+++ /dev/null
@@ -1 +0,0 @@
-../../base/lookup/url.pyi \ No newline at end of file
diff --git a/zuul/ansible/2.6/paths.py b/zuul/ansible/2.6/paths.py
deleted file mode 120000
index dbdb1858e..000000000
--- a/zuul/ansible/2.6/paths.py
+++ /dev/null
@@ -1 +0,0 @@
-../paths.py \ No newline at end of file
diff --git a/zuul/lib/ansible-config.conf b/zuul/lib/ansible-config.conf
index dae960eb6..1fb75eb5b 100644
--- a/zuul/lib/ansible-config.conf
+++ b/zuul/lib/ansible-config.conf
@@ -3,10 +3,6 @@
default_version = 2.9
requirements = ara>=0.16.5,<1.0.0 openstacksdk openshift jmespath google-cloud-storage
-[2.6]
-deprecated = true
-requirements = ansible>=2.6,<2.7
-
[2.7]
deprecated = true
requirements = ansible>=2.7,<2.8