Manage ansible installations within zuul
As a first step towards supporting multiple ansible versions we need tooling to manage ansible installations. This moves the installation of ansible from the requirements.txt into zuul. This is called as a setup hook to install the ansible versions into <prefix>/lib/zuul/ansible. Further this tooling abstracts knowledge that the executor must know in order to actually run the correct version of ansible. The actual usage of multiple ansible versions will be done in follow-ups. For better maintainability the ansible plugins live in zuul/ansible/base where plugins can be kept in different versions if necessary. For each supported ansible version there is a specific folder that symlinks the according plugins. Change-Id: I5ce1385245c76818777aa34230786a9dbaf723e5 Depends-On: https://review.openstack.org/623927
This commit is contained in:
parent
c91335b527
commit
cd9827e664
14
.zuul.yaml
14
.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
|
||||
|
@ -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
|
||||
|
@ -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]
|
||||
|
@ -1,3 +1,4 @@
|
||||
ansible
|
||||
sphinx>=1.6.1
|
||||
sphinxcontrib-blockdiag>=1.1.0
|
||||
sphinxcontrib-programoutput
|
||||
|
@ -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:
|
||||
|
17
doc/source/admin/examples/playbooks/wait-to-start-gearman.sh
Executable file
17
doc/source/admin/examples/playbooks/wait-to-start-gearman.sh
Executable file
@ -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
|
29
doc/source/admin/examples/playbooks/wait-to-start.sh
Executable file
29
doc/source/admin/examples/playbooks/wait-to-start.sh
Executable file
@ -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
|
@ -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
|
@ -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
|
||||
---------------
|
||||
|
||||
|
@ -43,6 +43,7 @@ required.
|
||||
|
||||
# All:
|
||||
$ sudo pip3 install .
|
||||
$ sudo zuul-manage-ansible
|
||||
$ popd
|
||||
|
||||
Service Files
|
||||
|
@ -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
|
||||
|
@ -6,6 +6,10 @@
|
||||
setup:
|
||||
register: setupvar
|
||||
|
||||
- name: Output ansible version
|
||||
debug:
|
||||
var: ansible_version
|
||||
|
||||
- name: Output debug for a var
|
||||
debug:
|
||||
var: setupvar
|
||||
|
@ -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: |
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
5
tox.ini
5
tox.ini
@ -25,6 +25,7 @@ install_command = pip install {opts} {packages}
|
||||
whitelist_externals = bash
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
commands_pre = zuul-manage-ansible -v
|
||||
commands = stestr run {posargs}
|
||||
stestr slowest
|
||||
|
||||
@ -49,6 +50,7 @@ commands = bindep test
|
||||
# --ignore-missing-imports tells mypy to not try to follow imported modules
|
||||
# out of the current tree. As you might expect, we don't want to run static
|
||||
# type checking on the world - just on ourselves.
|
||||
commands_pre =
|
||||
commands =
|
||||
flake8 {posargs}
|
||||
mypy --ignore-missing-imports zuul
|
||||
@ -67,6 +69,7 @@ commands =
|
||||
[testenv:docs]
|
||||
deps = -r{toxinidir}/doc/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
commands_pre =
|
||||
commands =
|
||||
sphinx-build -E -W -d doc/build/doctrees -b html doc/source/ doc/build/html
|
||||
|
||||
@ -74,10 +77,12 @@ commands =
|
||||
commands = {posargs}
|
||||
|
||||
[testenv:nodepool]
|
||||
commands_pre =
|
||||
install_command = {[nodeenv]install_command}
|
||||
commands = stestr run --concurrency=1 --test-path ./tests/nodepool {posargs}
|
||||
|
||||
[testenv:remote]
|
||||
commands_pre = zuul-manage-ansible -v
|
||||
commands = stestr run --concurrency=1 --test-path ./tests/remote {posargs}
|
||||
passenv = ZUUL_TEST_ROOT OS_STDOUT_CAPTURE OS_STDERR_CAPTURE OS_LOG_CAPTURE OS_LOG_DEFAULTS ZUUL_REMOTE_IPV4 ZUUL_SSH_KEY NODEPOOL_ZK_HOST
|
||||
install_command = {[nodeenv]install_command}
|
||||
|
1
zuul/ansible/2.5/action/__init__.py
Symbolic link
1
zuul/ansible/2.5/action/__init__.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/__init__.py
|
1
zuul/ansible/2.5/action/add_host.py
Symbolic link
1
zuul/ansible/2.5/action/add_host.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/add_host.py
|
1
zuul/ansible/2.5/action/add_host.pyi
Symbolic link
1
zuul/ansible/2.5/action/add_host.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/add_host.pyi
|
1
zuul/ansible/2.5/action/aireos.py
Symbolic link
1
zuul/ansible/2.5/action/aireos.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/aireos.py
|
1
zuul/ansible/2.5/action/aireos.pyi
Symbolic link
1
zuul/ansible/2.5/action/aireos.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/aireos.pyi
|
1
zuul/ansible/2.5/action/aireos_config.py
Symbolic link
1
zuul/ansible/2.5/action/aireos_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/aireos_config.py
|
1
zuul/ansible/2.5/action/aireos_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/aireos_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/aireos_config.pyi
|
1
zuul/ansible/2.5/action/aruba.py
Symbolic link
1
zuul/ansible/2.5/action/aruba.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/aruba.py
|
1
zuul/ansible/2.5/action/aruba.pyi
Symbolic link
1
zuul/ansible/2.5/action/aruba.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/aruba.pyi
|
1
zuul/ansible/2.5/action/aruba_config.py
Symbolic link
1
zuul/ansible/2.5/action/aruba_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/aruba_config.py
|
1
zuul/ansible/2.5/action/aruba_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/aruba_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/aruba_config.pyi
|
1
zuul/ansible/2.5/action/asa.py
Symbolic link
1
zuul/ansible/2.5/action/asa.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/asa.py
|
1
zuul/ansible/2.5/action/asa.pyi
Symbolic link
1
zuul/ansible/2.5/action/asa.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/asa.pyi
|
1
zuul/ansible/2.5/action/asa_config.py
Symbolic link
1
zuul/ansible/2.5/action/asa_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/asa_config.py
|
1
zuul/ansible/2.5/action/asa_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/asa_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/asa_config.pyi
|
1
zuul/ansible/2.5/action/asa_template.py
Symbolic link
1
zuul/ansible/2.5/action/asa_template.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/asa_template.py
|
1
zuul/ansible/2.5/action/asa_template.pyi
Symbolic link
1
zuul/ansible/2.5/action/asa_template.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/asa_template.pyi
|
1
zuul/ansible/2.5/action/assemble.py
Symbolic link
1
zuul/ansible/2.5/action/assemble.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/assemble.py
|
1
zuul/ansible/2.5/action/assemble.pyi
Symbolic link
1
zuul/ansible/2.5/action/assemble.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/assemble.pyi
|
1
zuul/ansible/2.5/action/ce.py
Symbolic link
1
zuul/ansible/2.5/action/ce.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ce.py
|
1
zuul/ansible/2.5/action/ce.pyi
Symbolic link
1
zuul/ansible/2.5/action/ce.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ce.pyi
|
1
zuul/ansible/2.5/action/ce_config.py
Symbolic link
1
zuul/ansible/2.5/action/ce_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ce_config.py
|
1
zuul/ansible/2.5/action/ce_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/ce_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ce_config.pyi
|
1
zuul/ansible/2.5/action/ce_template.py
Symbolic link
1
zuul/ansible/2.5/action/ce_template.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ce_template.py
|
1
zuul/ansible/2.5/action/ce_template.pyi
Symbolic link
1
zuul/ansible/2.5/action/ce_template.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ce_template.pyi
|
1
zuul/ansible/2.5/action/copy.py
Symbolic link
1
zuul/ansible/2.5/action/copy.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/copy.py
|
1
zuul/ansible/2.5/action/copy.pyi
Symbolic link
1
zuul/ansible/2.5/action/copy.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/copy.pyi
|
1
zuul/ansible/2.5/action/dellos10_config.py
Symbolic link
1
zuul/ansible/2.5/action/dellos10_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/dellos10_config.py
|
1
zuul/ansible/2.5/action/dellos10_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/dellos10_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/dellos10_config.pyi
|
1
zuul/ansible/2.5/action/dellos6_config.py
Symbolic link
1
zuul/ansible/2.5/action/dellos6_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/dellos6_config.py
|
1
zuul/ansible/2.5/action/dellos6_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/dellos6_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/dellos6_config.pyi
|
1
zuul/ansible/2.5/action/dellos9_config.py
Symbolic link
1
zuul/ansible/2.5/action/dellos9_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/dellos9_config.py
|
1
zuul/ansible/2.5/action/dellos9_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/dellos9_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/dellos9_config.pyi
|
1
zuul/ansible/2.5/action/eos_config.py
Symbolic link
1
zuul/ansible/2.5/action/eos_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/eos_config.py
|
1
zuul/ansible/2.5/action/eos_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/eos_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/eos_config.pyi
|
1
zuul/ansible/2.5/action/eos_template.py
Symbolic link
1
zuul/ansible/2.5/action/eos_template.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/eos_template.py
|
1
zuul/ansible/2.5/action/eos_template.pyi
Symbolic link
1
zuul/ansible/2.5/action/eos_template.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/eos_template.pyi
|
1
zuul/ansible/2.5/action/fetch.py
Symbolic link
1
zuul/ansible/2.5/action/fetch.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/fetch.py
|
1
zuul/ansible/2.5/action/fetch.pyi
Symbolic link
1
zuul/ansible/2.5/action/fetch.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/fetch.pyi
|
1
zuul/ansible/2.5/action/fortios_config.py
Symbolic link
1
zuul/ansible/2.5/action/fortios_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/fortios_config.py
|
1
zuul/ansible/2.5/action/fortios_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/fortios_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/fortios_config.pyi
|
1
zuul/ansible/2.5/action/include_vars.py
Symbolic link
1
zuul/ansible/2.5/action/include_vars.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/include_vars.py
|
1
zuul/ansible/2.5/action/include_vars.pyi
Symbolic link
1
zuul/ansible/2.5/action/include_vars.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/include_vars.pyi
|
1
zuul/ansible/2.5/action/ios_config.py
Symbolic link
1
zuul/ansible/2.5/action/ios_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ios_config.py
|
1
zuul/ansible/2.5/action/ios_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/ios_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ios_config.pyi
|
1
zuul/ansible/2.5/action/ios_template.py
Symbolic link
1
zuul/ansible/2.5/action/ios_template.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ios_template.py
|
1
zuul/ansible/2.5/action/ios_template.pyi
Symbolic link
1
zuul/ansible/2.5/action/ios_template.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/ios_template.pyi
|
1
zuul/ansible/2.5/action/iosxr_config.py
Symbolic link
1
zuul/ansible/2.5/action/iosxr_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/iosxr_config.py
|
1
zuul/ansible/2.5/action/iosxr_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/iosxr_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/iosxr_config.pyi
|
1
zuul/ansible/2.5/action/iosxr_template.py
Symbolic link
1
zuul/ansible/2.5/action/iosxr_template.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/iosxr_template.py
|
1
zuul/ansible/2.5/action/iosxr_template.pyi
Symbolic link
1
zuul/ansible/2.5/action/iosxr_template.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/iosxr_template.pyi
|
1
zuul/ansible/2.5/action/junos_config.py
Symbolic link
1
zuul/ansible/2.5/action/junos_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/junos_config.py
|
1
zuul/ansible/2.5/action/junos_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/junos_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/junos_config.pyi
|
1
zuul/ansible/2.5/action/junos_template.py
Symbolic link
1
zuul/ansible/2.5/action/junos_template.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/junos_template.py
|
1
zuul/ansible/2.5/action/junos_template.pyi
Symbolic link
1
zuul/ansible/2.5/action/junos_template.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/junos_template.pyi
|
1
zuul/ansible/2.5/action/net_banner.py
Symbolic link
1
zuul/ansible/2.5/action/net_banner.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_banner.py
|
1
zuul/ansible/2.5/action/net_banner.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_banner.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_banner.pyi
|
1
zuul/ansible/2.5/action/net_base.py
Symbolic link
1
zuul/ansible/2.5/action/net_base.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_base.py
|
1
zuul/ansible/2.5/action/net_base.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_base.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_base.pyi
|
1
zuul/ansible/2.5/action/net_config.py
Symbolic link
1
zuul/ansible/2.5/action/net_config.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_config.py
|
1
zuul/ansible/2.5/action/net_config.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_config.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_config.pyi
|
1
zuul/ansible/2.5/action/net_interface.py
Symbolic link
1
zuul/ansible/2.5/action/net_interface.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_interface.py
|
1
zuul/ansible/2.5/action/net_interface.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_interface.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_interface.pyi
|
1
zuul/ansible/2.5/action/net_l2_interface.py
Symbolic link
1
zuul/ansible/2.5/action/net_l2_interface.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_l2_interface.py
|
1
zuul/ansible/2.5/action/net_l2_interface.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_l2_interface.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_l2_interface.pyi
|
1
zuul/ansible/2.5/action/net_l3_interface.py
Symbolic link
1
zuul/ansible/2.5/action/net_l3_interface.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_l3_interface.py
|
1
zuul/ansible/2.5/action/net_l3_interface.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_l3_interface.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_l3_interface.pyi
|
1
zuul/ansible/2.5/action/net_linkagg.py
Symbolic link
1
zuul/ansible/2.5/action/net_linkagg.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_linkagg.py
|
1
zuul/ansible/2.5/action/net_linkagg.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_linkagg.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_linkagg.pyi
|
1
zuul/ansible/2.5/action/net_lldp.py
Symbolic link
1
zuul/ansible/2.5/action/net_lldp.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_lldp.py
|
1
zuul/ansible/2.5/action/net_lldp.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_lldp.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_lldp.pyi
|
1
zuul/ansible/2.5/action/net_lldp_interface.py
Symbolic link
1
zuul/ansible/2.5/action/net_lldp_interface.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_lldp_interface.py
|
1
zuul/ansible/2.5/action/net_lldp_interface.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_lldp_interface.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_lldp_interface.pyi
|
1
zuul/ansible/2.5/action/net_logging.py
Symbolic link
1
zuul/ansible/2.5/action/net_logging.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_logging.py
|
1
zuul/ansible/2.5/action/net_logging.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_logging.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_logging.pyi
|
1
zuul/ansible/2.5/action/net_ping.py
Symbolic link
1
zuul/ansible/2.5/action/net_ping.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_ping.py
|
1
zuul/ansible/2.5/action/net_ping.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_ping.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_ping.pyi
|
1
zuul/ansible/2.5/action/net_static_route.py
Symbolic link
1
zuul/ansible/2.5/action/net_static_route.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_static_route.py
|
1
zuul/ansible/2.5/action/net_static_route.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_static_route.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_static_route.pyi
|
1
zuul/ansible/2.5/action/net_system.py
Symbolic link
1
zuul/ansible/2.5/action/net_system.py
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_system.py
|
1
zuul/ansible/2.5/action/net_system.pyi
Symbolic link
1
zuul/ansible/2.5/action/net_system.pyi
Symbolic link
@ -0,0 +1 @@
|
||||
../../base/action/net_system.pyi
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user