Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

get_url failes to recognize checksum format with url #48847

Closed
lucastheisen opened this issue Nov 17, 2018 · 7 comments
Closed

get_url failes to recognize checksum format with url #48847

lucastheisen opened this issue Nov 17, 2018 · 7 comments
Labels
affects_2.7 This issue/PR affects Ansible v2.7 bug This issue/PR relates to a bug. module This issue/PR relates to a module. net_tools Net-tools category support:core This issue/PR relates to code supported by the Ansible Engineering Team. traceback This issue/PR includes a traceback.

Comments

@lucastheisen
Copy link

SUMMARY

I am attempting to install golang using the guidelines from their documentation. One of my steps is to download the official tarball:

---
- hosts: localhost
  connection: local

  vars:
    wsl_golang_download_url_checksum_algorithm: sha256
    wsl_golang_archive: go1.11.2.linux-amd64.tar.gz
    wsl_golang_download_url: "https://dl.google.com/go/{{ wsl_golang_archive }}"

  tasks:

  - name: Download wsl_golang
    get_url:
      checksum: "{{ wsl_golang_download_url_checksum_algorithm }}:{{ wsl_golang_download_url }}.{{ wsl_golang_download_url_checksum_algorithm }}"
      dest: "/opt/ansible/{{ wsl_golang_archive }}"
      url: "{{ wsl_golang_download_url }}"

However, doing so results in this error:

The full traceback is:
WARNING: The below traceback may *not* be related to the actual failure.
  File "/tmp/ansible_get_url_payload_mr9vkE/__main__.py", line 453, in main
    lines = dict(s.split(None, 1) for s in lines)

fatal: [localhost]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "attributes": null,
            "backup": null,
            "checksum": "sha256:https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz.sha256",
            "client_cert": null,
            "client_key": null,
            "content": null,
            "delimiter": null,
            "dest": "/opt/ansible/go1.11.2.linux-amd64.tar.gz",
            "directory_mode": null,
            "follow": false,
            "force": false,
            "force_basic_auth": false,
            "group": null,
            "headers": null,
            "http_agent": "ansible-httpget",
            "mode": null,
            "owner": null,
            "regexp": null,
            "remote_src": null,
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "sha256sum": "",
            "src": null,
            "timeout": 10,
            "tmp_dest": null,
            "unsafe_writes": null,
            "url": "https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz",
            "url_password": null,
            "url_username": null,
            "use_proxy": true,
            "validate_certs": true
        }
    },
    "msg": "The checksum parameter has to be in format <algorithm>:<checksum>"
}

As you can see, the checksum is sha256:https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz.sha256 which is clearly of the documented format <algorithm>:<checksum|url>

ISSUE TYPE
  • Bug Report
COMPONENT NAME

get_url

ANSIBLE VERSION
ansible 2.7.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ltheisen/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0]
CONFIGURATION

OS / ENVIRONMENT

I'm running:

ltheisen@ltp52s:~/git/dev-bootstrap$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic

Inside WSL on Windows:

PS C:\Users\lucas> [System.Environment]::OSVersion.Version

Major  Minor  Build  Revision
-----  -----  -----  --------
10     0      17134  0
STEPS TO REPRODUCE

Just run the following playbook

---
- hosts: localhost
  connection: local

  vars:
    wsl_golang_download_url_checksum_algorithm: sha256
    wsl_golang_archive: go1.11.2.linux-amd64.tar.gz
    wsl_golang_download_url: "https://dl.google.com/go/{{ wsl_golang_archive }}"

  tasks:

  - name: Download wsl_golang
    get_url:
      checksum: "{{ wsl_golang_download_url_checksum_algorithm }}:{{ wsl_golang_download_url }}.{{ wsl_golang_download_url_checksum_algorithm }}"
      dest: "/opt/ansible/{{ wsl_golang_archive }}"
      url: "{{ wsl_golang_download_url }}"
EXPECTED RESULTS

Expected the go tarball to be downloaded into /opt/ansible

ACTUAL RESULTS

Failed due to invalid checksum parameter format.

ansible-playbook 2.7.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/ltheisen/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0]
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected
Parsed /etc/ansible/hosts inventory source with ini plugin
 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

Loading callback plugin default of type stdout, v2.0 from /usr/lib/python2.7/dist-packages/ansible/plugins/callback/default.pyc

PLAYBOOK: test.yml ********************************************************************************************************************************************************************************
1 plays in test.yml

