diff --git a/.zuul.yaml b/.zuul.yaml index 2111382076..ec009534b3 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -22,12 +22,16 @@ post-run: - playbooks/zuul-stream/post.yaml - playbooks/zuul-stream/post-ara.yaml - required-projects: - - openstack/ara files: - zuul/ansible/.* + - zuul/lib/ansible* - playbooks/zuul-stream/.* - - requirements.txt + +- job: + name: zuul-stream-functional-2.5 + parent: zuul-stream-functional + vars: + zuul_ansible_version: 2.5 - job: name: zuul-tox-remote @@ -192,7 +196,7 @@ success-url: 'npm/reports/bundle.html' files: - web/.* - - zuul-stream-functional + - zuul-stream-functional-2.5 - zuul-tox-remote - zuul-quick-start - nodepool-zuul-functional: @@ -223,7 +227,7 @@ success-url: 'npm/reports/bundle.html' files: - web/.* - - zuul-stream-functional + - zuul-stream-functional-2.5 - zuul-tox-remote - zuul-quick-start - zuul-upload-image diff --git a/Dockerfile b/Dockerfile index a859675c84..1cc85b3cb4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,6 +24,11 @@ COPY . /tmp/src RUN /tmp/src/tools/install-js-tools.sh RUN assemble +# The wheel install method doesn't run the setup hooks as the source based +# installations do so we have to call zuul-manage-ansible here. +RUN /output/install-from-bindep && zuul-manage-ansible + + FROM opendevorg/python-base as zuul COPY --from=builder /output/ /output @@ -40,8 +45,10 @@ CMD ["/usr/local/bin/zuul"] FROM zuul as zuul-executor COPY --from=builder /output/ /output +COPY --from=builder /usr/local/lib/zuul/ /usr/local/lib/zuul RUN pip install --cache-dir=/output/wheels -r /output/zuul_executor/requirements.txt \ && rm -rf /output + CMD ["/usr/local/bin/zuul-executor"] FROM zuul as zuul-fingergw diff --git a/bindep.txt b/bindep.txt index 0a5545fff5..b63dcdc207 100644 --- a/bindep.txt +++ b/bindep.txt @@ -30,6 +30,9 @@ libffi6 [platform:dpkg] libffi-devel [compile test platform:rpm] python3-dev [compile test platform:dpkg platform:apk] python3-devel [compile test platform:rpm] +python-virtualenv [platform:dpkg] +python3-virtualenv [platform:rpm] +py3-virtualenv [compile test platform:apk] bubblewrap [!platform:ubuntu-xenial] libre2-dev [compile test platform:dpkg] libre2-4 [platform:ubuntu-bionic] diff --git a/doc/requirements.txt b/doc/requirements.txt index 64e444d1b9..ebbfd358af 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -1,3 +1,4 @@ +ansible sphinx>=1.6.1 sphinxcontrib-blockdiag>=1.1.0 sphinxcontrib-programoutput diff --git a/doc/source/admin/examples/docker-compose.yaml b/doc/source/admin/examples/docker-compose.yaml index 1b7f8d371c..ef9d826c31 100644 --- a/doc/source/admin/examples/docker-compose.yaml +++ b/doc/source/admin/examples/docker-compose.yaml @@ -16,7 +16,7 @@ services: git config -f /var/gerrit/etc/gerrit.config noteDb.changes.autoMigrate true && \ /var/gerrit/bin/gerrit.sh run' gerritconfig: - image: zuul/zuul + image: zuul/zuul-executor environment: no_proxy: "${no_proxy},gerrit" depends_on: @@ -25,7 +25,7 @@ services: - "sshkey:/var/ssh:z" - "nodessh:/var/node:z" - "./playbooks/:/var/playbooks/:z" - command: "ansible-playbook /var/playbooks/setup.yaml" + command: "/usr/local/lib/zuul/ansible/2.5/bin/ansible-playbook /var/playbooks/setup.yaml" zk: image: zookeeper mysql: @@ -42,7 +42,9 @@ services: - mysql environment: no_proxy: "${no_proxy},gerrit" - command: "sh -c 'ansible-playbook /var/playbooks/wait-to-start.yaml; zuul-scheduler -d'" + command: "sh -c '/var/playbooks/wait-to-start.sh && zuul-scheduler -d'" + # FIXME: The scheduler has no ansible anymore so use the executor image. + # This needs to be changes such that ansible is not required for startup. image: zuul/zuul-scheduler volumes: - "./etc_zuul/:/etc/zuul/:z" @@ -50,7 +52,7 @@ services: - "sshkey:/var/ssh:z" - /var/lib/zuul web: - command: "sh -c 'ansible-playbook /var/playbooks/wait-to-start.yaml; zuul-web -d'" + command: "sh -c '/var/playbooks/wait-to-start-gearman.sh && zuul-web -d'" depends_on: - scheduler - mysql @@ -59,6 +61,7 @@ services: image: zuul/zuul-web volumes: - "./etc_zuul/:/etc/zuul/:z" + - "./playbooks/:/var/playbooks/:z" executor: privileged: true environment: diff --git a/doc/source/admin/examples/playbooks/wait-to-start-gearman.sh b/doc/source/admin/examples/playbooks/wait-to-start-gearman.sh new file mode 100755 index 0000000000..af11d705e3 --- /dev/null +++ b/doc/source/admin/examples/playbooks/wait-to-start-gearman.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Zuul needs to be able to connect to the remote systems in order to +# start. + +wait_for_gearman() { + echo "Wait for gearman to start" + for i in $(seq 1 120); do + cat < /dev/null > /dev/tcp/scheduler/4730 && return + sleep 1 + done + + echo "Timeout waiting for mysql" + exit 1 +} + +wait_for_gearman diff --git a/doc/source/admin/examples/playbooks/wait-to-start.sh b/doc/source/admin/examples/playbooks/wait-to-start.sh new file mode 100755 index 0000000000..1154fcf448 --- /dev/null +++ b/doc/source/admin/examples/playbooks/wait-to-start.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Zuul needs to be able to connect to the remote systems in order to +# start. + +wait_for_mysql() { + echo "Wait for mysql to start" + for i in $(seq 1 120); do + cat < /dev/null > /dev/tcp/mysql/3306 && return + sleep 1 + done + + echo "Timeout waiting for mysql" + exit 1 +} + +wait_for_gerrit() { + echo "Wait for zuul user to be created" + for i in $(seq 1 120); do + [ $(curl -s -o /dev/null -w "%{http_code}" http://admin:secret@gerrit:8080/a/accounts/zuul/sshkeys) = "200" ] && return + sleep 1 + done + + echo "Timeout waiting for gerrit" + exit 1 +} + +wait_for_mysql +wait_for_gerrit diff --git a/doc/source/admin/examples/playbooks/wait-to-start.yaml b/doc/source/admin/examples/playbooks/wait-to-start.yaml deleted file mode 100644 index ac5a1e3b52..0000000000 --- a/doc/source/admin/examples/playbooks/wait-to-start.yaml +++ /dev/null @@ -1,24 +0,0 @@ -# Zuul needs to be able to connect to the remote systems in order to -# start. - -- hosts: localhost - gather_facts: false - tasks: - - name: Wait for Gerrit to start - wait_for: - host: gerrit - port: 29418 - - name: Wait for mysql to start - wait_for: - host: mysql - port: 3306 - - name: Wait for zuul user to be created - uri: - url: http://gerrit:8080/a/accounts/zuul/sshkeys - method: GET - user: admin - password: secret - register: result - until: result.status == 200 and result.redirected == false - delay: 1 - retries: 120 diff --git a/doc/source/admin/installation.rst b/doc/source/admin/installation.rst index 900d2ffa81..760c4428d7 100644 --- a/doc/source/admin/installation.rst +++ b/doc/source/admin/installation.rst @@ -20,6 +20,9 @@ Zuul has several system-level dependencies as well. You can find a list of operating system packages in ``bindep.txt`` in Zuul's source directory. +It is further required to run ``zuul-manage-ansible`` on the zuul-executor +in order to install all supported ansible versions so zuul can use them. + Zuul Components --------------- diff --git a/doc/source/admin/zuul_install.rst b/doc/source/admin/zuul_install.rst index 83976e70dc..a9cb9c6aa7 100644 --- a/doc/source/admin/zuul_install.rst +++ b/doc/source/admin/zuul_install.rst @@ -43,6 +43,7 @@ required. # All: $ sudo pip3 install . + $ sudo zuul-manage-ansible $ popd Service Files diff --git a/doc/source/developer/ansible.rst b/doc/source/developer/ansible.rst index c5fcbb4422..6e588ed0f6 100644 --- a/doc/source/developer/ansible.rst +++ b/doc/source/developer/ansible.rst @@ -23,7 +23,7 @@ execution to ensure local actions are not executed or that for operations that are desirable to allow locally that they only interact with files in the zuul work directory. -.. autoclass:: zuul.ansible.action.normal.ActionModule +.. autoclass:: zuul.ansible.base.action.normal.ActionModule :members: Build Log Support @@ -38,16 +38,16 @@ for the command to finish. Zuul contains a modified version of the :ansible:module:`command` that starts a log streaming daemon on the build node. -.. automodule:: zuul.ansible.library.command +.. automodule:: zuul.ansible.base.library.command -All jobs run with the :py:mod:`zuul.ansible.callback.zuul_stream` callback +All jobs run with the :py:mod:`zuul.ansible.base.callback.zuul_stream` callback plugin enabled, which writes the build log to a file so that the :py:class:`zuul.lib.log_streamer.LogStreamer` can provide the data on demand over the finger protocol. Finally, :py:class:`zuul.web.LogStreamHandler` exposes that log stream over a websocket connection as part of :py:class:`zuul.web.ZuulWeb`. -.. autoclass:: zuul.ansible.callback.zuul_stream.CallbackModule +.. autoclass:: zuul.ansible.base.callback.zuul_stream.CallbackModule :members: .. autoclass:: zuul.lib.log_streamer.LogStreamer @@ -55,7 +55,7 @@ exposes that log stream over a websocket connection as part of .. autoclass:: zuul.web.ZuulWeb In addition to real-time streaming, Zuul also installs another callback module, -:py:mod:`zuul.ansible.callback.zuul_json.CallbackModule` that collects all +:py:mod:`zuul.ansible.base.callback.zuul_json.CallbackModule` that collects all of the information about a given run into a json file which is written to the work dir so that it can be published along with build logs. Since the streaming log is by necessity a single text stream, choices have to be made for @@ -63,4 +63,4 @@ readability about what data is shown and what is not shown. The json log file is intended to allow for a richer more interactive set of data to be displayed to the user. -.. autoclass:: zuul.ansible.callback.zuul_json.CallbackModule +.. autoclass:: zuul.ansible.base.callback.zuul_json.CallbackModule diff --git a/playbooks/zuul-stream/fixtures/test-stream.yaml b/playbooks/zuul-stream/fixtures/test-stream.yaml index c4946e845e..413fdee60a 100644 --- a/playbooks/zuul-stream/fixtures/test-stream.yaml +++ b/playbooks/zuul-stream/fixtures/test-stream.yaml @@ -6,6 +6,10 @@ setup: register: setupvar + - name: Output ansible version + debug: + var: ansible_version + - name: Output debug for a var debug: var: setupvar diff --git a/playbooks/zuul-stream/functional.yaml b/playbooks/zuul-stream/functional.yaml index a9535cd9fb..9cf97e265e 100644 --- a/playbooks/zuul-stream/functional.yaml +++ b/playbooks/zuul-stream/functional.yaml @@ -1,21 +1,31 @@ - hosts: controller tasks: + - name: Set python path fact + set_fact: + python_path: "/usr/local/lib/python3.5/dist-packages" + - name: Run ansible that should succeed - command: ansible-playbook src/git.openstack.org/openstack-infra/zuul/playbooks/zuul-stream/fixtures/test-stream.yaml + command: > + /usr/lib/zuul/ansible/{{ zuul_ansible_version }}/bin/ansible-playbook + src/git.openstack.org/openstack-infra/zuul/playbooks/zuul-stream/fixtures/test-stream.yaml environment: ZUUL_JOB_LOG_CONFIG: "{{ ansible_user_dir}}/logging.json" ZUUL_JOBDIR: "{{ ansible_user_dir}}" ARA_LOG_CONFIG: "{{ ansible_user_dir}}/logging.json" + PYTHONPATH: "{{ python_path }}" - name: Run ansible playbook that should fail - command: ansible-playbook src/git.openstack.org/openstack-infra/zuul/playbooks/zuul-stream/fixtures/test-stream-failure.yaml + command: > + /usr/lib/zuul/ansible/{{ zuul_ansible_version }}/bin/ansible-playbook + src/git.openstack.org/openstack-infra/zuul/playbooks/zuul-stream/fixtures/test-stream-failure.yaml register: failed_results failed_when: "failed_results.rc != 2" environment: ZUUL_JOB_LOG_CONFIG: "{{ ansible_user_dir}}/logging.json" ZUUL_JOBDIR: "{{ ansible_user_dir}}" ARA_LOG_CONFIG: "{{ ansible_user_dir}}/logging.json" + PYTHONPATH: "{{ python_path }}" - name: Validate output - setupvar shell: | diff --git a/playbooks/zuul-stream/post-ara.yaml b/playbooks/zuul-stream/post-ara.yaml index e666d21ea5..dca6331797 100644 --- a/playbooks/zuul-stream/post-ara.yaml +++ b/playbooks/zuul-stream/post-ara.yaml @@ -2,7 +2,7 @@ tasks: - name: Generate ARA html - command: ara generate html ara-output + command: /usr/lib/zuul/ansible/{{ zuul_ansible_version }}/bin/ara generate html ara-output - name: Compress ARA html command: gzip --recursive --best ara-output diff --git a/playbooks/zuul-stream/pre.yaml b/playbooks/zuul-stream/pre.yaml index 34cabcea31..5fc2e0dc9c 100644 --- a/playbooks/zuul-stream/pre.yaml +++ b/playbooks/zuul-stream/pre.yaml @@ -11,7 +11,11 @@ post_tasks: - name: Install software - command: python3 -m pip install src/git.openstack.org/openstack-infra/zuul src/git.openstack.org/openstack/ara + command: python3 -m pip install src/git.openstack.org/openstack-infra/zuul + become: yes + + - name: Install managed ansible versions + command: /usr/local/bin/zuul-manage-ansible -v become: yes - name: Copy inventory diff --git a/playbooks/zuul-stream/templates/ansible.cfg.j2 b/playbooks/zuul-stream/templates/ansible.cfg.j2 index 03dff15bb8..4cbc40369a 100644 --- a/playbooks/zuul-stream/templates/ansible.cfg.j2 +++ b/playbooks/zuul-stream/templates/ansible.cfg.j2 @@ -2,10 +2,9 @@ inventory = {{ ansible_user_dir }}/inventory.yaml gathering = smart gather_subset = !all -lookup_plugins = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/lookup -action_plugins = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/actiongeneral:{{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/action -callback_plugins = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/callback:{{ ansible_user_dir }}/src/git.openstack.org/openstack/ara/ara/plugins/callbacks -module_utils = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/module_utils +lookup_plugins = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/{{ zuul_ansible_version }}/lookup +action_plugins = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/{{ zuul_ansible_version }}/actiongeneral:{{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/action +callback_plugins = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/{{ zuul_ansible_version }}/callback:/usr/lib/zuul/ansible/{{ zuul_ansible_version }}/lib/python3.5/site-packages/ara/plugins/callbacks stdout_callback = zuul_stream -library = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/library +library = {{ ansible_user_dir }}/src/git.openstack.org/openstack-infra/zuul/zuul/ansible/{{ zuul_ansible_version }}/library retry_files_enabled = False diff --git a/requirements.txt b/requirements.txt index bcfb3c762e..d24072886d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,6 @@ gear>=0.13.0,<1.0.0 apscheduler>=3.0 PrettyTable>=0.6,<0.8 babel>=1.0 -ansible>=2.5.1,<2.6 netaddr kazoo sqlalchemy diff --git a/setup.cfg b/setup.cfg index 50f53e51a2..95b33f0f29 100644 --- a/setup.cfg +++ b/setup.cfg @@ -33,6 +33,7 @@ console_scripts = zuul-web = zuul.cmd.web:main zuul-migrate = zuul.cmd.migrate:main zuul-fingergw = zuul.cmd.fingergw:main + zuul-manage-ansible = zuul.cmd.manage_ansible:main [build_sphinx] source-dir = doc/source diff --git a/tox.ini b/tox.ini index 6001842004..a60009c725 100644 --- a/tox.ini +++ b/tox.ini @@ -25,6 +25,7 @@ install_command = pip install {opts} {packages} whitelist_externals = bash deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt +commands_pre = zuul-manage-ansible -v commands = stestr run {posargs} stestr slowest @@ -49,6 +50,7 @@ commands = bindep test # --ignore-missing-imports tells mypy to not try to follow imported modules # out of the current tree. As you might expect, we don't want to run static # type checking on the world - just on ourselves. +commands_pre = commands = flake8 {posargs} mypy --ignore-missing-imports zuul @@ -67,6 +69,7 @@ commands = [testenv:docs] deps = -r{toxinidir}/doc/requirements.txt -r{toxinidir}/test-requirements.txt +commands_pre = commands = sphinx-build -E -W -d doc/build/doctrees -b html doc/source/ doc/build/html @@ -74,10 +77,12 @@ commands = commands = {posargs} [testenv:nodepool] +commands_pre = install_command = {[nodeenv]install_command} commands = stestr run --concurrency=1 --test-path ./tests/nodepool {posargs} [testenv:remote] +commands_pre = zuul-manage-ansible -v commands = stestr run --concurrency=1 --test-path ./tests/remote {posargs} passenv = ZUUL_TEST_ROOT OS_STDOUT_CAPTURE OS_STDERR_CAPTURE OS_LOG_CAPTURE OS_LOG_DEFAULTS ZUUL_REMOTE_IPV4 ZUUL_SSH_KEY NODEPOOL_ZK_HOST install_command = {[nodeenv]install_command} diff --git a/zuul/ansible/2.5/action/__init__.py b/zuul/ansible/2.5/action/__init__.py new file mode 120000 index 0000000000..4048e7ac12 --- /dev/null +++ b/zuul/ansible/2.5/action/__init__.py @@ -0,0 +1 @@ +../../base/action/__init__.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/add_host.py b/zuul/ansible/2.5/action/add_host.py new file mode 120000 index 0000000000..fdb7f466b2 --- /dev/null +++ b/zuul/ansible/2.5/action/add_host.py @@ -0,0 +1 @@ +../../base/action/add_host.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/add_host.pyi b/zuul/ansible/2.5/action/add_host.pyi new file mode 120000 index 0000000000..9257939ce6 --- /dev/null +++ b/zuul/ansible/2.5/action/add_host.pyi @@ -0,0 +1 @@ +../../base/action/add_host.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/aireos.py b/zuul/ansible/2.5/action/aireos.py new file mode 120000 index 0000000000..f2459ab86b --- /dev/null +++ b/zuul/ansible/2.5/action/aireos.py @@ -0,0 +1 @@ +../../base/action/aireos.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/aireos.pyi b/zuul/ansible/2.5/action/aireos.pyi new file mode 120000 index 0000000000..f58722a861 --- /dev/null +++ b/zuul/ansible/2.5/action/aireos.pyi @@ -0,0 +1 @@ +../../base/action/aireos.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/aireos_config.py b/zuul/ansible/2.5/action/aireos_config.py new file mode 120000 index 0000000000..acc0dd85e3 --- /dev/null +++ b/zuul/ansible/2.5/action/aireos_config.py @@ -0,0 +1 @@ +../../base/action/aireos_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/aireos_config.pyi b/zuul/ansible/2.5/action/aireos_config.pyi new file mode 120000 index 0000000000..fc7b16cf6f --- /dev/null +++ b/zuul/ansible/2.5/action/aireos_config.pyi @@ -0,0 +1 @@ +../../base/action/aireos_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/aruba.py b/zuul/ansible/2.5/action/aruba.py new file mode 120000 index 0000000000..8784b92edd --- /dev/null +++ b/zuul/ansible/2.5/action/aruba.py @@ -0,0 +1 @@ +../../base/action/aruba.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/aruba.pyi b/zuul/ansible/2.5/action/aruba.pyi new file mode 120000 index 0000000000..228b3ecfe4 --- /dev/null +++ b/zuul/ansible/2.5/action/aruba.pyi @@ -0,0 +1 @@ +../../base/action/aruba.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/aruba_config.py b/zuul/ansible/2.5/action/aruba_config.py new file mode 120000 index 0000000000..f50d9082b7 --- /dev/null +++ b/zuul/ansible/2.5/action/aruba_config.py @@ -0,0 +1 @@ +../../base/action/aruba_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/aruba_config.pyi b/zuul/ansible/2.5/action/aruba_config.pyi new file mode 120000 index 0000000000..bab9d28fd2 --- /dev/null +++ b/zuul/ansible/2.5/action/aruba_config.pyi @@ -0,0 +1 @@ +../../base/action/aruba_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/asa.py b/zuul/ansible/2.5/action/asa.py new file mode 120000 index 0000000000..3e7e93dc0f --- /dev/null +++ b/zuul/ansible/2.5/action/asa.py @@ -0,0 +1 @@ +../../base/action/asa.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/asa.pyi b/zuul/ansible/2.5/action/asa.pyi new file mode 120000 index 0000000000..e0cdc24b51 --- /dev/null +++ b/zuul/ansible/2.5/action/asa.pyi @@ -0,0 +1 @@ +../../base/action/asa.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/asa_config.py b/zuul/ansible/2.5/action/asa_config.py new file mode 120000 index 0000000000..598f400d57 --- /dev/null +++ b/zuul/ansible/2.5/action/asa_config.py @@ -0,0 +1 @@ +../../base/action/asa_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/asa_config.pyi b/zuul/ansible/2.5/action/asa_config.pyi new file mode 120000 index 0000000000..86fe03484f --- /dev/null +++ b/zuul/ansible/2.5/action/asa_config.pyi @@ -0,0 +1 @@ +../../base/action/asa_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/asa_template.py b/zuul/ansible/2.5/action/asa_template.py new file mode 120000 index 0000000000..e1e8eecbea --- /dev/null +++ b/zuul/ansible/2.5/action/asa_template.py @@ -0,0 +1 @@ +../../base/action/asa_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/asa_template.pyi b/zuul/ansible/2.5/action/asa_template.pyi new file mode 120000 index 0000000000..0753101f1b --- /dev/null +++ b/zuul/ansible/2.5/action/asa_template.pyi @@ -0,0 +1 @@ +../../base/action/asa_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/assemble.py b/zuul/ansible/2.5/action/assemble.py new file mode 120000 index 0000000000..22273b1230 --- /dev/null +++ b/zuul/ansible/2.5/action/assemble.py @@ -0,0 +1 @@ +../../base/action/assemble.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/assemble.pyi b/zuul/ansible/2.5/action/assemble.pyi new file mode 120000 index 0000000000..3a7074ec7d --- /dev/null +++ b/zuul/ansible/2.5/action/assemble.pyi @@ -0,0 +1 @@ +../../base/action/assemble.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ce.py b/zuul/ansible/2.5/action/ce.py new file mode 120000 index 0000000000..db95d9121e --- /dev/null +++ b/zuul/ansible/2.5/action/ce.py @@ -0,0 +1 @@ +../../base/action/ce.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ce.pyi b/zuul/ansible/2.5/action/ce.pyi new file mode 120000 index 0000000000..ba2365f2b5 --- /dev/null +++ b/zuul/ansible/2.5/action/ce.pyi @@ -0,0 +1 @@ +../../base/action/ce.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ce_config.py b/zuul/ansible/2.5/action/ce_config.py new file mode 120000 index 0000000000..ec0319843f --- /dev/null +++ b/zuul/ansible/2.5/action/ce_config.py @@ -0,0 +1 @@ +../../base/action/ce_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ce_config.pyi b/zuul/ansible/2.5/action/ce_config.pyi new file mode 120000 index 0000000000..b762785d1b --- /dev/null +++ b/zuul/ansible/2.5/action/ce_config.pyi @@ -0,0 +1 @@ +../../base/action/ce_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ce_template.py b/zuul/ansible/2.5/action/ce_template.py new file mode 120000 index 0000000000..aa59e80a02 --- /dev/null +++ b/zuul/ansible/2.5/action/ce_template.py @@ -0,0 +1 @@ +../../base/action/ce_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ce_template.pyi b/zuul/ansible/2.5/action/ce_template.pyi new file mode 120000 index 0000000000..75ba2250ce --- /dev/null +++ b/zuul/ansible/2.5/action/ce_template.pyi @@ -0,0 +1 @@ +../../base/action/ce_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/copy.py b/zuul/ansible/2.5/action/copy.py new file mode 120000 index 0000000000..1c0c2291f7 --- /dev/null +++ b/zuul/ansible/2.5/action/copy.py @@ -0,0 +1 @@ +../../base/action/copy.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/copy.pyi b/zuul/ansible/2.5/action/copy.pyi new file mode 120000 index 0000000000..189722f2ad --- /dev/null +++ b/zuul/ansible/2.5/action/copy.pyi @@ -0,0 +1 @@ +../../base/action/copy.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/dellos10_config.py b/zuul/ansible/2.5/action/dellos10_config.py new file mode 120000 index 0000000000..caf6ce6c36 --- /dev/null +++ b/zuul/ansible/2.5/action/dellos10_config.py @@ -0,0 +1 @@ +../../base/action/dellos10_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/dellos10_config.pyi b/zuul/ansible/2.5/action/dellos10_config.pyi new file mode 120000 index 0000000000..ede9a927e2 --- /dev/null +++ b/zuul/ansible/2.5/action/dellos10_config.pyi @@ -0,0 +1 @@ +../../base/action/dellos10_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/dellos6_config.py b/zuul/ansible/2.5/action/dellos6_config.py new file mode 120000 index 0000000000..080fcce4c2 --- /dev/null +++ b/zuul/ansible/2.5/action/dellos6_config.py @@ -0,0 +1 @@ +../../base/action/dellos6_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/dellos6_config.pyi b/zuul/ansible/2.5/action/dellos6_config.pyi new file mode 120000 index 0000000000..d5cf3ce156 --- /dev/null +++ b/zuul/ansible/2.5/action/dellos6_config.pyi @@ -0,0 +1 @@ +../../base/action/dellos6_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/dellos9_config.py b/zuul/ansible/2.5/action/dellos9_config.py new file mode 120000 index 0000000000..c2e79870c0 --- /dev/null +++ b/zuul/ansible/2.5/action/dellos9_config.py @@ -0,0 +1 @@ +../../base/action/dellos9_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/dellos9_config.pyi b/zuul/ansible/2.5/action/dellos9_config.pyi new file mode 120000 index 0000000000..b50389ab45 --- /dev/null +++ b/zuul/ansible/2.5/action/dellos9_config.pyi @@ -0,0 +1 @@ +../../base/action/dellos9_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/eos_config.py b/zuul/ansible/2.5/action/eos_config.py new file mode 120000 index 0000000000..4d1ab53bb3 --- /dev/null +++ b/zuul/ansible/2.5/action/eos_config.py @@ -0,0 +1 @@ +../../base/action/eos_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/eos_config.pyi b/zuul/ansible/2.5/action/eos_config.pyi new file mode 120000 index 0000000000..f6d058ba18 --- /dev/null +++ b/zuul/ansible/2.5/action/eos_config.pyi @@ -0,0 +1 @@ +../../base/action/eos_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/eos_template.py b/zuul/ansible/2.5/action/eos_template.py new file mode 120000 index 0000000000..a108bf66f5 --- /dev/null +++ b/zuul/ansible/2.5/action/eos_template.py @@ -0,0 +1 @@ +../../base/action/eos_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/eos_template.pyi b/zuul/ansible/2.5/action/eos_template.pyi new file mode 120000 index 0000000000..b9cac42e8c --- /dev/null +++ b/zuul/ansible/2.5/action/eos_template.pyi @@ -0,0 +1 @@ +../../base/action/eos_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/fetch.py b/zuul/ansible/2.5/action/fetch.py new file mode 120000 index 0000000000..d53e02548e --- /dev/null +++ b/zuul/ansible/2.5/action/fetch.py @@ -0,0 +1 @@ +../../base/action/fetch.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/fetch.pyi b/zuul/ansible/2.5/action/fetch.pyi new file mode 120000 index 0000000000..b3ae31523c --- /dev/null +++ b/zuul/ansible/2.5/action/fetch.pyi @@ -0,0 +1 @@ +../../base/action/fetch.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/fortios_config.py b/zuul/ansible/2.5/action/fortios_config.py new file mode 120000 index 0000000000..ef38743bc4 --- /dev/null +++ b/zuul/ansible/2.5/action/fortios_config.py @@ -0,0 +1 @@ +../../base/action/fortios_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/fortios_config.pyi b/zuul/ansible/2.5/action/fortios_config.pyi new file mode 120000 index 0000000000..fa334a0594 --- /dev/null +++ b/zuul/ansible/2.5/action/fortios_config.pyi @@ -0,0 +1 @@ +../../base/action/fortios_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/include_vars.py b/zuul/ansible/2.5/action/include_vars.py new file mode 120000 index 0000000000..832d5a27ad --- /dev/null +++ b/zuul/ansible/2.5/action/include_vars.py @@ -0,0 +1 @@ +../../base/action/include_vars.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/include_vars.pyi b/zuul/ansible/2.5/action/include_vars.pyi new file mode 120000 index 0000000000..4099c1ae68 --- /dev/null +++ b/zuul/ansible/2.5/action/include_vars.pyi @@ -0,0 +1 @@ +../../base/action/include_vars.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ios_config.py b/zuul/ansible/2.5/action/ios_config.py new file mode 120000 index 0000000000..f1495d47e5 --- /dev/null +++ b/zuul/ansible/2.5/action/ios_config.py @@ -0,0 +1 @@ +../../base/action/ios_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ios_config.pyi b/zuul/ansible/2.5/action/ios_config.pyi new file mode 120000 index 0000000000..e6af5e34cd --- /dev/null +++ b/zuul/ansible/2.5/action/ios_config.pyi @@ -0,0 +1 @@ +../../base/action/ios_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ios_template.py b/zuul/ansible/2.5/action/ios_template.py new file mode 120000 index 0000000000..ef863cedf3 --- /dev/null +++ b/zuul/ansible/2.5/action/ios_template.py @@ -0,0 +1 @@ +../../base/action/ios_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ios_template.pyi b/zuul/ansible/2.5/action/ios_template.pyi new file mode 120000 index 0000000000..c372478129 --- /dev/null +++ b/zuul/ansible/2.5/action/ios_template.pyi @@ -0,0 +1 @@ +../../base/action/ios_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/iosxr_config.py b/zuul/ansible/2.5/action/iosxr_config.py new file mode 120000 index 0000000000..4eb293626e --- /dev/null +++ b/zuul/ansible/2.5/action/iosxr_config.py @@ -0,0 +1 @@ +../../base/action/iosxr_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/iosxr_config.pyi b/zuul/ansible/2.5/action/iosxr_config.pyi new file mode 120000 index 0000000000..70a2d67a36 --- /dev/null +++ b/zuul/ansible/2.5/action/iosxr_config.pyi @@ -0,0 +1 @@ +../../base/action/iosxr_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/iosxr_template.py b/zuul/ansible/2.5/action/iosxr_template.py new file mode 120000 index 0000000000..6a60fa49e0 --- /dev/null +++ b/zuul/ansible/2.5/action/iosxr_template.py @@ -0,0 +1 @@ +../../base/action/iosxr_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/iosxr_template.pyi b/zuul/ansible/2.5/action/iosxr_template.pyi new file mode 120000 index 0000000000..918f5a113b --- /dev/null +++ b/zuul/ansible/2.5/action/iosxr_template.pyi @@ -0,0 +1 @@ +../../base/action/iosxr_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/junos_config.py b/zuul/ansible/2.5/action/junos_config.py new file mode 120000 index 0000000000..c50f3bc67d --- /dev/null +++ b/zuul/ansible/2.5/action/junos_config.py @@ -0,0 +1 @@ +../../base/action/junos_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/junos_config.pyi b/zuul/ansible/2.5/action/junos_config.pyi new file mode 120000 index 0000000000..31cbba4515 --- /dev/null +++ b/zuul/ansible/2.5/action/junos_config.pyi @@ -0,0 +1 @@ +../../base/action/junos_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/junos_template.py b/zuul/ansible/2.5/action/junos_template.py new file mode 120000 index 0000000000..a2119b7cd9 --- /dev/null +++ b/zuul/ansible/2.5/action/junos_template.py @@ -0,0 +1 @@ +../../base/action/junos_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/junos_template.pyi b/zuul/ansible/2.5/action/junos_template.pyi new file mode 120000 index 0000000000..e6ef22ba91 --- /dev/null +++ b/zuul/ansible/2.5/action/junos_template.pyi @@ -0,0 +1 @@ +../../base/action/junos_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_banner.py b/zuul/ansible/2.5/action/net_banner.py new file mode 120000 index 0000000000..69cc6d5a4f --- /dev/null +++ b/zuul/ansible/2.5/action/net_banner.py @@ -0,0 +1 @@ +../../base/action/net_banner.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_banner.pyi b/zuul/ansible/2.5/action/net_banner.pyi new file mode 120000 index 0000000000..f926dbf70d --- /dev/null +++ b/zuul/ansible/2.5/action/net_banner.pyi @@ -0,0 +1 @@ +../../base/action/net_banner.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_base.py b/zuul/ansible/2.5/action/net_base.py new file mode 120000 index 0000000000..f36b6ecc76 --- /dev/null +++ b/zuul/ansible/2.5/action/net_base.py @@ -0,0 +1 @@ +../../base/action/net_base.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_base.pyi b/zuul/ansible/2.5/action/net_base.pyi new file mode 120000 index 0000000000..9f6ce1b7dd --- /dev/null +++ b/zuul/ansible/2.5/action/net_base.pyi @@ -0,0 +1 @@ +../../base/action/net_base.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_config.py b/zuul/ansible/2.5/action/net_config.py new file mode 120000 index 0000000000..a817ca5183 --- /dev/null +++ b/zuul/ansible/2.5/action/net_config.py @@ -0,0 +1 @@ +../../base/action/net_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_config.pyi b/zuul/ansible/2.5/action/net_config.pyi new file mode 120000 index 0000000000..412b8110e8 --- /dev/null +++ b/zuul/ansible/2.5/action/net_config.pyi @@ -0,0 +1 @@ +../../base/action/net_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_interface.py b/zuul/ansible/2.5/action/net_interface.py new file mode 120000 index 0000000000..1d24f78219 --- /dev/null +++ b/zuul/ansible/2.5/action/net_interface.py @@ -0,0 +1 @@ +../../base/action/net_interface.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_interface.pyi b/zuul/ansible/2.5/action/net_interface.pyi new file mode 120000 index 0000000000..57bb453165 --- /dev/null +++ b/zuul/ansible/2.5/action/net_interface.pyi @@ -0,0 +1 @@ +../../base/action/net_interface.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_l2_interface.py b/zuul/ansible/2.5/action/net_l2_interface.py new file mode 120000 index 0000000000..1f44192c87 --- /dev/null +++ b/zuul/ansible/2.5/action/net_l2_interface.py @@ -0,0 +1 @@ +../../base/action/net_l2_interface.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_l2_interface.pyi b/zuul/ansible/2.5/action/net_l2_interface.pyi new file mode 120000 index 0000000000..2b780821d6 --- /dev/null +++ b/zuul/ansible/2.5/action/net_l2_interface.pyi @@ -0,0 +1 @@ +../../base/action/net_l2_interface.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_l3_interface.py b/zuul/ansible/2.5/action/net_l3_interface.py new file mode 120000 index 0000000000..97017f4e3e --- /dev/null +++ b/zuul/ansible/2.5/action/net_l3_interface.py @@ -0,0 +1 @@ +../../base/action/net_l3_interface.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_l3_interface.pyi b/zuul/ansible/2.5/action/net_l3_interface.pyi new file mode 120000 index 0000000000..9317599a27 --- /dev/null +++ b/zuul/ansible/2.5/action/net_l3_interface.pyi @@ -0,0 +1 @@ +../../base/action/net_l3_interface.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_linkagg.py b/zuul/ansible/2.5/action/net_linkagg.py new file mode 120000 index 0000000000..d3fc53dd1e --- /dev/null +++ b/zuul/ansible/2.5/action/net_linkagg.py @@ -0,0 +1 @@ +../../base/action/net_linkagg.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_linkagg.pyi b/zuul/ansible/2.5/action/net_linkagg.pyi new file mode 120000 index 0000000000..b5fac56b68 --- /dev/null +++ b/zuul/ansible/2.5/action/net_linkagg.pyi @@ -0,0 +1 @@ +../../base/action/net_linkagg.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_lldp.py b/zuul/ansible/2.5/action/net_lldp.py new file mode 120000 index 0000000000..15fc3a8599 --- /dev/null +++ b/zuul/ansible/2.5/action/net_lldp.py @@ -0,0 +1 @@ +../../base/action/net_lldp.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_lldp.pyi b/zuul/ansible/2.5/action/net_lldp.pyi new file mode 120000 index 0000000000..a627fdec70 --- /dev/null +++ b/zuul/ansible/2.5/action/net_lldp.pyi @@ -0,0 +1 @@ +../../base/action/net_lldp.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_lldp_interface.py b/zuul/ansible/2.5/action/net_lldp_interface.py new file mode 120000 index 0000000000..f57ec137fa --- /dev/null +++ b/zuul/ansible/2.5/action/net_lldp_interface.py @@ -0,0 +1 @@ +../../base/action/net_lldp_interface.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_lldp_interface.pyi b/zuul/ansible/2.5/action/net_lldp_interface.pyi new file mode 120000 index 0000000000..fdd97b0789 --- /dev/null +++ b/zuul/ansible/2.5/action/net_lldp_interface.pyi @@ -0,0 +1 @@ +../../base/action/net_lldp_interface.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_logging.py b/zuul/ansible/2.5/action/net_logging.py new file mode 120000 index 0000000000..57d9766aae --- /dev/null +++ b/zuul/ansible/2.5/action/net_logging.py @@ -0,0 +1 @@ +../../base/action/net_logging.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_logging.pyi b/zuul/ansible/2.5/action/net_logging.pyi new file mode 120000 index 0000000000..1d6f1b0294 --- /dev/null +++ b/zuul/ansible/2.5/action/net_logging.pyi @@ -0,0 +1 @@ +../../base/action/net_logging.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_ping.py b/zuul/ansible/2.5/action/net_ping.py new file mode 120000 index 0000000000..696d9f526d --- /dev/null +++ b/zuul/ansible/2.5/action/net_ping.py @@ -0,0 +1 @@ +../../base/action/net_ping.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_ping.pyi b/zuul/ansible/2.5/action/net_ping.pyi new file mode 120000 index 0000000000..03f84e9751 --- /dev/null +++ b/zuul/ansible/2.5/action/net_ping.pyi @@ -0,0 +1 @@ +../../base/action/net_ping.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_static_route.py b/zuul/ansible/2.5/action/net_static_route.py new file mode 120000 index 0000000000..c22b7f0e0c --- /dev/null +++ b/zuul/ansible/2.5/action/net_static_route.py @@ -0,0 +1 @@ +../../base/action/net_static_route.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_static_route.pyi b/zuul/ansible/2.5/action/net_static_route.pyi new file mode 120000 index 0000000000..859c20fec4 --- /dev/null +++ b/zuul/ansible/2.5/action/net_static_route.pyi @@ -0,0 +1 @@ +../../base/action/net_static_route.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_system.py b/zuul/ansible/2.5/action/net_system.py new file mode 120000 index 0000000000..a03dd93c90 --- /dev/null +++ b/zuul/ansible/2.5/action/net_system.py @@ -0,0 +1 @@ +../../base/action/net_system.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_system.pyi b/zuul/ansible/2.5/action/net_system.pyi new file mode 120000 index 0000000000..cc159053bf --- /dev/null +++ b/zuul/ansible/2.5/action/net_system.pyi @@ -0,0 +1 @@ +../../base/action/net_system.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_template.py b/zuul/ansible/2.5/action/net_template.py new file mode 120000 index 0000000000..18ba965e44 --- /dev/null +++ b/zuul/ansible/2.5/action/net_template.py @@ -0,0 +1 @@ +../../base/action/net_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_template.pyi b/zuul/ansible/2.5/action/net_template.pyi new file mode 120000 index 0000000000..3bfbb6f0fa --- /dev/null +++ b/zuul/ansible/2.5/action/net_template.pyi @@ -0,0 +1 @@ +../../base/action/net_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_user.py b/zuul/ansible/2.5/action/net_user.py new file mode 120000 index 0000000000..fcfb3f55af --- /dev/null +++ b/zuul/ansible/2.5/action/net_user.py @@ -0,0 +1 @@ +../../base/action/net_user.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_user.pyi b/zuul/ansible/2.5/action/net_user.pyi new file mode 120000 index 0000000000..267f5da345 --- /dev/null +++ b/zuul/ansible/2.5/action/net_user.pyi @@ -0,0 +1 @@ +../../base/action/net_user.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_vlan.py b/zuul/ansible/2.5/action/net_vlan.py new file mode 120000 index 0000000000..df275656f3 --- /dev/null +++ b/zuul/ansible/2.5/action/net_vlan.py @@ -0,0 +1 @@ +../../base/action/net_vlan.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_vlan.pyi b/zuul/ansible/2.5/action/net_vlan.pyi new file mode 120000 index 0000000000..718074899c --- /dev/null +++ b/zuul/ansible/2.5/action/net_vlan.pyi @@ -0,0 +1 @@ +../../base/action/net_vlan.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_vrf.py b/zuul/ansible/2.5/action/net_vrf.py new file mode 120000 index 0000000000..c757d21005 --- /dev/null +++ b/zuul/ansible/2.5/action/net_vrf.py @@ -0,0 +1 @@ +../../base/action/net_vrf.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/net_vrf.pyi b/zuul/ansible/2.5/action/net_vrf.pyi new file mode 120000 index 0000000000..df043a0cd6 --- /dev/null +++ b/zuul/ansible/2.5/action/net_vrf.pyi @@ -0,0 +1 @@ +../../base/action/net_vrf.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/netconf_config.py b/zuul/ansible/2.5/action/netconf_config.py new file mode 120000 index 0000000000..4d13bb82c3 --- /dev/null +++ b/zuul/ansible/2.5/action/netconf_config.py @@ -0,0 +1 @@ +../../base/action/netconf_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/netconf_config.pyi b/zuul/ansible/2.5/action/netconf_config.pyi new file mode 120000 index 0000000000..c75a746b4c --- /dev/null +++ b/zuul/ansible/2.5/action/netconf_config.pyi @@ -0,0 +1 @@ +../../base/action/netconf_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/network.py b/zuul/ansible/2.5/action/network.py new file mode 120000 index 0000000000..9e2d1baa43 --- /dev/null +++ b/zuul/ansible/2.5/action/network.py @@ -0,0 +1 @@ +../../base/action/network.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/network.pyi b/zuul/ansible/2.5/action/network.pyi new file mode 120000 index 0000000000..e1842d197a --- /dev/null +++ b/zuul/ansible/2.5/action/network.pyi @@ -0,0 +1 @@ +../../base/action/network.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/normal.py b/zuul/ansible/2.5/action/normal.py new file mode 120000 index 0000000000..4e131d98d9 --- /dev/null +++ b/zuul/ansible/2.5/action/normal.py @@ -0,0 +1 @@ +../../base/action/normal.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/normal.pyi b/zuul/ansible/2.5/action/normal.pyi new file mode 120000 index 0000000000..bbbe0704ce --- /dev/null +++ b/zuul/ansible/2.5/action/normal.pyi @@ -0,0 +1 @@ +../../base/action/normal.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/nxos_config.py b/zuul/ansible/2.5/action/nxos_config.py new file mode 120000 index 0000000000..0cc233c346 --- /dev/null +++ b/zuul/ansible/2.5/action/nxos_config.py @@ -0,0 +1 @@ +../../base/action/nxos_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/nxos_config.pyi b/zuul/ansible/2.5/action/nxos_config.pyi new file mode 120000 index 0000000000..b2e63b6e3e --- /dev/null +++ b/zuul/ansible/2.5/action/nxos_config.pyi @@ -0,0 +1 @@ +../../base/action/nxos_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/nxos_template.py b/zuul/ansible/2.5/action/nxos_template.py new file mode 120000 index 0000000000..3d599062a3 --- /dev/null +++ b/zuul/ansible/2.5/action/nxos_template.py @@ -0,0 +1 @@ +../../base/action/nxos_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/nxos_template.pyi b/zuul/ansible/2.5/action/nxos_template.pyi new file mode 120000 index 0000000000..e36fa4e908 --- /dev/null +++ b/zuul/ansible/2.5/action/nxos_template.pyi @@ -0,0 +1 @@ +../../base/action/nxos_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ops_config.py b/zuul/ansible/2.5/action/ops_config.py new file mode 120000 index 0000000000..2abe0669db --- /dev/null +++ b/zuul/ansible/2.5/action/ops_config.py @@ -0,0 +1 @@ +../../base/action/ops_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ops_config.pyi b/zuul/ansible/2.5/action/ops_config.pyi new file mode 120000 index 0000000000..7517f9c7ba --- /dev/null +++ b/zuul/ansible/2.5/action/ops_config.pyi @@ -0,0 +1 @@ +../../base/action/ops_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ops_template.py b/zuul/ansible/2.5/action/ops_template.py new file mode 120000 index 0000000000..5c841ca57b --- /dev/null +++ b/zuul/ansible/2.5/action/ops_template.py @@ -0,0 +1 @@ +../../base/action/ops_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/ops_template.pyi b/zuul/ansible/2.5/action/ops_template.pyi new file mode 120000 index 0000000000..4baa28a3f6 --- /dev/null +++ b/zuul/ansible/2.5/action/ops_template.pyi @@ -0,0 +1 @@ +../../base/action/ops_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/patch.py b/zuul/ansible/2.5/action/patch.py new file mode 120000 index 0000000000..8996710bab --- /dev/null +++ b/zuul/ansible/2.5/action/patch.py @@ -0,0 +1 @@ +../../base/action/patch.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/patch.pyi b/zuul/ansible/2.5/action/patch.pyi new file mode 120000 index 0000000000..577e43600b --- /dev/null +++ b/zuul/ansible/2.5/action/patch.pyi @@ -0,0 +1 @@ +../../base/action/patch.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/raw.py b/zuul/ansible/2.5/action/raw.py new file mode 120000 index 0000000000..e4962dd8af --- /dev/null +++ b/zuul/ansible/2.5/action/raw.py @@ -0,0 +1 @@ +../../base/action/raw.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/raw.pyi b/zuul/ansible/2.5/action/raw.pyi new file mode 120000 index 0000000000..741945ef2d --- /dev/null +++ b/zuul/ansible/2.5/action/raw.pyi @@ -0,0 +1 @@ +../../base/action/raw.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/script.py b/zuul/ansible/2.5/action/script.py new file mode 120000 index 0000000000..1cccf5805c --- /dev/null +++ b/zuul/ansible/2.5/action/script.py @@ -0,0 +1 @@ +../../base/action/script.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/script.pyi b/zuul/ansible/2.5/action/script.pyi new file mode 120000 index 0000000000..aff69744bb --- /dev/null +++ b/zuul/ansible/2.5/action/script.pyi @@ -0,0 +1 @@ +../../base/action/script.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/sros_config.py b/zuul/ansible/2.5/action/sros_config.py new file mode 120000 index 0000000000..1762874e4d --- /dev/null +++ b/zuul/ansible/2.5/action/sros_config.py @@ -0,0 +1 @@ +../../base/action/sros_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/sros_config.pyi b/zuul/ansible/2.5/action/sros_config.pyi new file mode 120000 index 0000000000..453e4b8e13 --- /dev/null +++ b/zuul/ansible/2.5/action/sros_config.pyi @@ -0,0 +1 @@ +../../base/action/sros_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/synchronize.py b/zuul/ansible/2.5/action/synchronize.py new file mode 120000 index 0000000000..f2126166ce --- /dev/null +++ b/zuul/ansible/2.5/action/synchronize.py @@ -0,0 +1 @@ +../../base/action/synchronize.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/synchronize.pyi b/zuul/ansible/2.5/action/synchronize.pyi new file mode 120000 index 0000000000..4ff1a2ee92 --- /dev/null +++ b/zuul/ansible/2.5/action/synchronize.pyi @@ -0,0 +1 @@ +../../base/action/synchronize.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/template.py b/zuul/ansible/2.5/action/template.py new file mode 120000 index 0000000000..720717d833 --- /dev/null +++ b/zuul/ansible/2.5/action/template.py @@ -0,0 +1 @@ +../../base/action/template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/template.pyi b/zuul/ansible/2.5/action/template.pyi new file mode 120000 index 0000000000..aed7fb07af --- /dev/null +++ b/zuul/ansible/2.5/action/template.pyi @@ -0,0 +1 @@ +../../base/action/template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/unarchive.py b/zuul/ansible/2.5/action/unarchive.py new file mode 120000 index 0000000000..2d7ce5aed9 --- /dev/null +++ b/zuul/ansible/2.5/action/unarchive.py @@ -0,0 +1 @@ +../../base/action/unarchive.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/unarchive.pyi b/zuul/ansible/2.5/action/unarchive.pyi new file mode 120000 index 0000000000..fead9ca55d --- /dev/null +++ b/zuul/ansible/2.5/action/unarchive.pyi @@ -0,0 +1 @@ +../../base/action/unarchive.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/vyos_config.py b/zuul/ansible/2.5/action/vyos_config.py new file mode 120000 index 0000000000..2732fd7a1b --- /dev/null +++ b/zuul/ansible/2.5/action/vyos_config.py @@ -0,0 +1 @@ +../../base/action/vyos_config.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/vyos_config.pyi b/zuul/ansible/2.5/action/vyos_config.pyi new file mode 120000 index 0000000000..ac5d766328 --- /dev/null +++ b/zuul/ansible/2.5/action/vyos_config.pyi @@ -0,0 +1 @@ +../../base/action/vyos_config.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/win_copy.py b/zuul/ansible/2.5/action/win_copy.py new file mode 120000 index 0000000000..80c3f38460 --- /dev/null +++ b/zuul/ansible/2.5/action/win_copy.py @@ -0,0 +1 @@ +../../base/action/win_copy.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/win_copy.pyi b/zuul/ansible/2.5/action/win_copy.pyi new file mode 120000 index 0000000000..017c792fff --- /dev/null +++ b/zuul/ansible/2.5/action/win_copy.pyi @@ -0,0 +1 @@ +../../base/action/win_copy.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/action/win_template.py b/zuul/ansible/2.5/action/win_template.py new file mode 120000 index 0000000000..f2a8b2d63b --- /dev/null +++ b/zuul/ansible/2.5/action/win_template.py @@ -0,0 +1 @@ +../../base/action/win_template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/action/win_template.pyi b/zuul/ansible/2.5/action/win_template.pyi new file mode 120000 index 0000000000..40825895bc --- /dev/null +++ b/zuul/ansible/2.5/action/win_template.pyi @@ -0,0 +1 @@ +../../base/action/win_template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/actiongeneral/__init__.py b/zuul/ansible/2.5/actiongeneral/__init__.py new file mode 120000 index 0000000000..38d887448f --- /dev/null +++ b/zuul/ansible/2.5/actiongeneral/__init__.py @@ -0,0 +1 @@ +../../base/actiongeneral/__init__.py \ No newline at end of file diff --git a/zuul/ansible/2.5/actiongeneral/command.py b/zuul/ansible/2.5/actiongeneral/command.py new file mode 120000 index 0000000000..f190db2cc2 --- /dev/null +++ b/zuul/ansible/2.5/actiongeneral/command.py @@ -0,0 +1 @@ +../../base/actiongeneral/command.py \ No newline at end of file diff --git a/zuul/ansible/2.5/actiongeneral/command.pyi b/zuul/ansible/2.5/actiongeneral/command.pyi new file mode 120000 index 0000000000..81305dd033 --- /dev/null +++ b/zuul/ansible/2.5/actiongeneral/command.pyi @@ -0,0 +1 @@ +../../base/actiongeneral/command.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/actiongeneral/zuul_return.py b/zuul/ansible/2.5/actiongeneral/zuul_return.py new file mode 120000 index 0000000000..2f5b2559e5 --- /dev/null +++ b/zuul/ansible/2.5/actiongeneral/zuul_return.py @@ -0,0 +1 @@ +../../base/actiongeneral/zuul_return.py \ No newline at end of file diff --git a/zuul/ansible/2.5/callback/__init__.py b/zuul/ansible/2.5/callback/__init__.py new file mode 120000 index 0000000000..00b9743884 --- /dev/null +++ b/zuul/ansible/2.5/callback/__init__.py @@ -0,0 +1 @@ +../../base/callback/__init__.py \ No newline at end of file diff --git a/zuul/ansible/2.5/callback/zuul_json.py b/zuul/ansible/2.5/callback/zuul_json.py new file mode 120000 index 0000000000..b0a07779ba --- /dev/null +++ b/zuul/ansible/2.5/callback/zuul_json.py @@ -0,0 +1 @@ +../../base/callback/zuul_json.py \ No newline at end of file diff --git a/zuul/ansible/2.5/callback/zuul_stream.py b/zuul/ansible/2.5/callback/zuul_stream.py new file mode 120000 index 0000000000..f75561bf46 --- /dev/null +++ b/zuul/ansible/2.5/callback/zuul_stream.py @@ -0,0 +1 @@ +../../base/callback/zuul_stream.py \ No newline at end of file diff --git a/zuul/ansible/2.5/callback/zuul_unreachable.py b/zuul/ansible/2.5/callback/zuul_unreachable.py new file mode 120000 index 0000000000..205baca6fe --- /dev/null +++ b/zuul/ansible/2.5/callback/zuul_unreachable.py @@ -0,0 +1 @@ +../../base/callback/zuul_unreachable.py \ No newline at end of file diff --git a/zuul/ansible/2.5/filter/__init__.py b/zuul/ansible/2.5/filter/__init__.py new file mode 120000 index 0000000000..f80a4da617 --- /dev/null +++ b/zuul/ansible/2.5/filter/__init__.py @@ -0,0 +1 @@ +../../base/filter/__init__.py \ No newline at end of file diff --git a/zuul/ansible/2.5/filter/zuul_filters.py b/zuul/ansible/2.5/filter/zuul_filters.py new file mode 120000 index 0000000000..d406e5fe63 --- /dev/null +++ b/zuul/ansible/2.5/filter/zuul_filters.py @@ -0,0 +1 @@ +../../base/filter/zuul_filters.py \ No newline at end of file diff --git a/zuul/ansible/2.5/library/__init__.py b/zuul/ansible/2.5/library/__init__.py new file mode 120000 index 0000000000..0b68ce0f48 --- /dev/null +++ b/zuul/ansible/2.5/library/__init__.py @@ -0,0 +1 @@ +../../base/library/__init__.py \ No newline at end of file diff --git a/zuul/ansible/2.5/library/command.py b/zuul/ansible/2.5/library/command.py new file mode 120000 index 0000000000..9c76331696 --- /dev/null +++ b/zuul/ansible/2.5/library/command.py @@ -0,0 +1 @@ +../../base/library/command.py \ No newline at end of file diff --git a/zuul/ansible/2.5/library/zuul_console.py b/zuul/ansible/2.5/library/zuul_console.py new file mode 120000 index 0000000000..7c905e0f9c --- /dev/null +++ b/zuul/ansible/2.5/library/zuul_console.py @@ -0,0 +1 @@ +../../base/library/zuul_console.py \ No newline at end of file diff --git a/zuul/ansible/2.5/logconfig.py b/zuul/ansible/2.5/logconfig.py new file mode 120000 index 0000000000..767cb2e81f --- /dev/null +++ b/zuul/ansible/2.5/logconfig.py @@ -0,0 +1 @@ +../logconfig.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/__init__.py b/zuul/ansible/2.5/lookup/__init__.py new file mode 120000 index 0000000000..b008ecb3be --- /dev/null +++ b/zuul/ansible/2.5/lookup/__init__.py @@ -0,0 +1 @@ +../../base/lookup/__init__.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/_banned.py b/zuul/ansible/2.5/lookup/_banned.py new file mode 120000 index 0000000000..2e127f4e73 --- /dev/null +++ b/zuul/ansible/2.5/lookup/_banned.py @@ -0,0 +1 @@ +../../base/lookup/_banned.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/_banned.pyi b/zuul/ansible/2.5/lookup/_banned.pyi new file mode 120000 index 0000000000..d7909135de --- /dev/null +++ b/zuul/ansible/2.5/lookup/_banned.pyi @@ -0,0 +1 @@ +../../base/lookup/_banned.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/chef_databag.py b/zuul/ansible/2.5/lookup/chef_databag.py new file mode 120000 index 0000000000..d4efe7e853 --- /dev/null +++ b/zuul/ansible/2.5/lookup/chef_databag.py @@ -0,0 +1 @@ +../../base/lookup/chef_databag.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/chef_databag.pyi b/zuul/ansible/2.5/lookup/chef_databag.pyi new file mode 120000 index 0000000000..c06fc30016 --- /dev/null +++ b/zuul/ansible/2.5/lookup/chef_databag.pyi @@ -0,0 +1 @@ +../../base/lookup/chef_databag.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/consul_kv.py b/zuul/ansible/2.5/lookup/consul_kv.py new file mode 120000 index 0000000000..66b6f76174 --- /dev/null +++ b/zuul/ansible/2.5/lookup/consul_kv.py @@ -0,0 +1 @@ +../../base/lookup/consul_kv.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/consul_kv.pyi b/zuul/ansible/2.5/lookup/consul_kv.pyi new file mode 120000 index 0000000000..33d8483478 --- /dev/null +++ b/zuul/ansible/2.5/lookup/consul_kv.pyi @@ -0,0 +1 @@ +../../base/lookup/consul_kv.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/credstash.py b/zuul/ansible/2.5/lookup/credstash.py new file mode 120000 index 0000000000..2c343a27e4 --- /dev/null +++ b/zuul/ansible/2.5/lookup/credstash.py @@ -0,0 +1 @@ +../../base/lookup/credstash.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/credstash.pyi b/zuul/ansible/2.5/lookup/credstash.pyi new file mode 120000 index 0000000000..071af9d1a3 --- /dev/null +++ b/zuul/ansible/2.5/lookup/credstash.pyi @@ -0,0 +1 @@ +../../base/lookup/credstash.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/csvfile.py b/zuul/ansible/2.5/lookup/csvfile.py new file mode 120000 index 0000000000..981754791e --- /dev/null +++ b/zuul/ansible/2.5/lookup/csvfile.py @@ -0,0 +1 @@ +../../base/lookup/csvfile.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/csvfile.pyi b/zuul/ansible/2.5/lookup/csvfile.pyi new file mode 120000 index 0000000000..18ded36845 --- /dev/null +++ b/zuul/ansible/2.5/lookup/csvfile.pyi @@ -0,0 +1 @@ +../../base/lookup/csvfile.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/cyberarkpassword.py b/zuul/ansible/2.5/lookup/cyberarkpassword.py new file mode 120000 index 0000000000..a573c0cf39 --- /dev/null +++ b/zuul/ansible/2.5/lookup/cyberarkpassword.py @@ -0,0 +1 @@ +../../base/lookup/cyberarkpassword.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/cyberarkpassword.pyi b/zuul/ansible/2.5/lookup/cyberarkpassword.pyi new file mode 120000 index 0000000000..01543847ea --- /dev/null +++ b/zuul/ansible/2.5/lookup/cyberarkpassword.pyi @@ -0,0 +1 @@ +../../base/lookup/cyberarkpassword.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/dig.py b/zuul/ansible/2.5/lookup/dig.py new file mode 120000 index 0000000000..92a628c4a1 --- /dev/null +++ b/zuul/ansible/2.5/lookup/dig.py @@ -0,0 +1 @@ +../../base/lookup/dig.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/dig.pyi b/zuul/ansible/2.5/lookup/dig.pyi new file mode 120000 index 0000000000..7268b42c3c --- /dev/null +++ b/zuul/ansible/2.5/lookup/dig.pyi @@ -0,0 +1 @@ +../../base/lookup/dig.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/dnstxt.py b/zuul/ansible/2.5/lookup/dnstxt.py new file mode 120000 index 0000000000..aa3e0f2d94 --- /dev/null +++ b/zuul/ansible/2.5/lookup/dnstxt.py @@ -0,0 +1 @@ +../../base/lookup/dnstxt.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/dnstxt.pyi b/zuul/ansible/2.5/lookup/dnstxt.pyi new file mode 120000 index 0000000000..1c221784cc --- /dev/null +++ b/zuul/ansible/2.5/lookup/dnstxt.pyi @@ -0,0 +1 @@ +../../base/lookup/dnstxt.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/env.py b/zuul/ansible/2.5/lookup/env.py new file mode 120000 index 0000000000..1243936307 --- /dev/null +++ b/zuul/ansible/2.5/lookup/env.py @@ -0,0 +1 @@ +../../base/lookup/env.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/env.pyi b/zuul/ansible/2.5/lookup/env.pyi new file mode 120000 index 0000000000..e0ecae07ab --- /dev/null +++ b/zuul/ansible/2.5/lookup/env.pyi @@ -0,0 +1 @@ +../../base/lookup/env.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/etcd.py b/zuul/ansible/2.5/lookup/etcd.py new file mode 120000 index 0000000000..c42007aa6e --- /dev/null +++ b/zuul/ansible/2.5/lookup/etcd.py @@ -0,0 +1 @@ +../../base/lookup/etcd.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/etcd.pyi b/zuul/ansible/2.5/lookup/etcd.pyi new file mode 120000 index 0000000000..a1d4e04584 --- /dev/null +++ b/zuul/ansible/2.5/lookup/etcd.pyi @@ -0,0 +1 @@ +../../base/lookup/etcd.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/file.py b/zuul/ansible/2.5/lookup/file.py new file mode 120000 index 0000000000..d1c0692d74 --- /dev/null +++ b/zuul/ansible/2.5/lookup/file.py @@ -0,0 +1 @@ +../../base/lookup/file.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/file.pyi b/zuul/ansible/2.5/lookup/file.pyi new file mode 120000 index 0000000000..588dc50c6c --- /dev/null +++ b/zuul/ansible/2.5/lookup/file.pyi @@ -0,0 +1 @@ +../../base/lookup/file.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/fileglob.py b/zuul/ansible/2.5/lookup/fileglob.py new file mode 120000 index 0000000000..0249540aca --- /dev/null +++ b/zuul/ansible/2.5/lookup/fileglob.py @@ -0,0 +1 @@ +../../base/lookup/fileglob.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/fileglob.pyi b/zuul/ansible/2.5/lookup/fileglob.pyi new file mode 120000 index 0000000000..ffce6462b7 --- /dev/null +++ b/zuul/ansible/2.5/lookup/fileglob.pyi @@ -0,0 +1 @@ +../../base/lookup/fileglob.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/filetree.py b/zuul/ansible/2.5/lookup/filetree.py new file mode 120000 index 0000000000..96cc789acc --- /dev/null +++ b/zuul/ansible/2.5/lookup/filetree.py @@ -0,0 +1 @@ +../../base/lookup/filetree.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/filetree.pyi b/zuul/ansible/2.5/lookup/filetree.pyi new file mode 120000 index 0000000000..ca38966f58 --- /dev/null +++ b/zuul/ansible/2.5/lookup/filetree.pyi @@ -0,0 +1 @@ +../../base/lookup/filetree.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/first_found.py b/zuul/ansible/2.5/lookup/first_found.py new file mode 120000 index 0000000000..0a01ced200 --- /dev/null +++ b/zuul/ansible/2.5/lookup/first_found.py @@ -0,0 +1 @@ +../../base/lookup/first_found.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/first_found.pyi b/zuul/ansible/2.5/lookup/first_found.pyi new file mode 120000 index 0000000000..a3a92f2501 --- /dev/null +++ b/zuul/ansible/2.5/lookup/first_found.pyi @@ -0,0 +1 @@ +../../base/lookup/first_found.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/hashi_valut.py b/zuul/ansible/2.5/lookup/hashi_valut.py new file mode 120000 index 0000000000..5a13b3c0e4 --- /dev/null +++ b/zuul/ansible/2.5/lookup/hashi_valut.py @@ -0,0 +1 @@ +../../base/lookup/hashi_valut.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/hashi_valut.pyi b/zuul/ansible/2.5/lookup/hashi_valut.pyi new file mode 120000 index 0000000000..be0d600fef --- /dev/null +++ b/zuul/ansible/2.5/lookup/hashi_valut.pyi @@ -0,0 +1 @@ +../../base/lookup/hashi_valut.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/hiera.py b/zuul/ansible/2.5/lookup/hiera.py new file mode 120000 index 0000000000..01e1883e37 --- /dev/null +++ b/zuul/ansible/2.5/lookup/hiera.py @@ -0,0 +1 @@ +../../base/lookup/hiera.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/hiera.pyi b/zuul/ansible/2.5/lookup/hiera.pyi new file mode 120000 index 0000000000..b7756855a0 --- /dev/null +++ b/zuul/ansible/2.5/lookup/hiera.pyi @@ -0,0 +1 @@ +../../base/lookup/hiera.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/ini.py b/zuul/ansible/2.5/lookup/ini.py new file mode 120000 index 0000000000..6453943b9a --- /dev/null +++ b/zuul/ansible/2.5/lookup/ini.py @@ -0,0 +1 @@ +../../base/lookup/ini.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/ini.pyi b/zuul/ansible/2.5/lookup/ini.pyi new file mode 120000 index 0000000000..b66fe999a0 --- /dev/null +++ b/zuul/ansible/2.5/lookup/ini.pyi @@ -0,0 +1 @@ +../../base/lookup/ini.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/keyring.py b/zuul/ansible/2.5/lookup/keyring.py new file mode 120000 index 0000000000..864d62d6fb --- /dev/null +++ b/zuul/ansible/2.5/lookup/keyring.py @@ -0,0 +1 @@ +../../base/lookup/keyring.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/keyring.pyi b/zuul/ansible/2.5/lookup/keyring.pyi new file mode 120000 index 0000000000..9a0c24b55b --- /dev/null +++ b/zuul/ansible/2.5/lookup/keyring.pyi @@ -0,0 +1 @@ +../../base/lookup/keyring.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/lastpass.py b/zuul/ansible/2.5/lookup/lastpass.py new file mode 120000 index 0000000000..a28abff20f --- /dev/null +++ b/zuul/ansible/2.5/lookup/lastpass.py @@ -0,0 +1 @@ +../../base/lookup/lastpass.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/lastpass.pyi b/zuul/ansible/2.5/lookup/lastpass.pyi new file mode 120000 index 0000000000..dfd6e6b31d --- /dev/null +++ b/zuul/ansible/2.5/lookup/lastpass.pyi @@ -0,0 +1 @@ +../../base/lookup/lastpass.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/lines.py b/zuul/ansible/2.5/lookup/lines.py new file mode 120000 index 0000000000..c2cae632b4 --- /dev/null +++ b/zuul/ansible/2.5/lookup/lines.py @@ -0,0 +1 @@ +../../base/lookup/lines.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/lines.pyi b/zuul/ansible/2.5/lookup/lines.pyi new file mode 120000 index 0000000000..3ddc687f95 --- /dev/null +++ b/zuul/ansible/2.5/lookup/lines.pyi @@ -0,0 +1 @@ +../../base/lookup/lines.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/mongodb.py b/zuul/ansible/2.5/lookup/mongodb.py new file mode 120000 index 0000000000..737037fa11 --- /dev/null +++ b/zuul/ansible/2.5/lookup/mongodb.py @@ -0,0 +1 @@ +../../base/lookup/mongodb.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/mongodb.pyi b/zuul/ansible/2.5/lookup/mongodb.pyi new file mode 120000 index 0000000000..4c8f754ef1 --- /dev/null +++ b/zuul/ansible/2.5/lookup/mongodb.pyi @@ -0,0 +1 @@ +../../base/lookup/mongodb.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/password.py b/zuul/ansible/2.5/lookup/password.py new file mode 120000 index 0000000000..478e6bee65 --- /dev/null +++ b/zuul/ansible/2.5/lookup/password.py @@ -0,0 +1 @@ +../../base/lookup/password.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/password.pyi b/zuul/ansible/2.5/lookup/password.pyi new file mode 120000 index 0000000000..370986cbc5 --- /dev/null +++ b/zuul/ansible/2.5/lookup/password.pyi @@ -0,0 +1 @@ +../../base/lookup/password.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/passwordstore.py b/zuul/ansible/2.5/lookup/passwordstore.py new file mode 120000 index 0000000000..af4c4aa92b --- /dev/null +++ b/zuul/ansible/2.5/lookup/passwordstore.py @@ -0,0 +1 @@ +../../base/lookup/passwordstore.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/passwordstore.pyi b/zuul/ansible/2.5/lookup/passwordstore.pyi new file mode 120000 index 0000000000..9ba9b718aa --- /dev/null +++ b/zuul/ansible/2.5/lookup/passwordstore.pyi @@ -0,0 +1 @@ +../../base/lookup/passwordstore.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/pipe.py b/zuul/ansible/2.5/lookup/pipe.py new file mode 120000 index 0000000000..ea688c3a34 --- /dev/null +++ b/zuul/ansible/2.5/lookup/pipe.py @@ -0,0 +1 @@ +../../base/lookup/pipe.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/pipe.pyi b/zuul/ansible/2.5/lookup/pipe.pyi new file mode 120000 index 0000000000..01d6b935d1 --- /dev/null +++ b/zuul/ansible/2.5/lookup/pipe.pyi @@ -0,0 +1 @@ +../../base/lookup/pipe.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/redis_kv.py b/zuul/ansible/2.5/lookup/redis_kv.py new file mode 120000 index 0000000000..a711e2651c --- /dev/null +++ b/zuul/ansible/2.5/lookup/redis_kv.py @@ -0,0 +1 @@ +../../base/lookup/redis_kv.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/redis_kv.pyi b/zuul/ansible/2.5/lookup/redis_kv.pyi new file mode 120000 index 0000000000..da9acca458 --- /dev/null +++ b/zuul/ansible/2.5/lookup/redis_kv.pyi @@ -0,0 +1 @@ +../../base/lookup/redis_kv.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/shelvefile.py b/zuul/ansible/2.5/lookup/shelvefile.py new file mode 120000 index 0000000000..2c76ec9376 --- /dev/null +++ b/zuul/ansible/2.5/lookup/shelvefile.py @@ -0,0 +1 @@ +../../base/lookup/shelvefile.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/shelvefile.pyi b/zuul/ansible/2.5/lookup/shelvefile.pyi new file mode 120000 index 0000000000..827f4b076d --- /dev/null +++ b/zuul/ansible/2.5/lookup/shelvefile.pyi @@ -0,0 +1 @@ +../../base/lookup/shelvefile.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/template.py b/zuul/ansible/2.5/lookup/template.py new file mode 120000 index 0000000000..ef6565ceb2 --- /dev/null +++ b/zuul/ansible/2.5/lookup/template.py @@ -0,0 +1 @@ +../../base/lookup/template.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/template.pyi b/zuul/ansible/2.5/lookup/template.pyi new file mode 120000 index 0000000000..f03685d5c4 --- /dev/null +++ b/zuul/ansible/2.5/lookup/template.pyi @@ -0,0 +1 @@ +../../base/lookup/template.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/url.py b/zuul/ansible/2.5/lookup/url.py new file mode 120000 index 0000000000..f936b748ed --- /dev/null +++ b/zuul/ansible/2.5/lookup/url.py @@ -0,0 +1 @@ +../../base/lookup/url.py \ No newline at end of file diff --git a/zuul/ansible/2.5/lookup/url.pyi b/zuul/ansible/2.5/lookup/url.pyi new file mode 120000 index 0000000000..fc13f47c5d --- /dev/null +++ b/zuul/ansible/2.5/lookup/url.pyi @@ -0,0 +1 @@ +../../base/lookup/url.pyi \ No newline at end of file diff --git a/zuul/ansible/2.5/paths.py b/zuul/ansible/2.5/paths.py new file mode 120000 index 0000000000..dbdb1858ec --- /dev/null +++ b/zuul/ansible/2.5/paths.py @@ -0,0 +1 @@ +../paths.py \ No newline at end of file diff --git a/zuul/ansible/action/__init__.py b/zuul/ansible/base/__init__.py similarity index 100% rename from zuul/ansible/action/__init__.py rename to zuul/ansible/base/__init__.py diff --git a/zuul/ansible/actiongeneral/__init__.py b/zuul/ansible/base/action/__init__.py similarity index 100% rename from zuul/ansible/actiongeneral/__init__.py rename to zuul/ansible/base/action/__init__.py diff --git a/zuul/ansible/action/add_host.py b/zuul/ansible/base/action/add_host.py similarity index 100% rename from zuul/ansible/action/add_host.py rename to zuul/ansible/base/action/add_host.py diff --git a/zuul/ansible/action/add_host.pyi b/zuul/ansible/base/action/add_host.pyi similarity index 100% rename from zuul/ansible/action/add_host.pyi rename to zuul/ansible/base/action/add_host.pyi diff --git a/zuul/ansible/action/aireos.py b/zuul/ansible/base/action/aireos.py similarity index 100% rename from zuul/ansible/action/aireos.py rename to zuul/ansible/base/action/aireos.py diff --git a/zuul/ansible/action/aireos.pyi b/zuul/ansible/base/action/aireos.pyi similarity index 100% rename from zuul/ansible/action/aireos.pyi rename to zuul/ansible/base/action/aireos.pyi diff --git a/zuul/ansible/action/aireos_config.py b/zuul/ansible/base/action/aireos_config.py similarity index 100% rename from zuul/ansible/action/aireos_config.py rename to zuul/ansible/base/action/aireos_config.py diff --git a/zuul/ansible/action/aireos_config.pyi b/zuul/ansible/base/action/aireos_config.pyi similarity index 100% rename from zuul/ansible/action/aireos_config.pyi rename to zuul/ansible/base/action/aireos_config.pyi diff --git a/zuul/ansible/action/aruba.py b/zuul/ansible/base/action/aruba.py similarity index 100% rename from zuul/ansible/action/aruba.py rename to zuul/ansible/base/action/aruba.py diff --git a/zuul/ansible/action/aruba.pyi b/zuul/ansible/base/action/aruba.pyi similarity index 100% rename from zuul/ansible/action/aruba.pyi rename to zuul/ansible/base/action/aruba.pyi diff --git a/zuul/ansible/action/aruba_config.py b/zuul/ansible/base/action/aruba_config.py similarity index 100% rename from zuul/ansible/action/aruba_config.py rename to zuul/ansible/base/action/aruba_config.py diff --git a/zuul/ansible/action/aruba_config.pyi b/zuul/ansible/base/action/aruba_config.pyi similarity index 100% rename from zuul/ansible/action/aruba_config.pyi rename to zuul/ansible/base/action/aruba_config.pyi diff --git a/zuul/ansible/action/asa.py b/zuul/ansible/base/action/asa.py similarity index 100% rename from zuul/ansible/action/asa.py rename to zuul/ansible/base/action/asa.py diff --git a/zuul/ansible/action/asa.pyi b/zuul/ansible/base/action/asa.pyi similarity index 100% rename from zuul/ansible/action/asa.pyi rename to zuul/ansible/base/action/asa.pyi diff --git a/zuul/ansible/action/asa_config.py b/zuul/ansible/base/action/asa_config.py similarity index 100% rename from zuul/ansible/action/asa_config.py rename to zuul/ansible/base/action/asa_config.py diff --git a/zuul/ansible/action/asa_config.pyi b/zuul/ansible/base/action/asa_config.pyi similarity index 100% rename from zuul/ansible/action/asa_config.pyi rename to zuul/ansible/base/action/asa_config.pyi diff --git a/zuul/ansible/action/asa_template.py b/zuul/ansible/base/action/asa_template.py similarity index 100% rename from zuul/ansible/action/asa_template.py rename to zuul/ansible/base/action/asa_template.py diff --git a/zuul/ansible/action/asa_template.pyi b/zuul/ansible/base/action/asa_template.pyi similarity index 100% rename from zuul/ansible/action/asa_template.pyi rename to zuul/ansible/base/action/asa_template.pyi diff --git a/zuul/ansible/action/assemble.py b/zuul/ansible/base/action/assemble.py similarity index 100% rename from zuul/ansible/action/assemble.py rename to zuul/ansible/base/action/assemble.py diff --git a/zuul/ansible/action/assemble.pyi b/zuul/ansible/base/action/assemble.pyi similarity index 100% rename from zuul/ansible/action/assemble.pyi rename to zuul/ansible/base/action/assemble.pyi diff --git a/zuul/ansible/action/ce.py b/zuul/ansible/base/action/ce.py similarity index 100% rename from zuul/ansible/action/ce.py rename to zuul/ansible/base/action/ce.py diff --git a/zuul/ansible/action/ce.pyi b/zuul/ansible/base/action/ce.pyi similarity index 100% rename from zuul/ansible/action/ce.pyi rename to zuul/ansible/base/action/ce.pyi diff --git a/zuul/ansible/action/ce_config.py b/zuul/ansible/base/action/ce_config.py similarity index 100% rename from zuul/ansible/action/ce_config.py rename to zuul/ansible/base/action/ce_config.py diff --git a/zuul/ansible/action/ce_config.pyi b/zuul/ansible/base/action/ce_config.pyi similarity index 100% rename from zuul/ansible/action/ce_config.pyi rename to zuul/ansible/base/action/ce_config.pyi diff --git a/zuul/ansible/action/ce_template.py b/zuul/ansible/base/action/ce_template.py similarity index 100% rename from zuul/ansible/action/ce_template.py rename to zuul/ansible/base/action/ce_template.py diff --git a/zuul/ansible/action/ce_template.pyi b/zuul/ansible/base/action/ce_template.pyi similarity index 100% rename from zuul/ansible/action/ce_template.pyi rename to zuul/ansible/base/action/ce_template.pyi diff --git a/zuul/ansible/action/copy.py b/zuul/ansible/base/action/copy.py similarity index 100% rename from zuul/ansible/action/copy.py rename to zuul/ansible/base/action/copy.py diff --git a/zuul/ansible/action/copy.pyi b/zuul/ansible/base/action/copy.pyi similarity index 100% rename from zuul/ansible/action/copy.pyi rename to zuul/ansible/base/action/copy.pyi diff --git a/zuul/ansible/action/dellos10_config.py b/zuul/ansible/base/action/dellos10_config.py similarity index 100% rename from zuul/ansible/action/dellos10_config.py rename to zuul/ansible/base/action/dellos10_config.py diff --git a/zuul/ansible/action/dellos10_config.pyi b/zuul/ansible/base/action/dellos10_config.pyi similarity index 100% rename from zuul/ansible/action/dellos10_config.pyi rename to zuul/ansible/base/action/dellos10_config.pyi diff --git a/zuul/ansible/action/dellos6_config.py b/zuul/ansible/base/action/dellos6_config.py similarity index 100% rename from zuul/ansible/action/dellos6_config.py rename to zuul/ansible/base/action/dellos6_config.py diff --git a/zuul/ansible/action/dellos6_config.pyi b/zuul/ansible/base/action/dellos6_config.pyi similarity index 100% rename from zuul/ansible/action/dellos6_config.pyi rename to zuul/ansible/base/action/dellos6_config.pyi diff --git a/zuul/ansible/action/dellos9_config.py b/zuul/ansible/base/action/dellos9_config.py similarity index 100% rename from zuul/ansible/action/dellos9_config.py rename to zuul/ansible/base/action/dellos9_config.py diff --git a/zuul/ansible/action/dellos9_config.pyi b/zuul/ansible/base/action/dellos9_config.pyi similarity index 100% rename from zuul/ansible/action/dellos9_config.pyi rename to zuul/ansible/base/action/dellos9_config.pyi diff --git a/zuul/ansible/action/eos_config.py b/zuul/ansible/base/action/eos_config.py similarity index 100% rename from zuul/ansible/action/eos_config.py rename to zuul/ansible/base/action/eos_config.py diff --git a/zuul/ansible/action/eos_config.pyi b/zuul/ansible/base/action/eos_config.pyi similarity index 100% rename from zuul/ansible/action/eos_config.pyi rename to zuul/ansible/base/action/eos_config.pyi diff --git a/zuul/ansible/action/eos_template.py b/zuul/ansible/base/action/eos_template.py similarity index 100% rename from zuul/ansible/action/eos_template.py rename to zuul/ansible/base/action/eos_template.py diff --git a/zuul/ansible/action/eos_template.pyi b/zuul/ansible/base/action/eos_template.pyi similarity index 100% rename from zuul/ansible/action/eos_template.pyi rename to zuul/ansible/base/action/eos_template.pyi diff --git a/zuul/ansible/action/fetch.py b/zuul/ansible/base/action/fetch.py similarity index 100% rename from zuul/ansible/action/fetch.py rename to zuul/ansible/base/action/fetch.py diff --git a/zuul/ansible/action/fetch.pyi b/zuul/ansible/base/action/fetch.pyi similarity index 100% rename from zuul/ansible/action/fetch.pyi rename to zuul/ansible/base/action/fetch.pyi diff --git a/zuul/ansible/action/fortios_config.py b/zuul/ansible/base/action/fortios_config.py similarity index 100% rename from zuul/ansible/action/fortios_config.py rename to zuul/ansible/base/action/fortios_config.py diff --git a/zuul/ansible/action/fortios_config.pyi b/zuul/ansible/base/action/fortios_config.pyi similarity index 100% rename from zuul/ansible/action/fortios_config.pyi rename to zuul/ansible/base/action/fortios_config.pyi diff --git a/zuul/ansible/action/include_vars.py b/zuul/ansible/base/action/include_vars.py similarity index 100% rename from zuul/ansible/action/include_vars.py rename to zuul/ansible/base/action/include_vars.py diff --git a/zuul/ansible/action/include_vars.pyi b/zuul/ansible/base/action/include_vars.pyi similarity index 100% rename from zuul/ansible/action/include_vars.pyi rename to zuul/ansible/base/action/include_vars.pyi diff --git a/zuul/ansible/action/ios_config.py b/zuul/ansible/base/action/ios_config.py similarity index 100% rename from zuul/ansible/action/ios_config.py rename to zuul/ansible/base/action/ios_config.py diff --git a/zuul/ansible/action/ios_config.pyi b/zuul/ansible/base/action/ios_config.pyi similarity index 100% rename from zuul/ansible/action/ios_config.pyi rename to zuul/ansible/base/action/ios_config.pyi diff --git a/zuul/ansible/action/ios_template.py b/zuul/ansible/base/action/ios_template.py similarity index 100% rename from zuul/ansible/action/ios_template.py rename to zuul/ansible/base/action/ios_template.py diff --git a/zuul/ansible/action/ios_template.pyi b/zuul/ansible/base/action/ios_template.pyi similarity index 100% rename from zuul/ansible/action/ios_template.pyi rename to zuul/ansible/base/action/ios_template.pyi diff --git a/zuul/ansible/action/iosxr_config.py b/zuul/ansible/base/action/iosxr_config.py similarity index 100% rename from zuul/ansible/action/iosxr_config.py rename to zuul/ansible/base/action/iosxr_config.py diff --git a/zuul/ansible/action/iosxr_config.pyi b/zuul/ansible/base/action/iosxr_config.pyi similarity index 100% rename from zuul/ansible/action/iosxr_config.pyi rename to zuul/ansible/base/action/iosxr_config.pyi diff --git a/zuul/ansible/action/iosxr_template.py b/zuul/ansible/base/action/iosxr_template.py similarity index 100% rename from zuul/ansible/action/iosxr_template.py rename to zuul/ansible/base/action/iosxr_template.py diff --git a/zuul/ansible/action/iosxr_template.pyi b/zuul/ansible/base/action/iosxr_template.pyi similarity index 100% rename from zuul/ansible/action/iosxr_template.pyi rename to zuul/ansible/base/action/iosxr_template.pyi diff --git a/zuul/ansible/action/junos_config.py b/zuul/ansible/base/action/junos_config.py similarity index 100% rename from zuul/ansible/action/junos_config.py rename to zuul/ansible/base/action/junos_config.py diff --git a/zuul/ansible/action/junos_config.pyi b/zuul/ansible/base/action/junos_config.pyi similarity index 100% rename from zuul/ansible/action/junos_config.pyi rename to zuul/ansible/base/action/junos_config.pyi diff --git a/zuul/ansible/action/junos_template.py b/zuul/ansible/base/action/junos_template.py similarity index 100% rename from zuul/ansible/action/junos_template.py rename to zuul/ansible/base/action/junos_template.py diff --git a/zuul/ansible/action/junos_template.pyi b/zuul/ansible/base/action/junos_template.pyi similarity index 100% rename from zuul/ansible/action/junos_template.pyi rename to zuul/ansible/base/action/junos_template.pyi diff --git a/zuul/ansible/action/net_banner.py b/zuul/ansible/base/action/net_banner.py similarity index 100% rename from zuul/ansible/action/net_banner.py rename to zuul/ansible/base/action/net_banner.py diff --git a/zuul/ansible/action/net_banner.pyi b/zuul/ansible/base/action/net_banner.pyi similarity index 100% rename from zuul/ansible/action/net_banner.pyi rename to zuul/ansible/base/action/net_banner.pyi diff --git a/zuul/ansible/action/net_base.py b/zuul/ansible/base/action/net_base.py similarity index 100% rename from zuul/ansible/action/net_base.py rename to zuul/ansible/base/action/net_base.py diff --git a/zuul/ansible/action/net_base.pyi b/zuul/ansible/base/action/net_base.pyi similarity index 100% rename from zuul/ansible/action/net_base.pyi rename to zuul/ansible/base/action/net_base.pyi diff --git a/zuul/ansible/action/net_config.py b/zuul/ansible/base/action/net_config.py similarity index 100% rename from zuul/ansible/action/net_config.py rename to zuul/ansible/base/action/net_config.py diff --git a/zuul/ansible/action/net_config.pyi b/zuul/ansible/base/action/net_config.pyi similarity index 100% rename from zuul/ansible/action/net_config.pyi rename to zuul/ansible/base/action/net_config.pyi diff --git a/zuul/ansible/action/net_interface.py b/zuul/ansible/base/action/net_interface.py similarity index 100% rename from zuul/ansible/action/net_interface.py rename to zuul/ansible/base/action/net_interface.py diff --git a/zuul/ansible/action/net_interface.pyi b/zuul/ansible/base/action/net_interface.pyi similarity index 100% rename from zuul/ansible/action/net_interface.pyi rename to zuul/ansible/base/action/net_interface.pyi diff --git a/zuul/ansible/action/net_l2_interface.py b/zuul/ansible/base/action/net_l2_interface.py similarity index 100% rename from zuul/ansible/action/net_l2_interface.py rename to zuul/ansible/base/action/net_l2_interface.py diff --git a/zuul/ansible/action/net_l2_interface.pyi b/zuul/ansible/base/action/net_l2_interface.pyi similarity index 100% rename from zuul/ansible/action/net_l2_interface.pyi rename to zuul/ansible/base/action/net_l2_interface.pyi diff --git a/zuul/ansible/action/net_l3_interface.py b/zuul/ansible/base/action/net_l3_interface.py similarity index 100% rename from zuul/ansible/action/net_l3_interface.py rename to zuul/ansible/base/action/net_l3_interface.py diff --git a/zuul/ansible/action/net_l3_interface.pyi b/zuul/ansible/base/action/net_l3_interface.pyi similarity index 100% rename from zuul/ansible/action/net_l3_interface.pyi rename to zuul/ansible/base/action/net_l3_interface.pyi diff --git a/zuul/ansible/action/net_linkagg.py b/zuul/ansible/base/action/net_linkagg.py similarity index 100% rename from zuul/ansible/action/net_linkagg.py rename to zuul/ansible/base/action/net_linkagg.py diff --git a/zuul/ansible/action/net_linkagg.pyi b/zuul/ansible/base/action/net_linkagg.pyi similarity index 100% rename from zuul/ansible/action/net_linkagg.pyi rename to zuul/ansible/base/action/net_linkagg.pyi diff --git a/zuul/ansible/action/net_lldp.py b/zuul/ansible/base/action/net_lldp.py similarity index 100% rename from zuul/ansible/action/net_lldp.py rename to zuul/ansible/base/action/net_lldp.py diff --git a/zuul/ansible/action/net_lldp.pyi b/zuul/ansible/base/action/net_lldp.pyi similarity index 100% rename from zuul/ansible/action/net_lldp.pyi rename to zuul/ansible/base/action/net_lldp.pyi diff --git a/zuul/ansible/action/net_lldp_interface.py b/zuul/ansible/base/action/net_lldp_interface.py similarity index 100% rename from zuul/ansible/action/net_lldp_interface.py rename to zuul/ansible/base/action/net_lldp_interface.py diff --git a/zuul/ansible/action/net_lldp_interface.pyi b/zuul/ansible/base/action/net_lldp_interface.pyi similarity index 100% rename from zuul/ansible/action/net_lldp_interface.pyi rename to zuul/ansible/base/action/net_lldp_interface.pyi diff --git a/zuul/ansible/action/net_logging.py b/zuul/ansible/base/action/net_logging.py similarity index 100% rename from zuul/ansible/action/net_logging.py rename to zuul/ansible/base/action/net_logging.py diff --git a/zuul/ansible/action/net_logging.pyi b/zuul/ansible/base/action/net_logging.pyi similarity index 100% rename from zuul/ansible/action/net_logging.pyi rename to zuul/ansible/base/action/net_logging.pyi diff --git a/zuul/ansible/action/net_ping.py b/zuul/ansible/base/action/net_ping.py similarity index 100% rename from zuul/ansible/action/net_ping.py rename to zuul/ansible/base/action/net_ping.py diff --git a/zuul/ansible/action/net_ping.pyi b/zuul/ansible/base/action/net_ping.pyi similarity index 100% rename from zuul/ansible/action/net_ping.pyi rename to zuul/ansible/base/action/net_ping.pyi diff --git a/zuul/ansible/action/net_static_route.py b/zuul/ansible/base/action/net_static_route.py similarity index 100% rename from zuul/ansible/action/net_static_route.py rename to zuul/ansible/base/action/net_static_route.py diff --git a/zuul/ansible/action/net_static_route.pyi b/zuul/ansible/base/action/net_static_route.pyi similarity index 100% rename from zuul/ansible/action/net_static_route.pyi rename to zuul/ansible/base/action/net_static_route.pyi diff --git a/zuul/ansible/action/net_system.py b/zuul/ansible/base/action/net_system.py similarity index 100% rename from zuul/ansible/action/net_system.py rename to zuul/ansible/base/action/net_system.py diff --git a/zuul/ansible/action/net_system.pyi b/zuul/ansible/base/action/net_system.pyi similarity index 100% rename from zuul/ansible/action/net_system.pyi rename to zuul/ansible/base/action/net_system.pyi diff --git a/zuul/ansible/action/net_template.py b/zuul/ansible/base/action/net_template.py similarity index 100% rename from zuul/ansible/action/net_template.py rename to zuul/ansible/base/action/net_template.py diff --git a/zuul/ansible/action/net_template.pyi b/zuul/ansible/base/action/net_template.pyi similarity index 100% rename from zuul/ansible/action/net_template.pyi rename to zuul/ansible/base/action/net_template.pyi diff --git a/zuul/ansible/action/net_user.py b/zuul/ansible/base/action/net_user.py similarity index 100% rename from zuul/ansible/action/net_user.py rename to zuul/ansible/base/action/net_user.py diff --git a/zuul/ansible/action/net_user.pyi b/zuul/ansible/base/action/net_user.pyi similarity index 100% rename from zuul/ansible/action/net_user.pyi rename to zuul/ansible/base/action/net_user.pyi diff --git a/zuul/ansible/action/net_vlan.py b/zuul/ansible/base/action/net_vlan.py similarity index 100% rename from zuul/ansible/action/net_vlan.py rename to zuul/ansible/base/action/net_vlan.py diff --git a/zuul/ansible/action/net_vlan.pyi b/zuul/ansible/base/action/net_vlan.pyi similarity index 100% rename from zuul/ansible/action/net_vlan.pyi rename to zuul/ansible/base/action/net_vlan.pyi diff --git a/zuul/ansible/action/net_vrf.py b/zuul/ansible/base/action/net_vrf.py similarity index 100% rename from zuul/ansible/action/net_vrf.py rename to zuul/ansible/base/action/net_vrf.py diff --git a/zuul/ansible/action/net_vrf.pyi b/zuul/ansible/base/action/net_vrf.pyi similarity index 100% rename from zuul/ansible/action/net_vrf.pyi rename to zuul/ansible/base/action/net_vrf.pyi diff --git a/zuul/ansible/action/netconf_config.py b/zuul/ansible/base/action/netconf_config.py similarity index 100% rename from zuul/ansible/action/netconf_config.py rename to zuul/ansible/base/action/netconf_config.py diff --git a/zuul/ansible/action/netconf_config.pyi b/zuul/ansible/base/action/netconf_config.pyi similarity index 100% rename from zuul/ansible/action/netconf_config.pyi rename to zuul/ansible/base/action/netconf_config.pyi diff --git a/zuul/ansible/action/network.py b/zuul/ansible/base/action/network.py similarity index 100% rename from zuul/ansible/action/network.py rename to zuul/ansible/base/action/network.py diff --git a/zuul/ansible/action/network.pyi b/zuul/ansible/base/action/network.pyi similarity index 100% rename from zuul/ansible/action/network.pyi rename to zuul/ansible/base/action/network.pyi diff --git a/zuul/ansible/action/normal.py b/zuul/ansible/base/action/normal.py similarity index 100% rename from zuul/ansible/action/normal.py rename to zuul/ansible/base/action/normal.py diff --git a/zuul/ansible/action/normal.pyi b/zuul/ansible/base/action/normal.pyi similarity index 100% rename from zuul/ansible/action/normal.pyi rename to zuul/ansible/base/action/normal.pyi diff --git a/zuul/ansible/action/nxos_config.py b/zuul/ansible/base/action/nxos_config.py similarity index 100% rename from zuul/ansible/action/nxos_config.py rename to zuul/ansible/base/action/nxos_config.py diff --git a/zuul/ansible/action/nxos_config.pyi b/zuul/ansible/base/action/nxos_config.pyi similarity index 100% rename from zuul/ansible/action/nxos_config.pyi rename to zuul/ansible/base/action/nxos_config.pyi diff --git a/zuul/ansible/action/nxos_template.py b/zuul/ansible/base/action/nxos_template.py similarity index 100% rename from zuul/ansible/action/nxos_template.py rename to zuul/ansible/base/action/nxos_template.py diff --git a/zuul/ansible/action/nxos_template.pyi b/zuul/ansible/base/action/nxos_template.pyi similarity index 100% rename from zuul/ansible/action/nxos_template.pyi rename to zuul/ansible/base/action/nxos_template.pyi diff --git a/zuul/ansible/action/ops_config.py b/zuul/ansible/base/action/ops_config.py similarity index 100% rename from zuul/ansible/action/ops_config.py rename to zuul/ansible/base/action/ops_config.py diff --git a/zuul/ansible/action/ops_config.pyi b/zuul/ansible/base/action/ops_config.pyi similarity index 100% rename from zuul/ansible/action/ops_config.pyi rename to zuul/ansible/base/action/ops_config.pyi diff --git a/zuul/ansible/action/ops_template.py b/zuul/ansible/base/action/ops_template.py similarity index 100% rename from zuul/ansible/action/ops_template.py rename to zuul/ansible/base/action/ops_template.py diff --git a/zuul/ansible/action/ops_template.pyi b/zuul/ansible/base/action/ops_template.pyi similarity index 100% rename from zuul/ansible/action/ops_template.pyi rename to zuul/ansible/base/action/ops_template.pyi diff --git a/zuul/ansible/action/patch.py b/zuul/ansible/base/action/patch.py similarity index 100% rename from zuul/ansible/action/patch.py rename to zuul/ansible/base/action/patch.py diff --git a/zuul/ansible/action/patch.pyi b/zuul/ansible/base/action/patch.pyi similarity index 100% rename from zuul/ansible/action/patch.pyi rename to zuul/ansible/base/action/patch.pyi diff --git a/zuul/ansible/action/raw.py b/zuul/ansible/base/action/raw.py similarity index 100% rename from zuul/ansible/action/raw.py rename to zuul/ansible/base/action/raw.py diff --git a/zuul/ansible/action/raw.pyi b/zuul/ansible/base/action/raw.pyi similarity index 100% rename from zuul/ansible/action/raw.pyi rename to zuul/ansible/base/action/raw.pyi diff --git a/zuul/ansible/action/script.py b/zuul/ansible/base/action/script.py similarity index 100% rename from zuul/ansible/action/script.py rename to zuul/ansible/base/action/script.py diff --git a/zuul/ansible/action/script.pyi b/zuul/ansible/base/action/script.pyi similarity index 100% rename from zuul/ansible/action/script.pyi rename to zuul/ansible/base/action/script.pyi diff --git a/zuul/ansible/action/sros_config.py b/zuul/ansible/base/action/sros_config.py similarity index 100% rename from zuul/ansible/action/sros_config.py rename to zuul/ansible/base/action/sros_config.py diff --git a/zuul/ansible/action/sros_config.pyi b/zuul/ansible/base/action/sros_config.pyi similarity index 100% rename from zuul/ansible/action/sros_config.pyi rename to zuul/ansible/base/action/sros_config.pyi diff --git a/zuul/ansible/action/synchronize.py b/zuul/ansible/base/action/synchronize.py similarity index 100% rename from zuul/ansible/action/synchronize.py rename to zuul/ansible/base/action/synchronize.py diff --git a/zuul/ansible/action/synchronize.pyi b/zuul/ansible/base/action/synchronize.pyi similarity index 100% rename from zuul/ansible/action/synchronize.pyi rename to zuul/ansible/base/action/synchronize.pyi diff --git a/zuul/ansible/action/template.py b/zuul/ansible/base/action/template.py similarity index 100% rename from zuul/ansible/action/template.py rename to zuul/ansible/base/action/template.py diff --git a/zuul/ansible/action/template.pyi b/zuul/ansible/base/action/template.pyi similarity index 100% rename from zuul/ansible/action/template.pyi rename to zuul/ansible/base/action/template.pyi diff --git a/zuul/ansible/action/unarchive.py b/zuul/ansible/base/action/unarchive.py similarity index 100% rename from zuul/ansible/action/unarchive.py rename to zuul/ansible/base/action/unarchive.py diff --git a/zuul/ansible/action/unarchive.pyi b/zuul/ansible/base/action/unarchive.pyi similarity index 100% rename from zuul/ansible/action/unarchive.pyi rename to zuul/ansible/base/action/unarchive.pyi diff --git a/zuul/ansible/action/vyos_config.py b/zuul/ansible/base/action/vyos_config.py similarity index 100% rename from zuul/ansible/action/vyos_config.py rename to zuul/ansible/base/action/vyos_config.py diff --git a/zuul/ansible/action/vyos_config.pyi b/zuul/ansible/base/action/vyos_config.pyi similarity index 100% rename from zuul/ansible/action/vyos_config.pyi rename to zuul/ansible/base/action/vyos_config.pyi diff --git a/zuul/ansible/action/win_copy.py b/zuul/ansible/base/action/win_copy.py similarity index 100% rename from zuul/ansible/action/win_copy.py rename to zuul/ansible/base/action/win_copy.py diff --git a/zuul/ansible/action/win_copy.pyi b/zuul/ansible/base/action/win_copy.pyi similarity index 100% rename from zuul/ansible/action/win_copy.pyi rename to zuul/ansible/base/action/win_copy.pyi diff --git a/zuul/ansible/action/win_template.py b/zuul/ansible/base/action/win_template.py similarity index 100% rename from zuul/ansible/action/win_template.py rename to zuul/ansible/base/action/win_template.py diff --git a/zuul/ansible/action/win_template.pyi b/zuul/ansible/base/action/win_template.pyi similarity index 100% rename from zuul/ansible/action/win_template.pyi rename to zuul/ansible/base/action/win_template.pyi diff --git a/zuul/ansible/callback/__init__.py b/zuul/ansible/base/actiongeneral/__init__.py similarity index 100% rename from zuul/ansible/callback/__init__.py rename to zuul/ansible/base/actiongeneral/__init__.py diff --git a/zuul/ansible/actiongeneral/command.py b/zuul/ansible/base/actiongeneral/command.py similarity index 100% rename from zuul/ansible/actiongeneral/command.py rename to zuul/ansible/base/actiongeneral/command.py diff --git a/zuul/ansible/actiongeneral/command.pyi b/zuul/ansible/base/actiongeneral/command.pyi similarity index 100% rename from zuul/ansible/actiongeneral/command.pyi rename to zuul/ansible/base/actiongeneral/command.pyi diff --git a/zuul/ansible/actiongeneral/zuul_return.py b/zuul/ansible/base/actiongeneral/zuul_return.py similarity index 100% rename from zuul/ansible/actiongeneral/zuul_return.py rename to zuul/ansible/base/actiongeneral/zuul_return.py diff --git a/zuul/ansible/filter/__init__.py b/zuul/ansible/base/callback/__init__.py similarity index 100% rename from zuul/ansible/filter/__init__.py rename to zuul/ansible/base/callback/__init__.py diff --git a/zuul/ansible/callback/zuul_json.py b/zuul/ansible/base/callback/zuul_json.py similarity index 100% rename from zuul/ansible/callback/zuul_json.py rename to zuul/ansible/base/callback/zuul_json.py diff --git a/zuul/ansible/callback/zuul_stream.py b/zuul/ansible/base/callback/zuul_stream.py similarity index 100% rename from zuul/ansible/callback/zuul_stream.py rename to zuul/ansible/base/callback/zuul_stream.py diff --git a/zuul/ansible/callback/zuul_unreachable.py b/zuul/ansible/base/callback/zuul_unreachable.py similarity index 100% rename from zuul/ansible/callback/zuul_unreachable.py rename to zuul/ansible/base/callback/zuul_unreachable.py diff --git a/zuul/ansible/library/__init__.py b/zuul/ansible/base/filter/__init__.py similarity index 100% rename from zuul/ansible/library/__init__.py rename to zuul/ansible/base/filter/__init__.py diff --git a/zuul/ansible/filter/zuul_filters.py b/zuul/ansible/base/filter/zuul_filters.py similarity index 100% rename from zuul/ansible/filter/zuul_filters.py rename to zuul/ansible/base/filter/zuul_filters.py diff --git a/zuul/ansible/lookup/__init__.py b/zuul/ansible/base/library/__init__.py similarity index 100% rename from zuul/ansible/lookup/__init__.py rename to zuul/ansible/base/library/__init__.py diff --git a/zuul/ansible/library/command.py b/zuul/ansible/base/library/command.py similarity index 100% rename from zuul/ansible/library/command.py rename to zuul/ansible/base/library/command.py diff --git a/zuul/ansible/library/zuul_console.py b/zuul/ansible/base/library/zuul_console.py similarity index 100% rename from zuul/ansible/library/zuul_console.py rename to zuul/ansible/base/library/zuul_console.py diff --git a/zuul/ansible/lookup/_banned.pyi b/zuul/ansible/base/lookup/__init__.py similarity index 100% rename from zuul/ansible/lookup/_banned.pyi rename to zuul/ansible/base/lookup/__init__.py diff --git a/zuul/ansible/lookup/_banned.py b/zuul/ansible/base/lookup/_banned.py similarity index 100% rename from zuul/ansible/lookup/_banned.py rename to zuul/ansible/base/lookup/_banned.py diff --git a/zuul/ansible/lookup/chef_databag.pyi b/zuul/ansible/base/lookup/_banned.pyi similarity index 100% rename from zuul/ansible/lookup/chef_databag.pyi rename to zuul/ansible/base/lookup/_banned.pyi diff --git a/zuul/ansible/lookup/chef_databag.py b/zuul/ansible/base/lookup/chef_databag.py similarity index 100% rename from zuul/ansible/lookup/chef_databag.py rename to zuul/ansible/base/lookup/chef_databag.py diff --git a/zuul/ansible/lookup/consul_kv.pyi b/zuul/ansible/base/lookup/chef_databag.pyi similarity index 100% rename from zuul/ansible/lookup/consul_kv.pyi rename to zuul/ansible/base/lookup/chef_databag.pyi diff --git a/zuul/ansible/lookup/consul_kv.py b/zuul/ansible/base/lookup/consul_kv.py similarity index 100% rename from zuul/ansible/lookup/consul_kv.py rename to zuul/ansible/base/lookup/consul_kv.py diff --git a/zuul/ansible/lookup/credstash.pyi b/zuul/ansible/base/lookup/consul_kv.pyi similarity index 100% rename from zuul/ansible/lookup/credstash.pyi rename to zuul/ansible/base/lookup/consul_kv.pyi diff --git a/zuul/ansible/lookup/credstash.py b/zuul/ansible/base/lookup/credstash.py similarity index 100% rename from zuul/ansible/lookup/credstash.py rename to zuul/ansible/base/lookup/credstash.py diff --git a/zuul/ansible/lookup/csvfile.pyi b/zuul/ansible/base/lookup/credstash.pyi similarity index 100% rename from zuul/ansible/lookup/csvfile.pyi rename to zuul/ansible/base/lookup/credstash.pyi diff --git a/zuul/ansible/lookup/csvfile.py b/zuul/ansible/base/lookup/csvfile.py similarity index 100% rename from zuul/ansible/lookup/csvfile.py rename to zuul/ansible/base/lookup/csvfile.py diff --git a/zuul/ansible/lookup/cyberarkpassword.pyi b/zuul/ansible/base/lookup/csvfile.pyi similarity index 100% rename from zuul/ansible/lookup/cyberarkpassword.pyi rename to zuul/ansible/base/lookup/csvfile.pyi diff --git a/zuul/ansible/lookup/cyberarkpassword.py b/zuul/ansible/base/lookup/cyberarkpassword.py similarity index 100% rename from zuul/ansible/lookup/cyberarkpassword.py rename to zuul/ansible/base/lookup/cyberarkpassword.py diff --git a/zuul/ansible/lookup/dig.pyi b/zuul/ansible/base/lookup/cyberarkpassword.pyi similarity index 100% rename from zuul/ansible/lookup/dig.pyi rename to zuul/ansible/base/lookup/cyberarkpassword.pyi diff --git a/zuul/ansible/lookup/dig.py b/zuul/ansible/base/lookup/dig.py similarity index 100% rename from zuul/ansible/lookup/dig.py rename to zuul/ansible/base/lookup/dig.py diff --git a/zuul/ansible/lookup/dnstxt.pyi b/zuul/ansible/base/lookup/dig.pyi similarity index 100% rename from zuul/ansible/lookup/dnstxt.pyi rename to zuul/ansible/base/lookup/dig.pyi diff --git a/zuul/ansible/lookup/dnstxt.py b/zuul/ansible/base/lookup/dnstxt.py similarity index 100% rename from zuul/ansible/lookup/dnstxt.py rename to zuul/ansible/base/lookup/dnstxt.py diff --git a/zuul/ansible/lookup/env.pyi b/zuul/ansible/base/lookup/dnstxt.pyi similarity index 100% rename from zuul/ansible/lookup/env.pyi rename to zuul/ansible/base/lookup/dnstxt.pyi diff --git a/zuul/ansible/lookup/env.py b/zuul/ansible/base/lookup/env.py similarity index 100% rename from zuul/ansible/lookup/env.py rename to zuul/ansible/base/lookup/env.py diff --git a/zuul/ansible/lookup/etcd.pyi b/zuul/ansible/base/lookup/env.pyi similarity index 100% rename from zuul/ansible/lookup/etcd.pyi rename to zuul/ansible/base/lookup/env.pyi diff --git a/zuul/ansible/lookup/etcd.py b/zuul/ansible/base/lookup/etcd.py similarity index 100% rename from zuul/ansible/lookup/etcd.py rename to zuul/ansible/base/lookup/etcd.py diff --git a/zuul/ansible/lookup/file.pyi b/zuul/ansible/base/lookup/etcd.pyi similarity index 100% rename from zuul/ansible/lookup/file.pyi rename to zuul/ansible/base/lookup/etcd.pyi diff --git a/zuul/ansible/lookup/file.py b/zuul/ansible/base/lookup/file.py similarity index 100% rename from zuul/ansible/lookup/file.py rename to zuul/ansible/base/lookup/file.py diff --git a/zuul/ansible/lookup/fileglob.pyi b/zuul/ansible/base/lookup/file.pyi similarity index 100% rename from zuul/ansible/lookup/fileglob.pyi rename to zuul/ansible/base/lookup/file.pyi diff --git a/zuul/ansible/lookup/fileglob.py b/zuul/ansible/base/lookup/fileglob.py similarity index 100% rename from zuul/ansible/lookup/fileglob.py rename to zuul/ansible/base/lookup/fileglob.py diff --git a/zuul/ansible/lookup/filetree.pyi b/zuul/ansible/base/lookup/fileglob.pyi similarity index 100% rename from zuul/ansible/lookup/filetree.pyi rename to zuul/ansible/base/lookup/fileglob.pyi diff --git a/zuul/ansible/lookup/filetree.py b/zuul/ansible/base/lookup/filetree.py similarity index 100% rename from zuul/ansible/lookup/filetree.py rename to zuul/ansible/base/lookup/filetree.py diff --git a/zuul/ansible/lookup/first_found.pyi b/zuul/ansible/base/lookup/filetree.pyi similarity index 100% rename from zuul/ansible/lookup/first_found.pyi rename to zuul/ansible/base/lookup/filetree.pyi diff --git a/zuul/ansible/lookup/first_found.py b/zuul/ansible/base/lookup/first_found.py similarity index 100% rename from zuul/ansible/lookup/first_found.py rename to zuul/ansible/base/lookup/first_found.py diff --git a/zuul/ansible/lookup/hashi_valut.pyi b/zuul/ansible/base/lookup/first_found.pyi similarity index 100% rename from zuul/ansible/lookup/hashi_valut.pyi rename to zuul/ansible/base/lookup/first_found.pyi diff --git a/zuul/ansible/lookup/hashi_valut.py b/zuul/ansible/base/lookup/hashi_valut.py similarity index 100% rename from zuul/ansible/lookup/hashi_valut.py rename to zuul/ansible/base/lookup/hashi_valut.py diff --git a/zuul/ansible/lookup/hiera.pyi b/zuul/ansible/base/lookup/hashi_valut.pyi similarity index 100% rename from zuul/ansible/lookup/hiera.pyi rename to zuul/ansible/base/lookup/hashi_valut.pyi diff --git a/zuul/ansible/lookup/hiera.py b/zuul/ansible/base/lookup/hiera.py similarity index 100% rename from zuul/ansible/lookup/hiera.py rename to zuul/ansible/base/lookup/hiera.py diff --git a/zuul/ansible/lookup/ini.pyi b/zuul/ansible/base/lookup/hiera.pyi similarity index 100% rename from zuul/ansible/lookup/ini.pyi rename to zuul/ansible/base/lookup/hiera.pyi diff --git a/zuul/ansible/lookup/ini.py b/zuul/ansible/base/lookup/ini.py similarity index 100% rename from zuul/ansible/lookup/ini.py rename to zuul/ansible/base/lookup/ini.py diff --git a/zuul/ansible/lookup/keyring.pyi b/zuul/ansible/base/lookup/ini.pyi similarity index 100% rename from zuul/ansible/lookup/keyring.pyi rename to zuul/ansible/base/lookup/ini.pyi diff --git a/zuul/ansible/lookup/keyring.py b/zuul/ansible/base/lookup/keyring.py similarity index 100% rename from zuul/ansible/lookup/keyring.py rename to zuul/ansible/base/lookup/keyring.py diff --git a/zuul/ansible/lookup/lastpass.pyi b/zuul/ansible/base/lookup/keyring.pyi similarity index 100% rename from zuul/ansible/lookup/lastpass.pyi rename to zuul/ansible/base/lookup/keyring.pyi diff --git a/zuul/ansible/lookup/lastpass.py b/zuul/ansible/base/lookup/lastpass.py similarity index 100% rename from zuul/ansible/lookup/lastpass.py rename to zuul/ansible/base/lookup/lastpass.py diff --git a/zuul/ansible/lookup/lines.pyi b/zuul/ansible/base/lookup/lastpass.pyi similarity index 100% rename from zuul/ansible/lookup/lines.pyi rename to zuul/ansible/base/lookup/lastpass.pyi diff --git a/zuul/ansible/lookup/lines.py b/zuul/ansible/base/lookup/lines.py similarity index 100% rename from zuul/ansible/lookup/lines.py rename to zuul/ansible/base/lookup/lines.py diff --git a/zuul/ansible/lookup/mongodb.pyi b/zuul/ansible/base/lookup/lines.pyi similarity index 100% rename from zuul/ansible/lookup/mongodb.pyi rename to zuul/ansible/base/lookup/lines.pyi diff --git a/zuul/ansible/lookup/mongodb.py b/zuul/ansible/base/lookup/mongodb.py similarity index 100% rename from zuul/ansible/lookup/mongodb.py rename to zuul/ansible/base/lookup/mongodb.py diff --git a/zuul/ansible/lookup/password.pyi b/zuul/ansible/base/lookup/mongodb.pyi similarity index 100% rename from zuul/ansible/lookup/password.pyi rename to zuul/ansible/base/lookup/mongodb.pyi diff --git a/zuul/ansible/lookup/password.py b/zuul/ansible/base/lookup/password.py similarity index 100% rename from zuul/ansible/lookup/password.py rename to zuul/ansible/base/lookup/password.py diff --git a/zuul/ansible/lookup/passwordstore.pyi b/zuul/ansible/base/lookup/password.pyi similarity index 100% rename from zuul/ansible/lookup/passwordstore.pyi rename to zuul/ansible/base/lookup/password.pyi diff --git a/zuul/ansible/lookup/passwordstore.py b/zuul/ansible/base/lookup/passwordstore.py similarity index 100% rename from zuul/ansible/lookup/passwordstore.py rename to zuul/ansible/base/lookup/passwordstore.py diff --git a/zuul/ansible/lookup/pipe.pyi b/zuul/ansible/base/lookup/passwordstore.pyi similarity index 100% rename from zuul/ansible/lookup/pipe.pyi rename to zuul/ansible/base/lookup/passwordstore.pyi diff --git a/zuul/ansible/lookup/pipe.py b/zuul/ansible/base/lookup/pipe.py similarity index 100% rename from zuul/ansible/lookup/pipe.py rename to zuul/ansible/base/lookup/pipe.py diff --git a/zuul/ansible/lookup/redis_kv.pyi b/zuul/ansible/base/lookup/pipe.pyi similarity index 100% rename from zuul/ansible/lookup/redis_kv.pyi rename to zuul/ansible/base/lookup/pipe.pyi diff --git a/zuul/ansible/lookup/redis_kv.py b/zuul/ansible/base/lookup/redis_kv.py similarity index 100% rename from zuul/ansible/lookup/redis_kv.py rename to zuul/ansible/base/lookup/redis_kv.py diff --git a/zuul/ansible/lookup/shelvefile.pyi b/zuul/ansible/base/lookup/redis_kv.pyi similarity index 100% rename from zuul/ansible/lookup/shelvefile.pyi rename to zuul/ansible/base/lookup/redis_kv.pyi diff --git a/zuul/ansible/lookup/shelvefile.py b/zuul/ansible/base/lookup/shelvefile.py similarity index 100% rename from zuul/ansible/lookup/shelvefile.py rename to zuul/ansible/base/lookup/shelvefile.py diff --git a/zuul/ansible/lookup/template.pyi b/zuul/ansible/base/lookup/shelvefile.pyi similarity index 100% rename from zuul/ansible/lookup/template.pyi rename to zuul/ansible/base/lookup/shelvefile.pyi diff --git a/zuul/ansible/lookup/template.py b/zuul/ansible/base/lookup/template.py similarity index 100% rename from zuul/ansible/lookup/template.py rename to zuul/ansible/base/lookup/template.py diff --git a/zuul/ansible/lookup/url.pyi b/zuul/ansible/base/lookup/template.pyi similarity index 100% rename from zuul/ansible/lookup/url.pyi rename to zuul/ansible/base/lookup/template.pyi diff --git a/zuul/ansible/lookup/url.py b/zuul/ansible/base/lookup/url.py similarity index 100% rename from zuul/ansible/lookup/url.py rename to zuul/ansible/base/lookup/url.py diff --git a/zuul/ansible/base/lookup/url.pyi b/zuul/ansible/base/lookup/url.pyi new file mode 100644 index 0000000000..e69de29bb2 diff --git a/zuul/cmd/manage_ansible.py b/zuul/cmd/manage_ansible.py new file mode 100644 index 0000000000..faea404007 --- /dev/null +++ b/zuul/cmd/manage_ansible.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +# Copyright 2019 BMW Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import logging +import zuul.cmd +from zuul.lib.ansible import AnsibleManager + + +class ManageAnsible(zuul.cmd.ZuulApp): + + app_name = 'manage-ansible' + app_description = 'Zuul ansible maager' + log = logging.getLogger('zuul.ManageAnsible') + + def createParser(self): + parser = super().createParser() + parser.add_argument('-v', dest='verbose', action='store_true', + help='verbose output') + parser.add_argument('-u', dest='upgrade', action='store_true', + help='upgrade ansible versions') + return parser + + def _setup_logging(self): + """Manage ansible logging does not rely on conf file""" + if self.args.verbose: + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(level=logging.INFO) + + def main(self): + self.parseArguments() + try: + self.readConfig() + except Exception: + # This script must be able to run without config so this can be + # safely ignored here. + pass + self._setup_logging() + + manager = AnsibleManager() + + manager.install(upgrade=self.args.upgrade) + + +def main(): + ManageAnsible().main() + + +if __name__ == "__main__": + main() diff --git a/zuul/executor/server.py b/zuul/executor/server.py index de76471445..b3bf0119f3 100644 --- a/zuul/executor/server.py +++ b/zuul/executor/server.py @@ -30,6 +30,7 @@ import traceback import git from urllib.parse import urlsplit +from zuul.lib.ansible import AnsibleManager from zuul.lib.yamlutil import yaml from zuul.lib.config import get_default from zuul.lib.statsd import get_statsd @@ -567,7 +568,7 @@ class DeduplicateQueue(object): def _copy_ansible_files(python_module, target_dir): library_path = os.path.dirname(os.path.abspath(python_module.__file__)) for fn in os.listdir(library_path): - if fn == "__pycache__": + if fn in ('__pycache__', 'base'): continue full_path = os.path.join(library_path, fn) if os.path.isdir(full_path): @@ -705,6 +706,15 @@ class AnsibleJob(object): self.executor_variables_file = self.executor_server.config.get( 'executor', 'variables') + # TODO(tobiash): choose correct ansible version as specified by the job + plugin_dir = self.executor_server.ansible_manager.getAnsiblePluginDir() + self.library_dir = os.path.join(plugin_dir, 'library') + self.action_dir = os.path.join(plugin_dir, 'action') + self.action_dir_general = os.path.join(plugin_dir, 'actiongeneral') + self.callback_dir = os.path.join(plugin_dir, 'callback') + self.lookup_dir = os.path.join(plugin_dir, 'lookup') + self.filter_dir = os.path.join(plugin_dir, 'filter') + def run(self): self.running = True self.thread = threading.Thread(target=self.execute, @@ -1723,10 +1733,10 @@ class AnsibleJob(object): # plugins. if ara_callbacks: callback_path = '%s:%s' % ( - self.executor_server.callback_dir, + self.callback_dir, os.path.dirname(ara_callbacks.__file__)) else: - callback_path = self.executor_server.callback_dir + callback_path = self.callback_dir with open(jobdir_playbook.ansible_config, 'w') as config: config.write('[defaults]\n') config.write('inventory = %s\n' % self.jobdir.inventory) @@ -1737,23 +1747,23 @@ class AnsibleJob(object): config.write('fact_caching_connection = %s\n' % self.jobdir.fact_cache) config.write('library = %s\n' - % self.executor_server.library_dir) + % self.library_dir) config.write('command_warnings = False\n') config.write('callback_plugins = %s\n' % callback_path) config.write('stdout_callback = zuul_stream\n') config.write('filter_plugins = %s\n' - % self.executor_server.filter_dir) + % self.filter_dir) # bump the timeout because busy nodes may take more than # 10s to respond config.write('timeout = 30\n') # We need at least the general action dir as this overwrites the # command action plugin for log streaming. - action_dirs = [self.executor_server.action_dir_general] + action_dirs = [self.action_dir_general] if not trusted: - action_dirs.append(self.executor_server.action_dir) + action_dirs.append(self.action_dir) config.write('lookup_plugins = %s\n' - % self.executor_server.lookup_dir) + % self.lookup_dir) config.write('action_plugins = %s\n' % ':'.join(action_dirs)) @@ -1826,7 +1836,10 @@ class AnsibleJob(object): pythonpath = [pythonpath] else: pythonpath = [] - pythonpath = [self.executor_server.ansible_dir] + pythonpath + + # TODO(tobiash): choose correct ansible version + ansible_dir = self.executor_server.ansible_manager.getAnsibleDir() + pythonpath = [ansible_dir] + pythonpath env_copy['PYTHONPATH'] = os.path.pathsep.join(pythonpath) if playbook.trusted: @@ -1840,7 +1853,7 @@ class AnsibleJob(object): ro_paths = ro_paths.split(":") if ro_paths else [] rw_paths = rw_paths.split(":") if rw_paths else [] - ro_paths.append(self.executor_server.ansible_dir) + ro_paths.append(ansible_dir) ro_paths.append(self.jobdir.ansible_root) ro_paths.append(self.jobdir.trusted_root) ro_paths.append(self.jobdir.untrusted_root) @@ -2015,7 +2028,10 @@ class AnsibleJob(object): else: verbose = '-v' - cmd = ['ansible', '*', verbose, '-m', 'setup', + # TODO: select correct ansible version from job + ansible = self.executor_server.ansible_manager.getAnsibleCommand( + command='ansible') + cmd = [ansible, '*', verbose, '-m', 'setup', '-i', self.jobdir.setup_inventory, '-a', 'gather_subset=!all'] if self.executor_variables_file is not None: @@ -2094,7 +2110,9 @@ class AnsibleJob(object): else: verbose = '-v' - cmd = ['ansible-playbook', verbose, playbook.path] + # TODO: Select ansible version based on job + cmd = [self.executor_server.ansible_manager.getAnsibleCommand(), + verbose, playbook.path] if playbook.secrets_content: cmd.extend(['-e', '@' + playbook.secrets]) @@ -2233,31 +2251,6 @@ class ExecutorServer(object): state_dir = get_default(self.config, 'executor', 'state_dir', '/var/lib/zuul', expand_user=True) - ansible_dir = os.path.join(state_dir, 'ansible') - self.ansible_dir = ansible_dir - if os.path.exists(ansible_dir): - shutil.rmtree(ansible_dir) - - zuul_dir = os.path.join(ansible_dir, 'zuul') - plugin_dir = os.path.join(zuul_dir, 'ansible') - - os.makedirs(plugin_dir, mode=0o0755) - - self.library_dir = os.path.join(plugin_dir, 'library') - self.action_dir = os.path.join(plugin_dir, 'action') - self.action_dir_general = os.path.join(plugin_dir, 'actiongeneral') - self.callback_dir = os.path.join(plugin_dir, 'callback') - self.lookup_dir = os.path.join(plugin_dir, 'lookup') - self.filter_dir = os.path.join(plugin_dir, 'filter') - - _copy_ansible_files(zuul.ansible, plugin_dir) - - # We're copying zuul.ansible.* into a directory we are going - # to add to pythonpath, so our plugins can "import - # zuul.ansible". But we're not installing all of zuul, so - # create a __init__.py file for the stub "zuul" module. - with open(os.path.join(zuul_dir, '__init__.py'), 'w'): - pass # If keep is not set, ensure the job dir is empty on startup, # in case we were uncleanly shut down. @@ -2284,6 +2277,10 @@ class ExecutorServer(object): StartingBuildsSensor(self, cpu_sensor.max_load_avg) ] + ansible_dir = os.path.join(state_dir, 'ansible') + self.ansible_manager = AnsibleManager(ansible_dir) + self.ansible_manager.copyAnsibleFiles() + def _getMerger(self, root, cache_root, logger=None): return zuul.merger.merger.Merger( root, self.connections, self.merge_email, self.merge_name, diff --git a/zuul/lib/ansible-config.conf b/zuul/lib/ansible-config.conf new file mode 100644 index 0000000000..982339004a --- /dev/null +++ b/zuul/lib/ansible-config.conf @@ -0,0 +1,6 @@ +# This file describes the currently supported ansible versions + +[2.5] +default = true +deprecated = true +requirements = ansible>=2.5.1,<2.6 ara diff --git a/zuul/lib/ansible.py b/zuul/lib/ansible.py new file mode 100644 index 0000000000..83c0afe049 --- /dev/null +++ b/zuul/lib/ansible.py @@ -0,0 +1,215 @@ +# Copyright 2019 BMW Group +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import concurrent.futures +import configparser +import logging +import os +import shutil +import subprocess +import sys +import zuul.ansible + +from pkg_resources import resource_string +from zuul.lib.config import get_default + + +class ManagedAnsible: + log = logging.getLogger('zuul.managed_ansible') + + def __init__(self, config, version): + self.version = version + + requirements = get_default(config, version, 'requirements') + self._requirements = requirements.split(' ') + + self.default = get_default(config, version, 'default', False) + self.deprecated = get_default(config, version, 'deprecated', False) + + self._ansible_root = os.path.join( + sys.exec_prefix, 'lib', 'zuul', 'ansible') + + def ensure_ansible(self, upgrade=False): + self._ensure_venv() + + self.log.info('Installing ansible %s, extra packages: %s', + self.version, self.extra_packages) + self._run_pip(self._requirements + self.extra_packages, + upgrade=upgrade) + + def _run_pip(self, requirements, upgrade=False): + cmd = [os.path.join(self.venv_path, 'bin', 'pip'), 'install'] + if upgrade: + cmd.append('-U') + cmd.extend(requirements) + self.log.debug('Running pip: %s', ' '.join(cmd)) + + p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + if p.returncode != 0: + raise Exception('Package installation failed with exit code %s ' + 'during processing ansible %s:\n' + 'stdout:\n%s\n' + 'stderr:\n%s' % (p.returncode, self.version, + p.stdout.decode(), + p.stderr.decode())) + self.log.debug('Successfully installed packages %s', requirements) + + def _ensure_venv(self): + if os.path.exists(self.python_path): + self.log.debug( + 'Virtual environment %s already existing', self.venv_path) + return + + self.log.info('Creating venv %s', self.venv_path) + + python_executable = sys.executable + if hasattr(sys, 'real_prefix'): + # We're inside a virtual env and the venv module behaves strange + # if we're calling it from there so default to + # /bin/python3 + python_executable = os.path.join(sys.real_prefix, 'bin', 'python3') + + # We don't use directly the venv module here because its behavior is + # broken if we're already in a virtual environment. + cmd = ['virtualenv', '-p', python_executable, self.venv_path] + p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + if p.returncode != 0: + raise Exception('venv creation failed with exit code %s:\n' + 'stdout:\n%s\n' + 'stderr:\n%s' % (p.returncode, p.stdout.decode(), + p.stderr.decode())) + + @property + def venv_path(self): + return os.path.join(self._ansible_root, self.version) + + @property + def python_path(self): + return os.path.join(self.venv_path, 'bin', 'python') + + @property + def extra_packages(self): + mapping = str.maketrans({ + '.': None, + '-': '_', + }) + env_var = 'ANSIBLE_%s_EXTRA_PACKAGES' % self.version.upper().translate( + mapping) + + packages = os.environ.get(env_var) + if packages: + return packages.strip().split(' ') + + return [] + + def __repr__(self): + return 'Ansible {a.version}, {a.default}, {a.deprecated}'.format( + a=self) + + +class AnsibleManager: + log = logging.getLogger('zuul.ansible_manager') + + def __init__(self, zuul_ansible_dir=None): + self._supported_versions = {} + self.default_version = None + self.zuul_ansible_dir = zuul_ansible_dir + + self.load_ansible_config() + + def load_ansible_config(self): + c = resource_string(__name__, 'ansible-config.conf').decode() + config = configparser.ConfigParser() + config.read_string(c) + + for version in config.sections(): + + ansible = ManagedAnsible(config, version) + + if ansible.version in self._supported_versions: + raise RuntimeError( + 'Ansible version %s already defined' % ansible.version) + + self._supported_versions[ansible.version] = ansible + + if ansible.default: + if self.default_version is not None: + raise RuntimeError( + 'Default ansible version can only specified once') + self.default_version = ansible.version + + if not self.default_version: + raise RuntimeError('A default ansible version must be specified') + + def install(self, upgrade=False): + with concurrent.futures.ThreadPoolExecutor() as executor: + futures = {executor.submit(a.ensure_ansible, upgrade): a + for a in self._supported_versions.values()} + for future in concurrent.futures.as_completed(futures): + future.result() + + def _getAnsible(self, version): + if not version: + version = self.default_version + + ansible = self._supported_versions.get(version) + if not ansible: + raise Exception('Requested ansible version %s not found' % version) + return ansible + + def getAnsibleCommand(self, version=None, command='ansible-playbook'): + ansible = self._getAnsible(version) + return os.path.join(ansible.venv_path, 'bin', command) + + def getAnsibleDir(self, version=None): + ansible = self._getAnsible(version) + return os.path.join(self.zuul_ansible_dir, ansible.version) + + def getAnsiblePluginDir(self, version=None): + return os.path.join(self.getAnsibleDir(version), 'zuul', 'ansible') + + def copyAnsibleFiles(self): + if os.path.exists(self.zuul_ansible_dir): + shutil.rmtree(self.zuul_ansible_dir) + + library_path = os.path.dirname(os.path.abspath(zuul.ansible.__file__)) + for ansible in self._supported_versions.values(): + ansible_dir = os.path.join(self.zuul_ansible_dir, ansible.version) + plugin_dir = os.path.join(ansible_dir, 'zuul', 'ansible') + source_path = os.path.join(library_path, ansible.version) + + os.makedirs(plugin_dir, exist_ok=True) + for fn in os.listdir(source_path): + if fn in ('__pycache__', 'base'): + continue + full_path = os.path.join(source_path, fn) + if os.path.isdir(full_path): + shutil.copytree(full_path, os.path.join(plugin_dir, fn)) + else: + shutil.copy(os.path.join(source_path, fn), plugin_dir) + + # We're copying zuul.ansible.* into a directory we are going + # to add to pythonpath, so our plugins can "import + # zuul.ansible". But we're not installing all of zuul, so + # create a __init__.py file for the stub "zuul" module. + module_paths = [ + os.path.join(ansible_dir, 'zuul'), + os.path.join(ansible_dir, 'zuul', 'ansible'), + ] + for fn in module_paths: + with open(os.path.join(fn, '__init__.py'), 'w'): + # Nothing to do here, we just want the file to exist. + pass