diff options
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 |