PLAY [localhost] **********************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************
task path: /mnt/c/Users/lucas/git/dev-bootstrap/test.yml:2
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: ltheisen
<127.0.0.1> EXEC /bin/sh -c 'echo ~ltheisen && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/ltheisen/.ansible/tmp/ansible-tmp-1542492608.27-155764871851413 `" && echo ansible-tmp-1542492608.27-155764871851413="` echo /home/ltheisen/.ansible/tmp/ansible-tmp-1542492608.27-155764871851413 `" ) && sleep 0'
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/basic.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/namespace.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/ansible_collector.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/default_collectors.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/parsing/convert_bool.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/common/_collections_compat.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/six/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/_text.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/parsing/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/pycompat24.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/common/process.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/common/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/common/file.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/compat.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/timeout.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/collector.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/freebsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/openbsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/base.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/dragonfly.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/dragonfly.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/aix.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/aix.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/linux.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/platform.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/hpux.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/cmdline.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/user.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/hurd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/other/facter.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/hpux.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/distribution.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/freebsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/openbsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/darwin.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/iscsi.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/linux.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/sunos.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/sunos.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/chroot.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/apparmor.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/openbsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/local.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/other/ohai.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/other/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/service_mgr.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/hurd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/hpux.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/fips.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/selinux.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/pkg_mgr.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/linux.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/base.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/darwin.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/dragonfly.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/ssh_pub_keys.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/lsb.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/date_time.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/netbsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/base.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/env.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/freebsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/netbsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/hardware/netbsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/caps.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/dns.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/sunos.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/system/python.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/network/generic_bsd.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/virtual/sysctl.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/utils.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/facts/sysctl.py
Using module file /usr/lib/python2.7/dist-packages/ansible/modules/system/setup.py
<127.0.0.1> PUT /home/ltheisen/.ansible/tmp/ansible-local-130709aunXx/tmpvaJxS2 TO /home/ltheisen/.ansible/tmp/ansible-tmp-1542492608.27-155764871851413/AnsiballZ_setup.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/ltheisen/.ansible/tmp/ansible-tmp-1542492608.27-155764871851413/ /home/ltheisen/.ansible/tmp/ansible-tmp-1542492608.27-155764871851413/AnsiballZ_setup.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python2 /home/ltheisen/.ansible/tmp/ansible-tmp-1542492608.27-155764871851413/AnsiballZ_setup.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/ltheisen/.ansible/tmp/ansible-tmp-1542492608.27-155764871851413/ > /dev/null 2>&1 && sleep 0'
ok: [localhost]
META: ran handlers

TASK [Download wsl_golang] ************************************************************************************************************************************************************************
task path: /mnt/c/Users/lucas/git/dev-bootstrap/test.yml:12
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: ltheisen
<127.0.0.1> EXEC /bin/sh -c 'echo ~ltheisen && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/ltheisen/.ansible/tmp/ansible-tmp-1542492609.7-273733801689382 `" && echo ansible-tmp-1542492609.7-273733801689382="` echo /home/ltheisen/.ansible/tmp/ansible-tmp-1542492609.7-273733801689382 `" ) && sleep 0'
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/_text.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/basic.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/urls.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/six/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/parsing/convert_bool.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/common/_collections_compat.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/common/file.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/parsing/__init__.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/pycompat24.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/common/process.py
Using module_utils file /usr/lib/python2.7/dist-packages/ansible/module_utils/common/__init__.py
Using module file /usr/lib/python2.7/dist-packages/ansible/modules/net_tools/basics/get_url.py
<127.0.0.1> PUT /home/ltheisen/.ansible/tmp/ansible-local-130709aunXx/tmply2cLI TO /home/ltheisen/.ansible/tmp/ansible-tmp-1542492609.7-273733801689382/AnsiballZ_get_url.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/ltheisen/.ansible/tmp/ansible-tmp-1542492609.7-273733801689382/ /home/ltheisen/.ansible/tmp/ansible-tmp-1542492609.7-273733801689382/AnsiballZ_get_url.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python2 /home/ltheisen/.ansible/tmp/ansible-tmp-1542492609.7-273733801689382/AnsiballZ_get_url.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/ltheisen/.ansible/tmp/ansible-tmp-1542492609.7-273733801689382/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
WARNING: The below traceback may *not* be related to the actual failure.
  File "/tmp/ansible_get_url_payload_mr9vkE/__main__.py", line 453, in main
    lines = dict(s.split(None, 1) for s in lines)

