diff options
author | Tobias Henkel <tobias.henkel@bmw.de> | 2019-01-19 13:33:39 +0100 |
---|---|---|
committer | Tobias Henkel <tobias.henkel@bmw.de> | 2019-03-15 09:09:16 +0100 |
commit | cd9827e6649b7f14513c2f201afc9e9d46998ddb (patch) | |
tree | f89c2370385812fa82b64bd61a63a34a508d19c0 | |
parent | c91335b5279872d90b285b087a0c2ddb85fc4f77 (diff) | |
download | zuul-cd9827e6649b7f14513c2f201afc9e9d46998ddb.tar.gz |
Manage ansible installations within zuul
As a first step towards supporting multiple ansible versions we need
tooling to manage ansible installations. This moves the installation
of ansible from the requirements.txt into zuul. This is called as a
setup hook to install the ansible versions into
<prefix>/lib/zuul/ansible. Further this tooling abstracts knowledge
that the executor must know in order to actually run the correct
version of ansible.
The actual usage of multiple ansible versions will be done in
follow-ups.
For better maintainability the ansible plugins live in
zuul/ansible/base where plugins can be kept in different versions if
necessary. For each supported ansible version there is a specific
folder that symlinks the according plugins.
Change-Id: I5ce1385245c76818777aa34230786a9dbaf723e5
Depends-On: https://review.openstack.org/623927
412 files changed, 627 insertions, 86 deletions
diff --git a/.zuul.yaml b/.zuul.yaml index 211138207..ec009534b 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 a859675c8..1cc85b3cb 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 0a5545fff..b63dcdc20 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 64e444d1b..ebbfd358a 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 1b7f8d371..ef9d826c3 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 000000000..af11d705e --- /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 000000000..1154fcf44 --- /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 ac5a1e3b5..000000000 --- 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 900d2ffa8..760c4428d 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 83976e70d..a9cb9c6aa 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 c5fcbb442..6e588ed0f 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 c4946e845..413fdee60 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 a9535cd9f..9cf97e265 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 e666d21ea..dca633179 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 34cabcea3..5fc2e0dc9 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 03dff15bb..4cbc40369 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 bcfb3c762..d24072886 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 @@ -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 @@ -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 000000000..4048e7ac1 --- /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 000000000..fdb7f466b --- /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 000000000..9257939ce --- /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 000000000..f2459ab86 --- /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 000000000..f58722a86 --- /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 000000000..acc0dd85e --- /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 000000000..fc7b16cf6 --- /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 000000000..8784b92ed --- /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 000000000..228b3ecfe --- /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 000000000..f50d9082b --- /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 000000000..bab9d28fd --- /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 000000000..3e7e93dc0 --- /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 000000000..e0cdc24b5 --- /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 000000000..598f400d5 --- /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 000000000..86fe03484 --- /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 000000000..e1e8eecbe --- /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 000000000..0753101f1 --- /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 000000000..22273b123 --- /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 000000000..3a7074ec7 --- /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 000000000..db95d9121 --- /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 000000000..ba2365f2b --- /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 000000000..ec0319843 --- /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 000000000..b762785d1 --- /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 000000000..aa59e80a0 --- /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 000000000..75ba2250c --- /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 000000000..1c0c2291f --- /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 000000000..189722f2a --- /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 000000000..caf6ce6c3 --- /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 000000000..ede9a927e --- /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 000000000..080fcce4c --- /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 000000000..d5cf3ce15 --- /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 000000000..c2e79870c --- /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 000000000..b50389ab4 --- /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 000000000..4d1ab53bb --- /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 000000000..f6d058ba1 --- /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 000000000..a108bf66f --- /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 000000000..b9cac42e8 --- /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 000000000..d53e02548 --- /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 000000000..b3ae31523 --- /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 000000000..ef38743bc --- /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 000000000..fa334a059 --- /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 000000000..832d5a27a --- /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 000000000..4099c1ae6 --- /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 000000000..f1495d47e --- /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 000000000..e6af5e34c --- /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 000000000..ef863cedf --- /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 000000000..c37247812 --- /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 000000000..4eb293626 --- /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 000000000..70a2d67a3 --- /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 000000000..6a60fa49e --- /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 000000000..918f5a113 --- /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 000000000..c50f3bc67 --- /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 000000000..31cbba451 --- /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 000000000..a2119b7cd --- /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 000000000..e6ef22ba9 --- /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 000000000..69cc6d5a4 --- /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 000000000..f926dbf70 --- /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 000000000..f36b6ecc7 --- /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 000000000..9f6ce1b7d --- /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 000000000..a817ca518 --- /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 000000000..412b8110e --- /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 000000000..1d24f7821 --- /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 000000000..57bb45316 --- /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 000000000..1f44192c8 --- /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 000000000..2b780821d --- /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 000000000..97017f4e3 --- /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 000000000..9317599a2 --- /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 000000000..d3fc53dd1 --- /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 000000000..b5fac56b6 --- /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 000000000..15fc3a859 --- /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 000000000..a627fdec7 --- /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 000000000..f57ec137f --- /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 000000000..fdd97b078 --- /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 000000000..57d9766aa --- /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 000000000..1d6f1b029 --- /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 000000000..696d9f526 --- /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 000000000..03f84e975 --- /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 000000000..c22b7f0e0 --- /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 000000000..859c20fec --- /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 000000000..a03dd93c9 --- /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 000000000..cc159053b --- /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 000000000..18ba965e4 --- /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 000000000..3bfbb6f0f --- /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 000000000..fcfb3f55a --- /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 000000000..267f5da34 --- /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 000000000..df275656f --- /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 000000000..718074899 --- /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 000000000..c757d2100 --- /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 000000000..df043a0cd --- /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 000000000..4d13bb82c --- /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 000000000..c75a746b4 --- /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 000000000..9e2d1baa4 --- /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 000000000..e1842d197 --- /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 000000000..4e131d98d --- /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 000000000..bbbe0704c --- /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 000000000..0cc233c34 --- /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 000000000..b2e63b6e3 --- /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 000000000..3d599062a --- /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 000000000..e36fa4e90 --- /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 000000000..2abe0669d --- /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 000000000..7517f9c7b --- /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 000000000..5c841ca57 --- /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 000000000..4baa28a3f --- /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 000000000..8996710ba --- /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 000000000..577e43600 --- /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 000000000..e4962dd8a --- /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 000000000..741945ef2 --- /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 000000000..1cccf5805 --- /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 000000000..aff69744b --- /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 000000000..1762874e4 --- /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 000000000..453e4b8e1 --- /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 000000000..f2126166c --- /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 000000000..4ff1a2ee9 --- /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 000000000..720717d83 --- /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 000000000..aed7fb07a --- /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 000000000..2d7ce5aed --- /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 000000000..fead9ca55 --- /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 000000000..2732fd7a1 --- /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 000000000..ac5d76632 --- /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 000000000..80c3f3846 --- /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 000000000..017c792ff --- /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 000000000..f2a8b2d63 --- /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 000000000..40825895b --- /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 000000000..38d887448 --- /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 000000000..f190db2cc --- /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 000000000..81305dd03 --- /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 000000000..2f5b2559e --- /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 000000000..00b974388 --- /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 000000000..b0a07779b --- /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 000000000..f75561bf4 --- /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 000000000..205baca6f --- /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 000000000..f80a4da61 --- /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 000000000..d406e5fe6 --- /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 000000000..0b68ce0f4 --- /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 000000000..9c7633169 --- /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 000000000..7c905e0f9 --- /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 000000000..767cb2e81 --- /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 000000000..b008ecb3b --- /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 000000000..2e127f4e7 --- /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 000000000..d7909135d --- /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 000000000..d4efe7e85 --- /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 000000000..c06fc3001 --- /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 000000000..66b6f7617 --- /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 000000000..33d848347 --- /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 000000000..2c343a27e --- /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 000000000..071af9d1a --- /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 000000000..981754791 --- /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 000000000..18ded3684 --- /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 000000000..a573c0cf3 --- /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 000000000..01543847e --- /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 000000000..92a628c4a --- /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 000000000..7268b42c3 --- /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 000000000..aa3e0f2d9 --- /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 000000000..1c221784c --- /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 000000000..124393630 --- /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 000000000..e0ecae07a --- /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 000000000..c42007aa6 --- /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 000000000..a1d4e0458 --- /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 000000000..d1c0692d7 --- /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 000000000..588dc50c6 --- /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 000000000..0249540ac --- /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 000000000..ffce6462b --- /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 000000000..96cc789ac --- /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 000000000..ca38966f5 --- /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 000000000..0a01ced20 --- /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 000000000..a3a92f250 --- /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 000000000..5a13b3c0e --- /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 000000000..be0d600fe --- /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 000000000..01e1883e3 --- /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 000000000..b7756855a --- /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 000000000..6453943b9 --- /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 000000000..b66fe999a --- /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 000000000..864d62d6f --- /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 000000000..9a0c24b55 --- /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 000000000..a28abff20 --- /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 000000000..dfd6e6b31 --- /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 000000000..c2cae632b --- /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 000000000..3ddc687f9 --- /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 000000000..737037fa1 --- /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 000000000..4c8f754ef --- /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 000000000..478e6bee6 --- /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 000000000..370986cbc --- /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 000000000..af4c4aa92 --- /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 000000000..9ba9b718a --- /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 000000000..ea688c3a3 --- /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 000000000..01d6b935d --- /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 000000000..a711e2651 --- /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 000000000..da9acca45 --- /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 000000000..2c76ec937 --- /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 000000000..827f4b076 --- /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 000000000..ef6565ceb --- /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 000000000..f03685d5c --- /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 000000000..f936b748e --- /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 000000000..fc13f47c5 --- /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 000000000..dbdb1858e --- /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 index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/__init__.py +++ b/zuul/ansible/base/__init__.py diff --git a/zuul/ansible/actiongeneral/__init__.py b/zuul/ansible/base/action/__init__.py index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/actiongeneral/__init__.py +++ b/zuul/ansible/base/action/__init__.py diff --git a/zuul/ansible/action/add_host.py b/zuul/ansible/base/action/add_host.py index 28e74b155..28e74b155 100644 --- a/zuul/ansible/action/add_host.py +++ b/zuul/ansible/base/action/add_host.py diff --git a/zuul/ansible/action/add_host.pyi b/zuul/ansible/base/action/add_host.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/add_host.pyi +++ b/zuul/ansible/base/action/add_host.pyi diff --git a/zuul/ansible/action/aireos.py b/zuul/ansible/base/action/aireos.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/aireos.py +++ b/zuul/ansible/base/action/aireos.py diff --git a/zuul/ansible/action/aireos.pyi b/zuul/ansible/base/action/aireos.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/aireos.pyi +++ b/zuul/ansible/base/action/aireos.pyi diff --git a/zuul/ansible/action/aireos_config.py b/zuul/ansible/base/action/aireos_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/aireos_config.py +++ b/zuul/ansible/base/action/aireos_config.py diff --git a/zuul/ansible/action/aireos_config.pyi b/zuul/ansible/base/action/aireos_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/aireos_config.pyi +++ b/zuul/ansible/base/action/aireos_config.pyi diff --git a/zuul/ansible/action/aruba.py b/zuul/ansible/base/action/aruba.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/aruba.py +++ b/zuul/ansible/base/action/aruba.py diff --git a/zuul/ansible/action/aruba.pyi b/zuul/ansible/base/action/aruba.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/aruba.pyi +++ b/zuul/ansible/base/action/aruba.pyi diff --git a/zuul/ansible/action/aruba_config.py b/zuul/ansible/base/action/aruba_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/aruba_config.py +++ b/zuul/ansible/base/action/aruba_config.py diff --git a/zuul/ansible/action/aruba_config.pyi b/zuul/ansible/base/action/aruba_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/aruba_config.pyi +++ b/zuul/ansible/base/action/aruba_config.pyi diff --git a/zuul/ansible/action/asa.py b/zuul/ansible/base/action/asa.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/asa.py +++ b/zuul/ansible/base/action/asa.py diff --git a/zuul/ansible/action/asa.pyi b/zuul/ansible/base/action/asa.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/asa.pyi +++ b/zuul/ansible/base/action/asa.pyi diff --git a/zuul/ansible/action/asa_config.py b/zuul/ansible/base/action/asa_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/asa_config.py +++ b/zuul/ansible/base/action/asa_config.py diff --git a/zuul/ansible/action/asa_config.pyi b/zuul/ansible/base/action/asa_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/asa_config.pyi +++ b/zuul/ansible/base/action/asa_config.pyi diff --git a/zuul/ansible/action/asa_template.py b/zuul/ansible/base/action/asa_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/asa_template.py +++ b/zuul/ansible/base/action/asa_template.py diff --git a/zuul/ansible/action/asa_template.pyi b/zuul/ansible/base/action/asa_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/asa_template.pyi +++ b/zuul/ansible/base/action/asa_template.pyi diff --git a/zuul/ansible/action/assemble.py b/zuul/ansible/base/action/assemble.py index 139ed7da4..139ed7da4 100644 --- a/zuul/ansible/action/assemble.py +++ b/zuul/ansible/base/action/assemble.py diff --git a/zuul/ansible/action/assemble.pyi b/zuul/ansible/base/action/assemble.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/assemble.pyi +++ b/zuul/ansible/base/action/assemble.pyi diff --git a/zuul/ansible/action/ce.py b/zuul/ansible/base/action/ce.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/ce.py +++ b/zuul/ansible/base/action/ce.py diff --git a/zuul/ansible/action/ce.pyi b/zuul/ansible/base/action/ce.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/ce.pyi +++ b/zuul/ansible/base/action/ce.pyi diff --git a/zuul/ansible/action/ce_config.py b/zuul/ansible/base/action/ce_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/ce_config.py +++ b/zuul/ansible/base/action/ce_config.py diff --git a/zuul/ansible/action/ce_config.pyi b/zuul/ansible/base/action/ce_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/ce_config.pyi +++ b/zuul/ansible/base/action/ce_config.pyi diff --git a/zuul/ansible/action/ce_template.py b/zuul/ansible/base/action/ce_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/ce_template.py +++ b/zuul/ansible/base/action/ce_template.py diff --git a/zuul/ansible/action/ce_template.pyi b/zuul/ansible/base/action/ce_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/ce_template.pyi +++ b/zuul/ansible/base/action/ce_template.pyi diff --git a/zuul/ansible/action/copy.py b/zuul/ansible/base/action/copy.py index e8927ce9e..e8927ce9e 100644 --- a/zuul/ansible/action/copy.py +++ b/zuul/ansible/base/action/copy.py diff --git a/zuul/ansible/action/copy.pyi b/zuul/ansible/base/action/copy.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/copy.pyi +++ b/zuul/ansible/base/action/copy.pyi diff --git a/zuul/ansible/action/dellos10_config.py b/zuul/ansible/base/action/dellos10_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/dellos10_config.py +++ b/zuul/ansible/base/action/dellos10_config.py diff --git a/zuul/ansible/action/dellos10_config.pyi b/zuul/ansible/base/action/dellos10_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/dellos10_config.pyi +++ b/zuul/ansible/base/action/dellos10_config.pyi diff --git a/zuul/ansible/action/dellos6_config.py b/zuul/ansible/base/action/dellos6_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/dellos6_config.py +++ b/zuul/ansible/base/action/dellos6_config.py diff --git a/zuul/ansible/action/dellos6_config.pyi b/zuul/ansible/base/action/dellos6_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/dellos6_config.pyi +++ b/zuul/ansible/base/action/dellos6_config.pyi diff --git a/zuul/ansible/action/dellos9_config.py b/zuul/ansible/base/action/dellos9_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/dellos9_config.py +++ b/zuul/ansible/base/action/dellos9_config.py diff --git a/zuul/ansible/action/dellos9_config.pyi b/zuul/ansible/base/action/dellos9_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/dellos9_config.pyi +++ b/zuul/ansible/base/action/dellos9_config.pyi diff --git a/zuul/ansible/action/eos_config.py b/zuul/ansible/base/action/eos_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/eos_config.py +++ b/zuul/ansible/base/action/eos_config.py diff --git a/zuul/ansible/action/eos_config.pyi b/zuul/ansible/base/action/eos_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/eos_config.pyi +++ b/zuul/ansible/base/action/eos_config.pyi diff --git a/zuul/ansible/action/eos_template.py b/zuul/ansible/base/action/eos_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/eos_template.py +++ b/zuul/ansible/base/action/eos_template.py diff --git a/zuul/ansible/action/eos_template.pyi b/zuul/ansible/base/action/eos_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/eos_template.pyi +++ b/zuul/ansible/base/action/eos_template.pyi diff --git a/zuul/ansible/action/fetch.py b/zuul/ansible/base/action/fetch.py index 0d35846e2..0d35846e2 100644 --- a/zuul/ansible/action/fetch.py +++ b/zuul/ansible/base/action/fetch.py diff --git a/zuul/ansible/action/fetch.pyi b/zuul/ansible/base/action/fetch.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/fetch.pyi +++ b/zuul/ansible/base/action/fetch.pyi diff --git a/zuul/ansible/action/fortios_config.py b/zuul/ansible/base/action/fortios_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/fortios_config.py +++ b/zuul/ansible/base/action/fortios_config.py diff --git a/zuul/ansible/action/fortios_config.pyi b/zuul/ansible/base/action/fortios_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/fortios_config.pyi +++ b/zuul/ansible/base/action/fortios_config.pyi diff --git a/zuul/ansible/action/include_vars.py b/zuul/ansible/base/action/include_vars.py index 930e54d50..930e54d50 100644 --- a/zuul/ansible/action/include_vars.py +++ b/zuul/ansible/base/action/include_vars.py diff --git a/zuul/ansible/action/include_vars.pyi b/zuul/ansible/base/action/include_vars.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/include_vars.pyi +++ b/zuul/ansible/base/action/include_vars.pyi diff --git a/zuul/ansible/action/ios_config.py b/zuul/ansible/base/action/ios_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/ios_config.py +++ b/zuul/ansible/base/action/ios_config.py diff --git a/zuul/ansible/action/ios_config.pyi b/zuul/ansible/base/action/ios_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/ios_config.pyi +++ b/zuul/ansible/base/action/ios_config.pyi diff --git a/zuul/ansible/action/ios_template.py b/zuul/ansible/base/action/ios_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/ios_template.py +++ b/zuul/ansible/base/action/ios_template.py diff --git a/zuul/ansible/action/ios_template.pyi b/zuul/ansible/base/action/ios_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/ios_template.pyi +++ b/zuul/ansible/base/action/ios_template.pyi diff --git a/zuul/ansible/action/iosxr_config.py b/zuul/ansible/base/action/iosxr_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/iosxr_config.py +++ b/zuul/ansible/base/action/iosxr_config.py diff --git a/zuul/ansible/action/iosxr_config.pyi b/zuul/ansible/base/action/iosxr_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/iosxr_config.pyi +++ b/zuul/ansible/base/action/iosxr_config.pyi diff --git a/zuul/ansible/action/iosxr_template.py b/zuul/ansible/base/action/iosxr_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/iosxr_template.py +++ b/zuul/ansible/base/action/iosxr_template.py diff --git a/zuul/ansible/action/iosxr_template.pyi b/zuul/ansible/base/action/iosxr_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/iosxr_template.pyi +++ b/zuul/ansible/base/action/iosxr_template.pyi diff --git a/zuul/ansible/action/junos_config.py b/zuul/ansible/base/action/junos_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/junos_config.py +++ b/zuul/ansible/base/action/junos_config.py diff --git a/zuul/ansible/action/junos_config.pyi b/zuul/ansible/base/action/junos_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/junos_config.pyi +++ b/zuul/ansible/base/action/junos_config.pyi diff --git a/zuul/ansible/action/junos_template.py b/zuul/ansible/base/action/junos_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/junos_template.py +++ b/zuul/ansible/base/action/junos_template.py diff --git a/zuul/ansible/action/junos_template.pyi b/zuul/ansible/base/action/junos_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/junos_template.pyi +++ b/zuul/ansible/base/action/junos_template.pyi diff --git a/zuul/ansible/action/net_banner.py b/zuul/ansible/base/action/net_banner.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_banner.py +++ b/zuul/ansible/base/action/net_banner.py diff --git a/zuul/ansible/action/net_banner.pyi b/zuul/ansible/base/action/net_banner.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_banner.pyi +++ b/zuul/ansible/base/action/net_banner.pyi diff --git a/zuul/ansible/action/net_base.py b/zuul/ansible/base/action/net_base.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_base.py +++ b/zuul/ansible/base/action/net_base.py diff --git a/zuul/ansible/action/net_base.pyi b/zuul/ansible/base/action/net_base.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_base.pyi +++ b/zuul/ansible/base/action/net_base.pyi diff --git a/zuul/ansible/action/net_config.py b/zuul/ansible/base/action/net_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_config.py +++ b/zuul/ansible/base/action/net_config.py diff --git a/zuul/ansible/action/net_config.pyi b/zuul/ansible/base/action/net_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_config.pyi +++ b/zuul/ansible/base/action/net_config.pyi diff --git a/zuul/ansible/action/net_interface.py b/zuul/ansible/base/action/net_interface.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_interface.py +++ b/zuul/ansible/base/action/net_interface.py diff --git a/zuul/ansible/action/net_interface.pyi b/zuul/ansible/base/action/net_interface.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_interface.pyi +++ b/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 index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_l2_interface.py +++ b/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 index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_l2_interface.pyi +++ b/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 index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_l3_interface.py +++ b/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 index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_l3_interface.pyi +++ b/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 index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_linkagg.py +++ b/zuul/ansible/base/action/net_linkagg.py diff --git a/zuul/ansible/action/net_linkagg.pyi b/zuul/ansible/base/action/net_linkagg.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_linkagg.pyi +++ b/zuul/ansible/base/action/net_linkagg.pyi diff --git a/zuul/ansible/action/net_lldp.py b/zuul/ansible/base/action/net_lldp.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_lldp.py +++ b/zuul/ansible/base/action/net_lldp.py diff --git a/zuul/ansible/action/net_lldp.pyi b/zuul/ansible/base/action/net_lldp.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_lldp.pyi +++ b/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 index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_lldp_interface.py +++ b/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 index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_lldp_interface.pyi +++ b/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 index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_logging.py +++ b/zuul/ansible/base/action/net_logging.py diff --git a/zuul/ansible/action/net_logging.pyi b/zuul/ansible/base/action/net_logging.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_logging.pyi +++ b/zuul/ansible/base/action/net_logging.pyi diff --git a/zuul/ansible/action/net_ping.py b/zuul/ansible/base/action/net_ping.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_ping.py +++ b/zuul/ansible/base/action/net_ping.py diff --git a/zuul/ansible/action/net_ping.pyi b/zuul/ansible/base/action/net_ping.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_ping.pyi +++ b/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 index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_static_route.py +++ b/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 index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_static_route.pyi +++ b/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 index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_system.py +++ b/zuul/ansible/base/action/net_system.py diff --git a/zuul/ansible/action/net_system.pyi b/zuul/ansible/base/action/net_system.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_system.pyi +++ b/zuul/ansible/base/action/net_system.pyi diff --git a/zuul/ansible/action/net_template.py b/zuul/ansible/base/action/net_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_template.py +++ b/zuul/ansible/base/action/net_template.py diff --git a/zuul/ansible/action/net_template.pyi b/zuul/ansible/base/action/net_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_template.pyi +++ b/zuul/ansible/base/action/net_template.pyi diff --git a/zuul/ansible/action/net_user.py b/zuul/ansible/base/action/net_user.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_user.py +++ b/zuul/ansible/base/action/net_user.py diff --git a/zuul/ansible/action/net_user.pyi b/zuul/ansible/base/action/net_user.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_user.pyi +++ b/zuul/ansible/base/action/net_user.pyi diff --git a/zuul/ansible/action/net_vlan.py b/zuul/ansible/base/action/net_vlan.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_vlan.py +++ b/zuul/ansible/base/action/net_vlan.py diff --git a/zuul/ansible/action/net_vlan.pyi b/zuul/ansible/base/action/net_vlan.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_vlan.pyi +++ b/zuul/ansible/base/action/net_vlan.pyi diff --git a/zuul/ansible/action/net_vrf.py b/zuul/ansible/base/action/net_vrf.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/net_vrf.py +++ b/zuul/ansible/base/action/net_vrf.py diff --git a/zuul/ansible/action/net_vrf.pyi b/zuul/ansible/base/action/net_vrf.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/net_vrf.pyi +++ b/zuul/ansible/base/action/net_vrf.pyi diff --git a/zuul/ansible/action/netconf_config.py b/zuul/ansible/base/action/netconf_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/netconf_config.py +++ b/zuul/ansible/base/action/netconf_config.py diff --git a/zuul/ansible/action/netconf_config.pyi b/zuul/ansible/base/action/netconf_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/netconf_config.pyi +++ b/zuul/ansible/base/action/netconf_config.pyi diff --git a/zuul/ansible/action/network.py b/zuul/ansible/base/action/network.py index 41fc56033..41fc56033 100644 --- a/zuul/ansible/action/network.py +++ b/zuul/ansible/base/action/network.py diff --git a/zuul/ansible/action/network.pyi b/zuul/ansible/base/action/network.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/network.pyi +++ b/zuul/ansible/base/action/network.pyi diff --git a/zuul/ansible/action/normal.py b/zuul/ansible/base/action/normal.py index 3230a708c..3230a708c 100644 --- a/zuul/ansible/action/normal.py +++ b/zuul/ansible/base/action/normal.py diff --git a/zuul/ansible/action/normal.pyi b/zuul/ansible/base/action/normal.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/normal.pyi +++ b/zuul/ansible/base/action/normal.pyi diff --git a/zuul/ansible/action/nxos_config.py b/zuul/ansible/base/action/nxos_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/nxos_config.py +++ b/zuul/ansible/base/action/nxos_config.py diff --git a/zuul/ansible/action/nxos_config.pyi b/zuul/ansible/base/action/nxos_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/nxos_config.pyi +++ b/zuul/ansible/base/action/nxos_config.pyi diff --git a/zuul/ansible/action/nxos_template.py b/zuul/ansible/base/action/nxos_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/nxos_template.py +++ b/zuul/ansible/base/action/nxos_template.py diff --git a/zuul/ansible/action/nxos_template.pyi b/zuul/ansible/base/action/nxos_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/nxos_template.pyi +++ b/zuul/ansible/base/action/nxos_template.pyi diff --git a/zuul/ansible/action/ops_config.py b/zuul/ansible/base/action/ops_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/ops_config.py +++ b/zuul/ansible/base/action/ops_config.py diff --git a/zuul/ansible/action/ops_config.pyi b/zuul/ansible/base/action/ops_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/ops_config.pyi +++ b/zuul/ansible/base/action/ops_config.pyi diff --git a/zuul/ansible/action/ops_template.py b/zuul/ansible/base/action/ops_template.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/ops_template.py +++ b/zuul/ansible/base/action/ops_template.py diff --git a/zuul/ansible/action/ops_template.pyi b/zuul/ansible/base/action/ops_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/ops_template.pyi +++ b/zuul/ansible/base/action/ops_template.pyi diff --git a/zuul/ansible/action/patch.py b/zuul/ansible/base/action/patch.py index 098d4819c..098d4819c 100644 --- a/zuul/ansible/action/patch.py +++ b/zuul/ansible/base/action/patch.py diff --git a/zuul/ansible/action/patch.pyi b/zuul/ansible/base/action/patch.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/patch.pyi +++ b/zuul/ansible/base/action/patch.pyi diff --git a/zuul/ansible/action/raw.py b/zuul/ansible/base/action/raw.py index fb1e1a6e3..fb1e1a6e3 100644 --- a/zuul/ansible/action/raw.py +++ b/zuul/ansible/base/action/raw.py diff --git a/zuul/ansible/action/raw.pyi b/zuul/ansible/base/action/raw.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/raw.pyi +++ b/zuul/ansible/base/action/raw.pyi diff --git a/zuul/ansible/action/script.py b/zuul/ansible/base/action/script.py index 9fc38cc96..9fc38cc96 100644 --- a/zuul/ansible/action/script.py +++ b/zuul/ansible/base/action/script.py diff --git a/zuul/ansible/action/script.pyi b/zuul/ansible/base/action/script.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/script.pyi +++ b/zuul/ansible/base/action/script.pyi diff --git a/zuul/ansible/action/sros_config.py b/zuul/ansible/base/action/sros_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/sros_config.py +++ b/zuul/ansible/base/action/sros_config.py diff --git a/zuul/ansible/action/sros_config.pyi b/zuul/ansible/base/action/sros_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/sros_config.pyi +++ b/zuul/ansible/base/action/sros_config.pyi diff --git a/zuul/ansible/action/synchronize.py b/zuul/ansible/base/action/synchronize.py index b07ba79be..b07ba79be 100644 --- a/zuul/ansible/action/synchronize.py +++ b/zuul/ansible/base/action/synchronize.py diff --git a/zuul/ansible/action/synchronize.pyi b/zuul/ansible/base/action/synchronize.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/synchronize.pyi +++ b/zuul/ansible/base/action/synchronize.pyi diff --git a/zuul/ansible/action/template.py b/zuul/ansible/base/action/template.py index 5f0e5602c..5f0e5602c 100644 --- a/zuul/ansible/action/template.py +++ b/zuul/ansible/base/action/template.py diff --git a/zuul/ansible/action/template.pyi b/zuul/ansible/base/action/template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/template.pyi +++ b/zuul/ansible/base/action/template.pyi diff --git a/zuul/ansible/action/unarchive.py b/zuul/ansible/base/action/unarchive.py index 9eb9bb544..9eb9bb544 100644 --- a/zuul/ansible/action/unarchive.py +++ b/zuul/ansible/base/action/unarchive.py diff --git a/zuul/ansible/action/unarchive.pyi b/zuul/ansible/base/action/unarchive.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/unarchive.pyi +++ b/zuul/ansible/base/action/unarchive.pyi diff --git a/zuul/ansible/action/vyos_config.py b/zuul/ansible/base/action/vyos_config.py index 7a739baa2..7a739baa2 120000 --- a/zuul/ansible/action/vyos_config.py +++ b/zuul/ansible/base/action/vyos_config.py diff --git a/zuul/ansible/action/vyos_config.pyi b/zuul/ansible/base/action/vyos_config.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/vyos_config.pyi +++ b/zuul/ansible/base/action/vyos_config.pyi diff --git a/zuul/ansible/action/win_copy.py b/zuul/ansible/base/action/win_copy.py index d9dbe4dc8..d9dbe4dc8 100644 --- a/zuul/ansible/action/win_copy.py +++ b/zuul/ansible/base/action/win_copy.py diff --git a/zuul/ansible/action/win_copy.pyi b/zuul/ansible/base/action/win_copy.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/win_copy.pyi +++ b/zuul/ansible/base/action/win_copy.pyi diff --git a/zuul/ansible/action/win_template.py b/zuul/ansible/base/action/win_template.py index 36b475aea..36b475aea 100644 --- a/zuul/ansible/action/win_template.py +++ b/zuul/ansible/base/action/win_template.py diff --git a/zuul/ansible/action/win_template.pyi b/zuul/ansible/base/action/win_template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/action/win_template.pyi +++ b/zuul/ansible/base/action/win_template.pyi diff --git a/zuul/ansible/callback/__init__.py b/zuul/ansible/base/actiongeneral/__init__.py index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/callback/__init__.py +++ b/zuul/ansible/base/actiongeneral/__init__.py diff --git a/zuul/ansible/actiongeneral/command.py b/zuul/ansible/base/actiongeneral/command.py index f9b976ca0..f9b976ca0 100644 --- a/zuul/ansible/actiongeneral/command.py +++ b/zuul/ansible/base/actiongeneral/command.py diff --git a/zuul/ansible/actiongeneral/command.pyi b/zuul/ansible/base/actiongeneral/command.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/actiongeneral/command.pyi +++ b/zuul/ansible/base/actiongeneral/command.pyi diff --git a/zuul/ansible/actiongeneral/zuul_return.py b/zuul/ansible/base/actiongeneral/zuul_return.py index badd03bb1..badd03bb1 100644 --- a/zuul/ansible/actiongeneral/zuul_return.py +++ b/zuul/ansible/base/actiongeneral/zuul_return.py diff --git a/zuul/ansible/filter/__init__.py b/zuul/ansible/base/callback/__init__.py index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/filter/__init__.py +++ b/zuul/ansible/base/callback/__init__.py diff --git a/zuul/ansible/callback/zuul_json.py b/zuul/ansible/base/callback/zuul_json.py index e52e2e24d..e52e2e24d 100644 --- a/zuul/ansible/callback/zuul_json.py +++ b/zuul/ansible/base/callback/zuul_json.py diff --git a/zuul/ansible/callback/zuul_stream.py b/zuul/ansible/base/callback/zuul_stream.py index 966c9008c..966c9008c 100644 --- a/zuul/ansible/callback/zuul_stream.py +++ b/zuul/ansible/base/callback/zuul_stream.py diff --git a/zuul/ansible/callback/zuul_unreachable.py b/zuul/ansible/base/callback/zuul_unreachable.py index 8c7b85f43..8c7b85f43 100644 --- a/zuul/ansible/callback/zuul_unreachable.py +++ b/zuul/ansible/base/callback/zuul_unreachable.py diff --git a/zuul/ansible/library/__init__.py b/zuul/ansible/base/filter/__init__.py index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/library/__init__.py +++ b/zuul/ansible/base/filter/__init__.py diff --git a/zuul/ansible/filter/zuul_filters.py b/zuul/ansible/base/filter/zuul_filters.py index fa21f6bd5..fa21f6bd5 100644 --- a/zuul/ansible/filter/zuul_filters.py +++ b/zuul/ansible/base/filter/zuul_filters.py diff --git a/zuul/ansible/lookup/__init__.py b/zuul/ansible/base/library/__init__.py index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/__init__.py +++ b/zuul/ansible/base/library/__init__.py diff --git a/zuul/ansible/library/command.py b/zuul/ansible/base/library/command.py index db186788c..db186788c 100755 --- a/zuul/ansible/library/command.py +++ b/zuul/ansible/base/library/command.py diff --git a/zuul/ansible/library/zuul_console.py b/zuul/ansible/base/library/zuul_console.py index d119c5259..d119c5259 100644 --- a/zuul/ansible/library/zuul_console.py +++ b/zuul/ansible/base/library/zuul_console.py diff --git a/zuul/ansible/lookup/_banned.pyi b/zuul/ansible/base/lookup/__init__.py index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/_banned.pyi +++ b/zuul/ansible/base/lookup/__init__.py diff --git a/zuul/ansible/lookup/_banned.py b/zuul/ansible/base/lookup/_banned.py index 65708f80d..65708f80d 100644 --- a/zuul/ansible/lookup/_banned.py +++ b/zuul/ansible/base/lookup/_banned.py diff --git a/zuul/ansible/lookup/chef_databag.pyi b/zuul/ansible/base/lookup/_banned.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/chef_databag.pyi +++ b/zuul/ansible/base/lookup/_banned.pyi diff --git a/zuul/ansible/lookup/chef_databag.py b/zuul/ansible/base/lookup/chef_databag.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/chef_databag.py +++ b/zuul/ansible/base/lookup/chef_databag.py diff --git a/zuul/ansible/lookup/consul_kv.pyi b/zuul/ansible/base/lookup/chef_databag.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/consul_kv.pyi +++ b/zuul/ansible/base/lookup/chef_databag.pyi diff --git a/zuul/ansible/lookup/consul_kv.py b/zuul/ansible/base/lookup/consul_kv.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/consul_kv.py +++ b/zuul/ansible/base/lookup/consul_kv.py diff --git a/zuul/ansible/lookup/credstash.pyi b/zuul/ansible/base/lookup/consul_kv.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/credstash.pyi +++ b/zuul/ansible/base/lookup/consul_kv.pyi diff --git a/zuul/ansible/lookup/credstash.py b/zuul/ansible/base/lookup/credstash.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/credstash.py +++ b/zuul/ansible/base/lookup/credstash.py diff --git a/zuul/ansible/lookup/csvfile.pyi b/zuul/ansible/base/lookup/credstash.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/csvfile.pyi +++ b/zuul/ansible/base/lookup/credstash.pyi diff --git a/zuul/ansible/lookup/csvfile.py b/zuul/ansible/base/lookup/csvfile.py index 0d5136931..0d5136931 100644 --- a/zuul/ansible/lookup/csvfile.py +++ b/zuul/ansible/base/lookup/csvfile.py diff --git a/zuul/ansible/lookup/cyberarkpassword.pyi b/zuul/ansible/base/lookup/csvfile.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/cyberarkpassword.pyi +++ b/zuul/ansible/base/lookup/csvfile.pyi diff --git a/zuul/ansible/lookup/cyberarkpassword.py b/zuul/ansible/base/lookup/cyberarkpassword.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/cyberarkpassword.py +++ b/zuul/ansible/base/lookup/cyberarkpassword.py diff --git a/zuul/ansible/lookup/dig.pyi b/zuul/ansible/base/lookup/cyberarkpassword.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/dig.pyi +++ b/zuul/ansible/base/lookup/cyberarkpassword.pyi diff --git a/zuul/ansible/lookup/dig.py b/zuul/ansible/base/lookup/dig.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/dig.py +++ b/zuul/ansible/base/lookup/dig.py diff --git a/zuul/ansible/lookup/dnstxt.pyi b/zuul/ansible/base/lookup/dig.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/dnstxt.pyi +++ b/zuul/ansible/base/lookup/dig.pyi diff --git a/zuul/ansible/lookup/dnstxt.py b/zuul/ansible/base/lookup/dnstxt.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/dnstxt.py +++ b/zuul/ansible/base/lookup/dnstxt.py diff --git a/zuul/ansible/lookup/env.pyi b/zuul/ansible/base/lookup/dnstxt.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/env.pyi +++ b/zuul/ansible/base/lookup/dnstxt.pyi diff --git a/zuul/ansible/lookup/env.py b/zuul/ansible/base/lookup/env.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/env.py +++ b/zuul/ansible/base/lookup/env.py diff --git a/zuul/ansible/lookup/etcd.pyi b/zuul/ansible/base/lookup/env.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/etcd.pyi +++ b/zuul/ansible/base/lookup/env.pyi diff --git a/zuul/ansible/lookup/etcd.py b/zuul/ansible/base/lookup/etcd.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/etcd.py +++ b/zuul/ansible/base/lookup/etcd.py diff --git a/zuul/ansible/lookup/file.pyi b/zuul/ansible/base/lookup/etcd.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/file.pyi +++ b/zuul/ansible/base/lookup/etcd.pyi diff --git a/zuul/ansible/lookup/file.py b/zuul/ansible/base/lookup/file.py index 904837003..904837003 100644 --- a/zuul/ansible/lookup/file.py +++ b/zuul/ansible/base/lookup/file.py diff --git a/zuul/ansible/lookup/fileglob.pyi b/zuul/ansible/base/lookup/file.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/fileglob.pyi +++ b/zuul/ansible/base/lookup/file.pyi diff --git a/zuul/ansible/lookup/fileglob.py b/zuul/ansible/base/lookup/fileglob.py index 8d6b88120..8d6b88120 100644 --- a/zuul/ansible/lookup/fileglob.py +++ b/zuul/ansible/base/lookup/fileglob.py diff --git a/zuul/ansible/lookup/filetree.pyi b/zuul/ansible/base/lookup/fileglob.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/filetree.pyi +++ b/zuul/ansible/base/lookup/fileglob.pyi diff --git a/zuul/ansible/lookup/filetree.py b/zuul/ansible/base/lookup/filetree.py index 490dc384c..490dc384c 100644 --- a/zuul/ansible/lookup/filetree.py +++ b/zuul/ansible/base/lookup/filetree.py diff --git a/zuul/ansible/lookup/first_found.pyi b/zuul/ansible/base/lookup/filetree.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/first_found.pyi +++ b/zuul/ansible/base/lookup/filetree.pyi diff --git a/zuul/ansible/lookup/first_found.py b/zuul/ansible/base/lookup/first_found.py index 264296ebf..264296ebf 100644 --- a/zuul/ansible/lookup/first_found.py +++ b/zuul/ansible/base/lookup/first_found.py diff --git a/zuul/ansible/lookup/hashi_valut.pyi b/zuul/ansible/base/lookup/first_found.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/hashi_valut.pyi +++ b/zuul/ansible/base/lookup/first_found.pyi diff --git a/zuul/ansible/lookup/hashi_valut.py b/zuul/ansible/base/lookup/hashi_valut.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/hashi_valut.py +++ b/zuul/ansible/base/lookup/hashi_valut.py diff --git a/zuul/ansible/lookup/hiera.pyi b/zuul/ansible/base/lookup/hashi_valut.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/hiera.pyi +++ b/zuul/ansible/base/lookup/hashi_valut.pyi diff --git a/zuul/ansible/lookup/hiera.py b/zuul/ansible/base/lookup/hiera.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/hiera.py +++ b/zuul/ansible/base/lookup/hiera.py diff --git a/zuul/ansible/lookup/ini.pyi b/zuul/ansible/base/lookup/hiera.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/ini.pyi +++ b/zuul/ansible/base/lookup/hiera.pyi diff --git a/zuul/ansible/lookup/ini.py b/zuul/ansible/base/lookup/ini.py index 83d7b144a..83d7b144a 100644 --- a/zuul/ansible/lookup/ini.py +++ b/zuul/ansible/base/lookup/ini.py diff --git a/zuul/ansible/lookup/keyring.pyi b/zuul/ansible/base/lookup/ini.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/keyring.pyi +++ b/zuul/ansible/base/lookup/ini.pyi diff --git a/zuul/ansible/lookup/keyring.py b/zuul/ansible/base/lookup/keyring.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/keyring.py +++ b/zuul/ansible/base/lookup/keyring.py diff --git a/zuul/ansible/lookup/lastpass.pyi b/zuul/ansible/base/lookup/keyring.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/lastpass.pyi +++ b/zuul/ansible/base/lookup/keyring.pyi diff --git a/zuul/ansible/lookup/lastpass.py b/zuul/ansible/base/lookup/lastpass.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/lastpass.py +++ b/zuul/ansible/base/lookup/lastpass.py diff --git a/zuul/ansible/lookup/lines.pyi b/zuul/ansible/base/lookup/lastpass.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/lines.pyi +++ b/zuul/ansible/base/lookup/lastpass.pyi diff --git a/zuul/ansible/lookup/lines.py b/zuul/ansible/base/lookup/lines.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/lines.py +++ b/zuul/ansible/base/lookup/lines.py diff --git a/zuul/ansible/lookup/mongodb.pyi b/zuul/ansible/base/lookup/lines.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/mongodb.pyi +++ b/zuul/ansible/base/lookup/lines.pyi diff --git a/zuul/ansible/lookup/mongodb.py b/zuul/ansible/base/lookup/mongodb.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/mongodb.py +++ b/zuul/ansible/base/lookup/mongodb.py diff --git a/zuul/ansible/lookup/password.pyi b/zuul/ansible/base/lookup/mongodb.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/password.pyi +++ b/zuul/ansible/base/lookup/mongodb.pyi diff --git a/zuul/ansible/lookup/password.py b/zuul/ansible/base/lookup/password.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/password.py +++ b/zuul/ansible/base/lookup/password.py diff --git a/zuul/ansible/lookup/passwordstore.pyi b/zuul/ansible/base/lookup/password.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/passwordstore.pyi +++ b/zuul/ansible/base/lookup/password.pyi diff --git a/zuul/ansible/lookup/passwordstore.py b/zuul/ansible/base/lookup/passwordstore.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/passwordstore.py +++ b/zuul/ansible/base/lookup/passwordstore.py diff --git a/zuul/ansible/lookup/pipe.pyi b/zuul/ansible/base/lookup/passwordstore.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/pipe.pyi +++ b/zuul/ansible/base/lookup/passwordstore.pyi diff --git a/zuul/ansible/lookup/pipe.py b/zuul/ansible/base/lookup/pipe.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/pipe.py +++ b/zuul/ansible/base/lookup/pipe.py diff --git a/zuul/ansible/lookup/redis_kv.pyi b/zuul/ansible/base/lookup/pipe.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/redis_kv.pyi +++ b/zuul/ansible/base/lookup/pipe.pyi diff --git a/zuul/ansible/lookup/redis_kv.py b/zuul/ansible/base/lookup/redis_kv.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/redis_kv.py +++ b/zuul/ansible/base/lookup/redis_kv.py diff --git a/zuul/ansible/lookup/shelvefile.pyi b/zuul/ansible/base/lookup/redis_kv.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/shelvefile.pyi +++ b/zuul/ansible/base/lookup/redis_kv.pyi diff --git a/zuul/ansible/lookup/shelvefile.py b/zuul/ansible/base/lookup/shelvefile.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/shelvefile.py +++ b/zuul/ansible/base/lookup/shelvefile.py diff --git a/zuul/ansible/lookup/template.pyi b/zuul/ansible/base/lookup/shelvefile.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/template.pyi +++ b/zuul/ansible/base/lookup/shelvefile.pyi diff --git a/zuul/ansible/lookup/template.py b/zuul/ansible/base/lookup/template.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/template.py +++ b/zuul/ansible/base/lookup/template.py diff --git a/zuul/ansible/lookup/url.pyi b/zuul/ansible/base/lookup/template.pyi index e69de29bb..e69de29bb 100644 --- a/zuul/ansible/lookup/url.pyi +++ b/zuul/ansible/base/lookup/template.pyi diff --git a/zuul/ansible/lookup/url.py b/zuul/ansible/base/lookup/url.py index d45b9c405..d45b9c405 120000 --- a/zuul/ansible/lookup/url.py +++ b/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 000000000..e69de29bb --- /dev/null +++ b/zuul/ansible/base/lookup/url.pyi diff --git a/zuul/cmd/manage_ansible.py b/zuul/cmd/manage_ansible.py new file mode 100644 index 000000000..faea40400 --- /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 de7647144..b3bf0119f 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 000000000..982339004 --- /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 000000000..83c0afe04 --- /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 + # <real_prefix>/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 |