fatal: [localhost]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "attributes": null,
            "backup": null,
            "checksum": "sha256:https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz.sha256",
            "client_cert": null,
            "client_key": null,
            "content": null,
            "delimiter": null,
            "dest": "/opt/ansible/go1.11.2.linux-amd64.tar.gz",
            "directory_mode": null,
            "follow": false,
            "force": false,
            "force_basic_auth": false,
            "group": null,
            "headers": null,
            "http_agent": "ansible-httpget",
            "mode": null,
            "owner": null,
            "regexp": null,
            "remote_src": null,
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "sha256sum": "",
            "src": null,
            "timeout": 10,
            "tmp_dest": null,
            "unsafe_writes": null,
            "url": "https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz",
            "url_password": null,
            "url_username": null,
            "use_proxy": true,
            "validate_certs": true
        }
    },
    "msg": "The checksum parameter has to be in format <algorithm>:<checksum>"
}
        to retry, use: --limit @/mnt/c/Users/lucas/git/dev-bootstrap/test.retry

PLAY RECAP ****************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1
@ansibot
Copy link
Contributor

ansibot commented Nov 17, 2018

Hi @lucastheisen, thank you for submitting this issue!

click here for bot help

@ansibot
Copy link
Contributor

ansibot commented Nov 17, 2018

Files identified in the description:

If these files are inaccurate, please update the component name section of the description or use the !component bot command.

click here for bot help

@ansibot
Copy link
Contributor

ansibot commented Nov 17, 2018

@ansibot ansibot added affects_2.7 This issue/PR affects Ansible v2.7 bug This issue/PR relates to a bug. module This issue/PR relates to a module. needs_triage Needs a first human triage before being processed. net_tools Net-tools category support:core This issue/PR relates to code supported by the Ansible Engineering Team. traceback This issue/PR includes a traceback. labels Nov 17, 2018
@ptux
Copy link
Contributor

ptux commented Nov 20, 2018

@lucastheisen

checksum="sha256:http://example.com/path/sha256sum.txt"

sha256sum.txt just support the format [ filename: checksum ].

In your case, you could use [ checksum="sha256:D98291AC[...]B6DC7B97" ].

@ansibot ansibot removed the needs_triage Needs a first human triage before being processed. label Nov 20, 2018
@tappoz
Copy link

tappoz commented Dec 11, 2018

This should be a feature available natively from the get_url module, however this may depend from the content of the checksum file, which may not follow a common practice / standard.

@lucastheisen as a "native ansible workaround" to download terraform I've used the following workbook registering a checksum value from a combination of the shell commands cat, grep and awk.
I had to use the shell module because the content of the checksum file was some sort of tab separated value with columns "checksum" and "architecture/zip filename".

This should apply to other downloads e.g. go in your case.

You can run it copy/pasting the command in the comment at the beginning of the playbook. This work on Linux (pay attention to stuff like paths e.g. /home/<YOUR_USERNAME> etc.).

# reference
# - https://learn.hashicorp.com/terraform/getting-started/install.html
# - https://www.terraform.io/downloads.html
---
# ansible-playbook setup-terraform.yaml -i "localhost," -vvvv --extra-vars "cli_input_username=<YOUR_USERNAME_HERE>" --connection=local
- name: Make sure Terraform is installed
  hosts: all
  vars:
    user_name: "{{ cli_input_username }}"
    tf_version: 0.11.10
  vars_prompt:
  - name: "ansible_become_pass"
    prompt: "Sudo password"
    private: yes
  become: yes
  tasks:
  - name: Download the Terraform checksum
    get_url:
      url: https://releases.hashicorp.com/terraform/{{ tf_version }}/terraform_{{ tf_version }}_SHA256SUMS
      dest: /home/{{ user_name }}/src/terraform_{{ tf_version }}_SHA256SUMS
  - name: Register the checksum value
    shell: cat /home/{{ user_name }}/src/terraform_{{ tf_version }}_SHA256SUMS | grep linux_amd64.zip | awk '{ print $1 }'
    register: tf_checksum_value
  - name: Download the Terraform archive
    get_url:
      url: https://releases.hashicorp.com/terraform/{{ tf_version }}/terraform_{{ tf_version }}_linux_amd64.zip
      dest: /home/{{ user_name }}/src/terraform_{{ tf_version }}_linux_amd64.zip
      checksum: sha256:{{ tf_checksum_value.stdout }}

@ptux
Copy link
Contributor

ptux commented Dec 12, 2018

Here is a workaround.

#48790

And I agree with abadger's opinion.

I must admit that it was unwise to support remote checksum files .

@ptux
Copy link
Contributor

ptux commented Dec 12, 2018

wontfix

@ansibot ansibot closed this as completed Dec 12, 2018
@ansible ansible locked and limited conversation to collaborators Jul 22, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
affects_2.7 This issue/PR affects Ansible v2.7 bug This issue/PR relates to a bug. module This issue/PR relates to a module. net_tools Net-tools category support:core This issue/PR relates to code supported by the Ansible Engineering Team. traceback This issue/PR includes a traceback.
Projects
None yet
Development

No branches or pull requests

4 participants