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

Bug Inspections 07/25/2023 #11

Closed
jmsalvador2395 opened this issue Jul 25, 2023 · 8 comments
Closed

Bug Inspections 07/25/2023 #11

jmsalvador2395 opened this issue Jul 25, 2023 · 8 comments

Comments

@jmsalvador2395
Copy link
Contributor

Overview

Firstly I will provide 2 things

  1. A brief overall description of the 9 samples we have discussed
  2. A brief description for each sample inspected

Then in the comments I will post details for my inspection into samples 1, 2, and 8 which I think are the most relevant ones to look at (samples 1 and 2 generate the same error so I will just post for sample 1).

Overall Summary

  • I have labelled samples 0, 6, and 7 as not a bug
  • Samples 3, 4, and 5 have already been reported by us
  • Samples 1, 2, and 8 trigger errors as a result of not having relevant software installed (similar to the reports we have already submitted). I am on the fence for these but they are similar to what we have already reported so I would suggest taking a look.

Individual Sample Summaries

Sample # Module Name Description
0 ansible.builtin.script The creates field is set to true which triggers the type error. The documentation specifies that a string or null is to be provided so I believe that we cannot consider this a bug
1, 2 community.general.cpanm both playbooks fail with type errors but will gracefully fail after installing the targeted software cpanminus
3, 4 community.general.ejabberd_user already reported by us
5 community.network.bigmon_chain already reported by us
6, 7 community.network.cnos_bgp this module targets an operating system that is not in our inventory so is not valid in my opinion
8 community.network.iap_token this module targets a proprietary software called Itential Automation Platform. This software can be installed after signing up for a free trial but I am holding off from doing that unless you say otherwise.
@jmsalvador2395
Copy link
Contributor Author

Inspection for sample 1 (sample 2 generates the same error)

Summary

  • Playbook (with single string argument) fails with error message:
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
  • fix: playbook fails gracefully after installing cpanminus on target machine.

ansible documentation states

NOTES:
* Please note that http://search.cpan.org/dist/App-cpanminus/bin/cpanm, cpanm must be installed on the remote host.

so for this reason, I'm leaning towards it not being a bug but would like a second opinion

Playbook

- name: Manage Perl installations
  hosts: all
  gather_facts: false

  tasks:
    - name: Install Perl modules with mixed case sensitivity
      community.general.cpanm:
        name: "{{ item }}"
      loop:
        - TestModuleOne
        - testModuleTwo
        - TESTMODULETHREE
        - tEsTmOdUlEfOuR

Output

0.yaml

ansible-playbook [core 2.14.5]
  config file = None
  configured module search path = ['/home/john/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /data/john/projects/cf/env/lib/python3.10/site-packages/ansible
  ansible collection location = /home/john/.ansible/collections:/usr/share/ansible/collections
  executable location = /data/john/projects/cf/env/bin/ansible-playbook
  python version = 3.10.11 (main, Apr 20 2023, 19:02:41) [GCC 11.2.0] (/data/john/projects/cf/env/bin/python)
  jinja version = 3.1.2
  libyaml = True
No config file found; using defaults
host_list declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
script declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
auto declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
yaml declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
Parsed /data/john/projects/cf/files/ansible/hosts.ini inventory source with ini plugin
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: 0.yaml ***************************************************************
1 plays in /data/john/projects/cf/data/module_yaml/20230720-184644/lv1/community.general.cpanm/0.yaml

PLAY [Manage Perl installations] ***********************************************

TASK [Install Perl modules with mixed case sensitivity] ************************
task path: /data/john/projects/cf/data/module_yaml/20230720-184644/lv1/community.general.cpanm/0.yaml:6
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<centos1> (0, b'/home/ansible\n', b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0664 for \'/data/john/projects/cf/files/docker_scripts/ssh/cf-key\' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key "/data/john/projects/cf/files/docker_scripts/ssh/cf-key": bad permissions\r\n')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044 `" && echo ansible-tmp-1689906363.7516558-3983363-65887839650044="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044 `" ) && sleep 0'"'"''
<ubuntu1> (0, b'/home/ansible\n', b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0664 for \'/data/john/projects/cf/files/docker_scripts/ssh/cf-key\' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key "/data/john/projects/cf/files/docker_scripts/ssh/cf-key": bad permissions\r\n')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570 `" && echo ansible-tmp-1689906363.760271-3983361-133720988544570="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570 `" ) && sleep 0'"'"''
<alpine1> (0, b'/home/ansible\n', b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0664 for \'/data/john/projects/cf/files/docker_scripts/ssh/cf-key\' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key "/data/john/projects/cf/files/docker_scripts/ssh/cf-key": bad permissions\r\n')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836 `" && echo ansible-tmp-1689906363.770762-3983362-201893333583836="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836 `" ) && sleep 0'"'"''
<ubuntu1> (0, b'ansible-tmp-1689906363.760271-3983361-133720988544570=/home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570\n', b'')
<centos1> (0, b'ansible-tmp-1689906363.7516558-3983363-65887839650044=/home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044\n', b'')
<alpine1> (0, b'ansible-tmp-1689906363.770762-3983362-201893333583836=/home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836\n', b'')
<redhat1> (0, b'/home/ansible\n', b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0664 for \'/data/john/projects/cf/files/docker_scripts/ssh/cf-key\' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key "/data/john/projects/cf/files/docker_scripts/ssh/cf-key": bad permissions\r\n')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855 `" && echo ansible-tmp-1689906363.8024244-3983364-37685349955855="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855 `" ) && sleep 0'"'"''
<redhat1> (0, b'ansible-tmp-1689906363.8024244-3983364-37685349955855=/home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855\n', b'')
<ubuntu1> Attempting python interpreter discovery
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> Attempting python interpreter discovery
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> Attempting python interpreter discovery
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'echo PLATFORM; uname; echo FOUND; command -v '"'"'"'"'"'"'"'"'python3.11'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.10'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.9'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.8'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.5'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/libexec/platform-python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'echo PLATFORM; uname; echo FOUND; command -v '"'"'"'"'"'"'"'"'python3.11'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.10'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.9'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.8'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.5'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/libexec/platform-python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<alpine1> Attempting python interpreter discovery
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'echo PLATFORM; uname; echo FOUND; command -v '"'"'"'"'"'"'"'"'python3.11'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.10'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.9'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.8'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.5'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/libexec/platform-python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'echo PLATFORM; uname; echo FOUND; command -v '"'"'"'"'"'"'"'"'python3.11'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.10'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.9'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.8'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.5'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/libexec/platform-python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<ubuntu1> (0, b'PLATFORM\nLinux\nFOUND\n/usr/bin/python3.10\n/usr/bin/python3.7\n/usr/bin/python3\n/usr/bin/python2.7\n/usr/bin/python\n/usr/bin/python\nENDFOUND\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'/usr/bin/python3.10 && sleep 0'"'"''
<alpine1> (0, b'PLATFORM\nLinux\nFOUND\n/usr/bin/python3.11\n/usr/bin/python3\n/usr/bin/python\n/usr/bin/python\nENDFOUND\n', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'/usr/bin/python3.11 && sleep 0'"'"''
<redhat1> (0, b'PLATFORM\nLinux\nFOUND\n/usr/bin/python3.6\n/usr/bin/python3\n/usr/libexec/platform-python\n/usr/bin/python2.7\nENDFOUND\n', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'/usr/bin/python3.6 && sleep 0'"'"''
<centos1> (0, b'PLATFORM\nLinux\nFOUND\n/usr/bin/python3.6\n/usr/bin/python3\n/usr/libexec/platform-python\n/usr/bin/python2.7\nENDFOUND\n', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'/usr/bin/python3.6 && sleep 0'"'"''
<alpine1> (0, b'{"platform_dist_result": [], "osrelease_content": "NAME=\\"Alpine Linux\\"\\nID=alpine\\nVERSION_ID=3.18.0\\nPRETTY_NAME=\\"Alpine Linux v3.18\\"\\nHOME_URL=\\"https://alpinelinux.org/\\"\\nBUG_REPORT_URL=\\"https://gitlab.alpinelinux.org/alpine/aports/-/issues\\"\\n"}\n', b'')
<alpine1> Python interpreter discovery fallback (unsupported Linux distribution: alpine)
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<alpine1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpqofpv227 TO /home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836/AnsiballZ_cpanm.py
<alpine1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' '[alpine1]'
<ubuntu1> (0, b'{"platform_dist_result": [], "osrelease_content": "PRETTY_NAME=\\"Ubuntu 22.04.2 LTS\\"\\nNAME=\\"Ubuntu\\"\\nVERSION_ID=\\"22.04\\"\\nVERSION=\\"22.04.2 LTS (Jammy Jellyfish)\\"\\nVERSION_CODENAME=jammy\\nID=ubuntu\\nID_LIKE=debian\\nHOME_URL=\\"https://www.ubuntu.com/\\"\\nSUPPORT_URL=\\"https://help.ubuntu.com/\\"\\nBUG_REPORT_URL=\\"https://bugs.launchpad.net/ubuntu/\\"\\nPRIVACY_POLICY_URL=\\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\\"\\nUBUNTU_CODENAME=jammy\\n"}\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<ubuntu1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmp3sff8i4h TO /home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570/AnsiballZ_cpanm.py
<ubuntu1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' '[ubuntu1]'
<alpine1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpqofpv227 '[alpine1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836/AnsiballZ_cpanm.py'
<ubuntu1> (0, b'sftp> put /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmp3sff8i4h /home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570/AnsiballZ_cpanm.py\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570/ /home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (0, b'', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836/ /home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836/AnsiballZ_cpanm.py && sleep 0'"'"''
<redhat1> (0, b'{"platform_dist_result": ["redhat", "8.8", "Ootpa"], "osrelease_content": "NAME=\\"Red Hat Enterprise Linux\\"\\nVERSION=\\"8.8 (Ootpa)\\"\\nID=\\"rhel\\"\\nID_LIKE=\\"fedora\\"\\nVERSION_ID=\\"8.8\\"\\nPLATFORM_ID=\\"platform:el8\\"\\nPRETTY_NAME=\\"Red Hat Enterprise Linux 8.8 (Ootpa)\\"\\nANSI_COLOR=\\"0;31\\"\\nCPE_NAME=\\"cpe:/o:redhat:enterprise_linux:8::baseos\\"\\nHOME_URL=\\"https://www.redhat.com/\\"\\nDOCUMENTATION_URL=\\"https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8\\"\\nBUG_REPORT_URL=\\"https://bugzilla.redhat.com/\\"\\n\\nREDHAT_BUGZILLA_PRODUCT=\\"Red Hat Enterprise Linux 8\\"\\nREDHAT_BUGZILLA_PRODUCT_VERSION=8.8\\nREDHAT_SUPPORT_PRODUCT=\\"Red Hat Enterprise Linux\\"\\nREDHAT_SUPPORT_PRODUCT_VERSION=\\"8.8\\"\\n"}\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<redhat1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmp5j0mcr72 TO /home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855/AnsiballZ_cpanm.py
<redhat1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' '[redhat1]'
<ubuntu1> (0, b'', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' -tt ubuntu1 '/bin/sh -c '"'"'/usr/bin/python3 /home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> (0, b'{"platform_dist_result": ["centos", "8.5.2111", ""], "osrelease_content": "NAME=\\"CentOS Linux\\"\\nVERSION=\\"8\\"\\nID=\\"centos\\"\\nID_LIKE=\\"rhel fedora\\"\\nVERSION_ID=\\"8\\"\\nPLATFORM_ID=\\"platform:el8\\"\\nPRETTY_NAME=\\"CentOS Linux 8\\"\\nANSI_COLOR=\\"0;31\\"\\nCPE_NAME=\\"cpe:/o:centos:centos:8\\"\\nHOME_URL=\\"https://centos.org/\\"\\nBUG_REPORT_URL=\\"https://bugs.centos.org/\\"\\nCENTOS_MANTISBT_PROJECT=\\"CentOS-8\\"\\nCENTOS_MANTISBT_PROJECT_VERSION=\\"8\\"\\n"}\n', b'')
<alpine1> (0, b'', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' -tt alpine1 '/bin/sh -c '"'"'/usr/bin/python3.11 /home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpi66mc9_z TO /home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044/AnsiballZ_cpanm.py
<centos1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' '[centos1]'
<centos1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpi66mc9_z '[centos1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044/AnsiballZ_cpanm.py'
<redhat1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmp5j0mcr72 '[redhat1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855/AnsiballZ_cpanm.py'
<centos1> (0, b'', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044/ /home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044/AnsiballZ_cpanm.py && sleep 0'"'"''
<redhat1> (0, b'', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855/ /home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> (0, b'', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' -tt centos1 '/bin/sh -c '"'"'/usr/libexec/platform-python /home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044/AnsiballZ_cpanm.py && sleep 0'"'"''
<redhat1> (0, b'', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' -tt redhat1 '/bin/sh -c '"'"'/usr/libexec/platform-python /home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855/AnsiballZ_cpanm.py && sleep 0'"'"''
<ubuntu1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib/python3.10/posixpath.py\\", line 90, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib/python3.10/genericpath.py\\", line 152, in _check_arg_types\\n    raise TypeError(f\'{funcname}() argument must be str, bytes, or \'\\nTypeError: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'\\n", "output": {"name": "TestModuleOne", "version": null, "binary": null}, "vars": {"name": "TestModuleOne", "version": null, "binary": null}, "name": "TestModuleOne", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'", "invocation": {"module_args": {"name": "TestModuleOne", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.1 closed.\r\n')
<ubuntu1> Failed to connect to the host via ssh: Shared connection to 10.1.1.1 closed.
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906363.760271-3983361-133720988544570/ > /dev/null 2>&1 && sleep 0'"'"''
<ubuntu1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_n7b0xhux/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib/python3.10/posixpath.py", line 90, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.10/genericpath.py", line 152, in _check_arg_types
    raise TypeError(f'{funcname}() argument must be str, bytes, or '
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
failed: [ubuntu1] (item=TestModuleOne) => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "TestModuleOne",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "TestModuleOne",
    "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'",
    "name": "TestModuleOne",
    "output": {
        "binary": null,
        "name": "TestModuleOne",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "TestModuleOne",
        "version": null
    },
    "version": null
}
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<ubuntu1> (0, b'/home/ansible\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577 `" && echo ansible-tmp-1689906364.0597632-3983361-277437922141577="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577 `" ) && sleep 0'"'"''
<ubuntu1> (0, b'ansible-tmp-1689906364.0597632-3983361-277437922141577=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<ubuntu1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpdb2r0ylv TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577/AnsiballZ_cpanm.py
<ubuntu1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' '[ubuntu1]'
<alpine1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n           ^^^^^^^^^^^^^^^^^^^^\\n  File \\"<frozen posixpath>\\", line 90, in join\\n  File \\"<frozen genericpath>\\", line 152, in _check_arg_types\\nTypeError: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'\\n", "output": {"name": "TestModuleOne", "version": null, "binary": null}, "vars": {"name": "TestModuleOne", "version": null, "binary": null}, "name": "TestModuleOne", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'", "invocation": {"module_args": {"name": "TestModuleOne", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.2 closed.\r\n')
<alpine1> Failed to connect to the host via ssh: Shared connection to 10.1.1.2 closed.
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906363.770762-3983362-201893333583836/ > /dev/null 2>&1 && sleep 0'"'"''
<alpine1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ansible_community.general.cpanm_payload_wyanqul6/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
           ^^^^^^^^^^^^^^^^^^^^
  File "<frozen posixpath>", line 90, in join
  File "<frozen genericpath>", line 152, in _check_arg_types
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
failed: [alpine1] (item=TestModuleOne) => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3.11"
    },
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "TestModuleOne",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "TestModuleOne",
    "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'",
    "name": "TestModuleOne",
    "output": {
        "binary": null,
        "name": "TestModuleOne",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "TestModuleOne",
        "version": null
    },
    "version": null
}
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<alpine1> (0, b'/home/ansible\n', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668 `" && echo ansible-tmp-1689906364.0925198-3983362-85671865708668="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668 `" ) && sleep 0'"'"''
<ubuntu1> (0, b'sftp> put /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpdb2r0ylv /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577/AnsiballZ_cpanm.py\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (0, b'ansible-tmp-1689906364.0925198-3983362-85671865708668=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<alpine1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpnhhj8xg4 TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668/AnsiballZ_cpanm.py
<alpine1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' '[alpine1]'
<ubuntu1> (0, b'', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' -tt ubuntu1 '/bin/sh -c '"'"'/usr/bin/python3 /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpnhhj8xg4 '[alpine1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668/AnsiballZ_cpanm.py'
<centos1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib64/python3.6/posixpath.py\\", line 94, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib64/python3.6/genericpath.py\\", line 149, in _check_arg_types\\n    (funcname, s.__class__.__name__)) from None\\nTypeError: join() argument must be str or bytes, not \'NoneType\'\\n", "output": {"name": "TestModuleOne", "version": null, "binary": null}, "vars": {"name": "TestModuleOne", "version": null, "binary": null}, "name": "TestModuleOne", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str or bytes, not \'NoneType\'", "invocation": {"module_args": {"name": "TestModuleOne", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.3 closed.\r\n')
<centos1> Failed to connect to the host via ssh: Shared connection to 10.1.1.3 closed.
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906363.7516558-3983363-65887839650044/ > /dev/null 2>&1 && sleep 0'"'"''
<alpine1> (0, b'', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (0, b'', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' -tt alpine1 '/bin/sh -c '"'"'/usr/bin/python3.11 /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668/AnsiballZ_cpanm.py && sleep 0'"'"''
<redhat1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib64/python3.6/posixpath.py\\", line 94, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib64/python3.6/genericpath.py\\", line 149, in _check_arg_types\\n    (funcname, s.__class__.__name__)) from None\\nTypeError: join() argument must be str or bytes, not \'NoneType\'\\n", "output": {"name": "TestModuleOne", "version": null, "binary": null}, "vars": {"name": "TestModuleOne", "version": null, "binary": null}, "name": "TestModuleOne", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str or bytes, not \'NoneType\'", "invocation": {"module_args": {"name": "TestModuleOne", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.4 closed.\r\n')
<redhat1> Failed to connect to the host via ssh: Shared connection to 10.1.1.4 closed.
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906363.8024244-3983364-37685349955855/ > /dev/null 2>&1 && sleep 0'"'"''
<centos1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_qe289z8_/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib64/python3.6/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib64/python3.6/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'
failed: [centos1] (item=TestModuleOne) => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "TestModuleOne",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "TestModuleOne",
    "msg": "Module failed with exception: join() argument must be str or bytes, not 'NoneType'",
    "name": "TestModuleOne",
    "output": {
        "binary": null,
        "name": "TestModuleOne",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "TestModuleOne",
        "version": null
    },
    "version": null
}
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<redhat1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_v_2g94eh/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib64/python3.6/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib64/python3.6/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'
failed: [redhat1] (item=TestModuleOne) => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "TestModuleOne",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "TestModuleOne",
    "msg": "Module failed with exception: join() argument must be str or bytes, not 'NoneType'",
    "name": "TestModuleOne",
    "output": {
        "binary": null,
        "name": "TestModuleOne",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "TestModuleOne",
        "version": null
    },
    "version": null
}
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<centos1> (0, b'/home/ansible\n', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504 `" && echo ansible-tmp-1689906364.2042043-3983363-231164216579504="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504 `" ) && sleep 0'"'"''
<redhat1> (0, b'/home/ansible\n', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661 `" && echo ansible-tmp-1689906364.2152927-3983364-74095150492661="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661 `" ) && sleep 0'"'"''
<ubuntu1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib/python3.10/posixpath.py\\", line 90, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib/python3.10/genericpath.py\\", line 152, in _check_arg_types\\n    raise TypeError(f\'{funcname}() argument must be str, bytes, or \'\\nTypeError: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'\\n", "output": {"name": "testModuleTwo", "version": null, "binary": null}, "vars": {"name": "testModuleTwo", "version": null, "binary": null}, "name": "testModuleTwo", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'", "invocation": {"module_args": {"name": "testModuleTwo", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.1 closed.\r\n')
<ubuntu1> Failed to connect to the host via ssh: Shared connection to 10.1.1.1 closed.
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0597632-3983361-277437922141577/ > /dev/null 2>&1 && sleep 0'"'"''
<ubuntu1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_bfm47mnh/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib/python3.10/posixpath.py", line 90, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.10/genericpath.py", line 152, in _check_arg_types
    raise TypeError(f'{funcname}() argument must be str, bytes, or '
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
failed: [ubuntu1] (item=testModuleTwo) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "testModuleTwo",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "testModuleTwo",
    "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'",
    "name": "testModuleTwo",
    "output": {
        "binary": null,
        "name": "testModuleTwo",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "testModuleTwo",
        "version": null
    },
    "version": null
}
<centos1> (0, b'ansible-tmp-1689906364.2042043-3983363-231164216579504=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpkvbqxkh4 TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504/AnsiballZ_cpanm.py
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<centos1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' '[centos1]'
<redhat1> (0, b'ansible-tmp-1689906364.2152927-3983364-74095150492661=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<redhat1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpo82dilch TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661/AnsiballZ_cpanm.py
<redhat1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' '[redhat1]'
<ubuntu1> (0, b'/home/ansible\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559 `" && echo ansible-tmp-1689906364.2465982-3983361-37217553427559="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559 `" ) && sleep 0'"'"''
<ubuntu1> (0, b'ansible-tmp-1689906364.2465982-3983361-37217553427559=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<ubuntu1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmphmmviynu TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559/AnsiballZ_cpanm.py
<ubuntu1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' '[ubuntu1]'
<redhat1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpo82dilch '[redhat1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661/AnsiballZ_cpanm.py'
<centos1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpkvbqxkh4 '[centos1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504/AnsiballZ_cpanm.py'
<ubuntu1> (0, b'sftp> put /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmphmmviynu /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559/AnsiballZ_cpanm.py\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> (0, b'', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504/AnsiballZ_cpanm.py && sleep 0'"'"''
<ubuntu1> (0, b'', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' -tt ubuntu1 '/bin/sh -c '"'"'/usr/bin/python3 /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559/AnsiballZ_cpanm.py && sleep 0'"'"''
<redhat1> (0, b'', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\"/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\"/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n           ^^^^^^^^^^^^^^^^^^^^\\n  File \\"<frozen posixpath>\\", line 90, in join\\n  File \\"<frozen genericpath>\\", line 152, in _check_arg_types\\nTypeError: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'\\n", "output": {"name": "testModuleTwo", "version": null, "binary": null}, "vars": {"name": "testModuleTwo", "version": null, "binary": null}, "name": "testModuleTwo", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'", "invocation": {"module_args": {"name": "testModuleTwo", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.2 closed.\r\n')
<alpine1> Failed to connect to the host via ssh: Shared connection to 10.1.1.2 closed.
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.0925198-3983362-85671865708668/ > /dev/null 2>&1 && sleep 0'"'"''
<redhat1> (0, b'', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' -tt redhat1 '/bin/sh -c '"'"'/usr/libexec/platform-python /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ansible_community.general.cpanm_payload_860jztsk/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
           ^^^^^^^^^^^^^^^^^^^^
  File "<frozen posixpath>", line 90, in join
  File "<frozen genericpath>", line 152, in _check_arg_types
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
failed: [alpine1] (item=testModuleTwo) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "testModuleTwo",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "testModuleTwo",
    "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'",
    "name": "testModuleTwo",
    "output": {
        "binary": null,
        "name": "testModuleTwo",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "testModuleTwo",
        "version": null
    },
    "version": null
}
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<centos1> (0, b'', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' -tt centos1 '/bin/sh -c '"'"'/usr/libexec/platform-python /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (0, b'/home/ansible\n', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764 `" && echo ansible-tmp-1689906364.3424165-3983362-91250003924764="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764 `" ) && sleep 0'"'"''
<alpine1> (0, b'ansible-tmp-1689906364.3424165-3983362-91250003924764=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<alpine1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpgvwo7s2y TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764/AnsiballZ_cpanm.py
<alpine1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' '[alpine1]'
<alpine1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpgvwo7s2y '[alpine1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764/AnsiballZ_cpanm.py'
<alpine1> (0, b'', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (0, b'', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' -tt alpine1 '/bin/sh -c '"'"'/usr/bin/python3.11 /home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764/AnsiballZ_cpanm.py && sleep 0'"'"''
<ubuntu1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib/python3.10/posixpath.py\\", line 90, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib/python3.10/genericpath.py\\", line 152, in _check_arg_types\\n    raise TypeError(f\'{funcname}() argument must be str, bytes, or \'\\nTypeError: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'\\n", "output": {"name": "TESTMODULETHREE", "version": null, "binary": null}, "vars": {"name": "TESTMODULETHREE", "version": null, "binary": null}, "name": "TESTMODULETHREE", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'", "invocation": {"module_args": {"name": "TESTMODULETHREE", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.1 closed.\r\n')
<ubuntu1> Failed to connect to the host via ssh: Shared connection to 10.1.1.1 closed.
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2465982-3983361-37217553427559/ > /dev/null 2>&1 && sleep 0'"'"''
<ubuntu1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_wmnw6t2n/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib/python3.10/posixpath.py", line 90, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.10/genericpath.py", line 152, in _check_arg_types
    raise TypeError(f'{funcname}() argument must be str, bytes, or '
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
failed: [ubuntu1] (item=TESTMODULETHREE) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "TESTMODULETHREE",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "TESTMODULETHREE",
    "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'",
    "name": "TESTMODULETHREE",
    "output": {
        "binary": null,
        "name": "TESTMODULETHREE",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "TESTMODULETHREE",
        "version": null
    },
    "version": null
}
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<ubuntu1> (0, b'/home/ansible\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704 `" && echo ansible-tmp-1689906364.4408498-3983361-52983942346704="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704 `" ) && sleep 0'"'"''
<ubuntu1> (0, b'ansible-tmp-1689906364.4408498-3983361-52983942346704=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<ubuntu1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmp604gks_6 TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704/AnsiballZ_cpanm.py
<ubuntu1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' '[ubuntu1]'
<ubuntu1> (0, b'sftp> put /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmp604gks_6 /home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704/AnsiballZ_cpanm.py\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib64/python3.6/posixpath.py\\", line 94, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib64/python3.6/genericpath.py\\", line 149, in _check_arg_types\\n    (funcname, s.__class__.__name__)) from None\\nTypeError: join() argument must be str or bytes, not \'NoneType\'\\n", "output": {"name": "testModuleTwo", "version": null, "binary": null}, "vars": {"name": "testModuleTwo", "version": null, "binary": null}, "name": "testModuleTwo", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str or bytes, not \'NoneType\'", "invocation": {"module_args": {"name": "testModuleTwo", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.3 closed.\r\n')
<centos1> Failed to connect to the host via ssh: Shared connection to 10.1.1.3 closed.
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2042043-3983363-231164216579504/ > /dev/null 2>&1 && sleep 0'"'"''
<ubuntu1> (0, b'', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' -tt ubuntu1 '/bin/sh -c '"'"'/usr/bin/python3 /home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704/AnsiballZ_cpanm.py && sleep 0'"'"''
<redhat1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib64/python3.6/posixpath.py\\", line 94, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib64/python3.6/genericpath.py\\", line 149, in _check_arg_types\\n    (funcname, s.__class__.__name__)) from None\\nTypeError: join() argument must be str or bytes, not \'NoneType\'\\n", "output": {"name": "testModuleTwo", "version": null, "binary": null}, "vars": {"name": "testModuleTwo", "version": null, "binary": null}, "name": "testModuleTwo", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str or bytes, not \'NoneType\'", "invocation": {"module_args": {"name": "testModuleTwo", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.4 closed.\r\n')
<redhat1> Failed to connect to the host via ssh: Shared connection to 10.1.1.4 closed.
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.2152927-3983364-74095150492661/ > /dev/null 2>&1 && sleep 0'"'"''
<centos1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_a_r40ayn/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib64/python3.6/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib64/python3.6/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'
failed: [centos1] (item=testModuleTwo) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "testModuleTwo",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "testModuleTwo",
    "msg": "Module failed with exception: join() argument must be str or bytes, not 'NoneType'",
    "name": "testModuleTwo",
    "output": {
        "binary": null,
        "name": "testModuleTwo",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "testModuleTwo",
        "version": null
    },
    "version": null
}
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<redhat1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_11yljgfg/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib64/python3.6/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib64/python3.6/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'
failed: [redhat1] (item=testModuleTwo) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "testModuleTwo",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "testModuleTwo",
    "msg": "Module failed with exception: join() argument must be str or bytes, not 'NoneType'",
    "name": "testModuleTwo",
    "output": {
        "binary": null,
        "name": "testModuleTwo",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "testModuleTwo",
        "version": null
    },
    "version": null
}
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<alpine1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\"/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\"/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n           ^^^^^^^^^^^^^^^^^^^^\\n  File \\"<frozen posixpath>\\", line 90, in join\\n  File \\"<frozen genericpath>\\", line 152, in _check_arg_types\\nTypeError: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'\\n", "output": {"name": "TESTMODULETHREE", "version": null, "binary": null}, "vars": {"name": "TESTMODULETHREE", "version": null, "binary": null}, "name": "TESTMODULETHREE", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'", "invocation": {"module_args": {"name": "TESTMODULETHREE", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.2 closed.\r\n')
<alpine1> Failed to connect to the host via ssh: Shared connection to 10.1.1.2 closed.
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.3424165-3983362-91250003924764/ > /dev/null 2>&1 && sleep 0'"'"''
<alpine1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ansible_community.general.cpanm_payload_w06iut32/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
           ^^^^^^^^^^^^^^^^^^^^
  File "<frozen posixpath>", line 90, in join
  File "<frozen genericpath>", line 152, in _check_arg_types
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
failed: [alpine1] (item=TESTMODULETHREE) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "TESTMODULETHREE",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "TESTMODULETHREE",
    "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'",
    "name": "TESTMODULETHREE",
    "output": {
        "binary": null,
        "name": "TESTMODULETHREE",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "TESTMODULETHREE",
        "version": null
    },
    "version": null
}
<redhat1> (0, b'/home/ansible\n', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945 `" && echo ansible-tmp-1689906364.5476842-3983364-265724414706945="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945 `" ) && sleep 0'"'"''
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<centos1> (0, b'/home/ansible\n', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390 `" && echo ansible-tmp-1689906364.5530622-3983363-143626386625390="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390 `" ) && sleep 0'"'"''
<alpine1> (0, b'/home/ansible\n', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352 `" && echo ansible-tmp-1689906364.5557926-3983362-196009228889352="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352 `" ) && sleep 0'"'"''
<alpine1> (0, b'ansible-tmp-1689906364.5557926-3983362-196009228889352=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<alpine1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpanasd_yo TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352/AnsiballZ_cpanm.py
<alpine1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' '[alpine1]'
<redhat1> (0, b'ansible-tmp-1689906364.5476842-3983364-265724414706945=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<redhat1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpt76_v8rq TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945/AnsiballZ_cpanm.py
<redhat1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' '[redhat1]'
<alpine1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpanasd_yo '[alpine1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352/AnsiballZ_cpanm.py'
<centos1> (0, b'ansible-tmp-1689906364.5530622-3983363-143626386625390=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390\n', b'')
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<centos1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmp3o7ustq5 TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390/AnsiballZ_cpanm.py
<centos1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' '[centos1]'
<ubuntu1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib/python3.10/posixpath.py\\", line 90, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib/python3.10/genericpath.py\\", line 152, in _check_arg_types\\n    raise TypeError(f\'{funcname}() argument must be str, bytes, or \'\\nTypeError: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'\\n", "output": {"name": "tEsTmOdUlEfOuR", "version": null, "binary": null}, "vars": {"name": "tEsTmOdUlEfOuR", "version": null, "binary": null}, "name": "tEsTmOdUlEfOuR", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'", "invocation": {"module_args": {"name": "tEsTmOdUlEfOuR", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.1 closed.\r\n')
<ubuntu1> Failed to connect to the host via ssh: Shared connection to 10.1.1.1 closed.
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.4408498-3983361-52983942346704/ > /dev/null 2>&1 && sleep 0'"'"''
<alpine1> (0, b'', b'')
<redhat1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpt76_v8rq '[redhat1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945/AnsiballZ_cpanm.py'
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (0, b'', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' -tt alpine1 '/bin/sh -c '"'"'/usr/bin/python3.11 /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352/AnsiballZ_cpanm.py && sleep 0'"'"''
<ubuntu1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_k27nxrm7/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib/python3.10/posixpath.py", line 90, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.10/genericpath.py", line 152, in _check_arg_types
    raise TypeError(f'{funcname}() argument must be str, bytes, or '
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
failed: [ubuntu1] (item=tEsTmOdUlEfOuR) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "tEsTmOdUlEfOuR",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "tEsTmOdUlEfOuR",
    "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'",
    "name": "tEsTmOdUlEfOuR",
    "output": {
        "binary": null,
        "name": "tEsTmOdUlEfOuR",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "tEsTmOdUlEfOuR",
        "version": null
    },
    "version": null
}
<centos1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmp3o7ustq5 '[centos1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390/AnsiballZ_cpanm.py'
<redhat1> (0, b'', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945/AnsiballZ_cpanm.py && sleep 0'"'"''
<redhat1> (0, b'', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' -tt redhat1 '/bin/sh -c '"'"'/usr/libexec/platform-python /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> (0, b'', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> (0, b'', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' -tt centos1 '/bin/sh -c '"'"'/usr/libexec/platform-python /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390/AnsiballZ_cpanm.py && sleep 0'"'"''
<alpine1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\"/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n  File \\"/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n           ^^^^^^^^^^^^^^^^^^^^\\n  File \\"<frozen posixpath>\\", line 90, in join\\n  File \\"<frozen genericpath>\\", line 152, in _check_arg_types\\nTypeError: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'\\n", "output": {"name": "tEsTmOdUlEfOuR", "version": null, "binary": null}, "vars": {"name": "tEsTmOdUlEfOuR", "version": null, "binary": null}, "name": "tEsTmOdUlEfOuR", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not \'NoneType\'", "invocation": {"module_args": {"name": "tEsTmOdUlEfOuR", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.2 closed.\r\n')
<alpine1> Failed to connect to the host via ssh: Shared connection to 10.1.1.2 closed.
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5557926-3983362-196009228889352/ > /dev/null 2>&1 && sleep 0'"'"''
<alpine1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/ansible_community.general.cpanm_payload_mnfsg12v/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
           ^^^^^^^^^^^^^^^^^^^^
  File "<frozen posixpath>", line 90, in join
  File "<frozen genericpath>", line 152, in _check_arg_types
TypeError: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'
failed: [alpine1] (item=tEsTmOdUlEfOuR) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "tEsTmOdUlEfOuR",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "tEsTmOdUlEfOuR",
    "msg": "Module failed with exception: join() argument must be str, bytes, or os.PathLike object, not 'NoneType'",
    "name": "tEsTmOdUlEfOuR",
    "output": {
        "binary": null,
        "name": "tEsTmOdUlEfOuR",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "tEsTmOdUlEfOuR",
        "version": null
    },
    "version": null
}
<redhat1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib64/python3.6/posixpath.py\\", line 94, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib64/python3.6/genericpath.py\\", line 149, in _check_arg_types\\n    (funcname, s.__class__.__name__)) from None\\nTypeError: join() argument must be str or bytes, not \'NoneType\'\\n", "output": {"name": "TESTMODULETHREE", "version": null, "binary": null}, "vars": {"name": "TESTMODULETHREE", "version": null, "binary": null}, "name": "TESTMODULETHREE", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str or bytes, not \'NoneType\'", "invocation": {"module_args": {"name": "TESTMODULETHREE", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.4 closed.\r\n')
<redhat1> Failed to connect to the host via ssh: Shared connection to 10.1.1.4 closed.
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5476842-3983364-265724414706945/ > /dev/null 2>&1 && sleep 0'"'"''
<redhat1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_15i2x3ki/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib64/python3.6/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib64/python3.6/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'
failed: [redhat1] (item=TESTMODULETHREE) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "TESTMODULETHREE",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "TESTMODULETHREE",
    "msg": "Module failed with exception: join() argument must be str or bytes, not 'NoneType'",
    "name": "TESTMODULETHREE",
    "output": {
        "binary": null,
        "name": "TESTMODULETHREE",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "TESTMODULETHREE",
        "version": null
    },
    "version": null
}
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<centos1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib64/python3.6/posixpath.py\\", line 94, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib64/python3.6/genericpath.py\\", line 149, in _check_arg_types\\n    (funcname, s.__class__.__name__)) from None\\nTypeError: join() argument must be str or bytes, not \'NoneType\'\\n", "output": {"name": "TESTMODULETHREE", "version": null, "binary": null}, "vars": {"name": "TESTMODULETHREE", "version": null, "binary": null}, "name": "TESTMODULETHREE", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str or bytes, not \'NoneType\'", "invocation": {"module_args": {"name": "TESTMODULETHREE", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.3 closed.\r\n')
<centos1> Failed to connect to the host via ssh: Shared connection to 10.1.1.3 closed.
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.5530622-3983363-143626386625390/ > /dev/null 2>&1 && sleep 0'"'"''
<redhat1> (0, b'/home/ansible\n', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377 `" && echo ansible-tmp-1689906364.8269987-3983364-106755043741377="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377 `" ) && sleep 0'"'"''
<centos1> (0, b'', b'')
<redhat1> (0, b'ansible-tmp-1689906364.8269987-3983364-106755043741377=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377\n', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_vm3qfimt/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib64/python3.6/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib64/python3.6/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'
failed: [centos1] (item=TESTMODULETHREE) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "TESTMODULETHREE",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "TESTMODULETHREE",
    "msg": "Module failed with exception: join() argument must be str or bytes, not 'NoneType'",
    "name": "TESTMODULETHREE",
    "output": {
        "binary": null,
        "name": "TESTMODULETHREE",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "TESTMODULETHREE",
        "version": null
    },
    "version": null
}
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<redhat1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpowja_b94 TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377/AnsiballZ_cpanm.py
<redhat1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' '[redhat1]'
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<redhat1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmpowja_b94 '[redhat1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377/AnsiballZ_cpanm.py'
<centos1> (0, b'/home/ansible\n', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414 `" && echo ansible-tmp-1689906364.8827798-3983363-238749734601414="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414 `" ) && sleep 0'"'"''
<centos1> (0, b'ansible-tmp-1689906364.8827798-3983363-238749734601414=/home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414\n', b'')
<redhat1> (0, b'', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377/AnsiballZ_cpanm.py && sleep 0'"'"''
Using module file /data/john/projects/cf/env/lib/python3.10/site-packages/ansible_collections/community/general/plugins/modules/cpanm.py
<centos1> PUT /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmporo2k49p TO /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414/AnsiballZ_cpanm.py
<centos1> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' '[centos1]'
<redhat1> (0, b'', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' -tt redhat1 '/bin/sh -c '"'"'/usr/libexec/platform-python /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> SSH: EXEC scp -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' /home/john/.ansible/tmp/ansible-local-3983357rfqj_4sf/tmporo2k49p '[centos1]:/home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414/AnsiballZ_cpanm.py'
<centos1> (0, b'', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'chmod u+x /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414/ /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414/AnsiballZ_cpanm.py && sleep 0'"'"''
<centos1> (0, b'', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' -tt centos1 '/bin/sh -c '"'"'/usr/libexec/platform-python /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414/AnsiballZ_cpanm.py && sleep 0'"'"''
<redhat1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib64/python3.6/posixpath.py\\", line 94, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib64/python3.6/genericpath.py\\", line 149, in _check_arg_types\\n    (funcname, s.__class__.__name__)) from None\\nTypeError: join() argument must be str or bytes, not \'NoneType\'\\n", "output": {"name": "tEsTmOdUlEfOuR", "version": null, "binary": null}, "vars": {"name": "tEsTmOdUlEfOuR", "version": null, "binary": null}, "name": "tEsTmOdUlEfOuR", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str or bytes, not \'NoneType\'", "invocation": {"module_args": {"name": "tEsTmOdUlEfOuR", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.4 closed.\r\n')
<redhat1> Failed to connect to the host via ssh: Shared connection to 10.1.1.4 closed.
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8269987-3983364-106755043741377/ > /dev/null 2>&1 && sleep 0'"'"''
<redhat1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_5y1vzyw8/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib64/python3.6/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib64/python3.6/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'
failed: [redhat1] (item=tEsTmOdUlEfOuR) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "tEsTmOdUlEfOuR",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "tEsTmOdUlEfOuR",
    "msg": "Module failed with exception: join() argument must be str or bytes, not 'NoneType'",
    "name": "tEsTmOdUlEfOuR",
    "output": {
        "binary": null,
        "name": "tEsTmOdUlEfOuR",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "tEsTmOdUlEfOuR",
        "version": null
    },
    "version": null
}
<centos1> (1, b'\r\n{"exception": "Traceback (most recent call last):\\n  File \\"/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py\\", line 52, in wrapper\\n    func(self, *args, **kwargs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py\\", line 80, in run\\n    self.__run__()\\n  File \\"/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py\\", line 223, in __run__\\n  File \\"/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py\\", line 202, in __init__\\n    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py\\", line 1435, in get_bin_path\\n    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)\\n  File \\"/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py\\", line 39, in get_bin_path\\n    path = os.path.join(d, arg)\\n  File \\"/usr/lib64/python3.6/posixpath.py\\", line 94, in join\\n    genericpath._check_arg_types(\'join\', a, *p)\\n  File \\"/usr/lib64/python3.6/genericpath.py\\", line 149, in _check_arg_types\\n    (funcname, s.__class__.__name__)) from None\\nTypeError: join() argument must be str or bytes, not \'NoneType\'\\n", "output": {"name": "tEsTmOdUlEfOuR", "version": null, "binary": null}, "vars": {"name": "tEsTmOdUlEfOuR", "version": null, "binary": null}, "name": "tEsTmOdUlEfOuR", "version": null, "binary": null, "failed": true, "msg": "Module failed with exception: join() argument must be str or bytes, not \'NoneType\'", "invocation": {"module_args": {"name": "tEsTmOdUlEfOuR", "notest": false, "mirror_only": false, "installdeps": false, "mode": "compatibility", "version": null, "from_path": null, "locallib": null, "mirror": null, "executable": null, "name_check": null}}}\r\n', b'Shared connection to 10.1.1.3 closed.\r\n')
<centos1> Failed to connect to the host via ssh: Shared connection to 10.1.1.3 closed.
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689906364.8827798-3983363-238749734601414/ > /dev/null 2>&1 && sleep 0'"'"''
<centos1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/deco.py", line 52, in wrapper
    func(self, *args, **kwargs)
  File "/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/mh/base.py", line 80, in run
    self.__run__()
  File "/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/modules/cpanm.py", line 223, in __run__
  File "/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible_collections/community/general/plugins/module_utils/cmd_runner.py", line 202, in __init__
    self.command[0] = module.get_bin_path(self.command[0], opt_dirs=path_prefix, required=True)
  File "/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible/module_utils/basic.py", line 1435, in get_bin_path
    bin_path = get_bin_path(arg=arg, opt_dirs=opt_dirs)
  File "/tmp/ansible_community.general.cpanm_payload_deinpuh_/ansible_community.general.cpanm_payload.zip/ansible/module_utils/common/process.py", line 39, in get_bin_path
    path = os.path.join(d, arg)
  File "/usr/lib64/python3.6/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib64/python3.6/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'
failed: [centos1] (item=tEsTmOdUlEfOuR) => {
    "ansible_loop_var": "item",
    "binary": null,
    "changed": false,
    "invocation": {
        "module_args": {
            "executable": null,
            "from_path": null,
            "installdeps": false,
            "locallib": null,
            "mirror": null,
            "mirror_only": false,
            "mode": "compatibility",
            "name": "tEsTmOdUlEfOuR",
            "name_check": null,
            "notest": false,
            "version": null
        }
    },
    "item": "tEsTmOdUlEfOuR",
    "msg": "Module failed with exception: join() argument must be str or bytes, not 'NoneType'",
    "name": "tEsTmOdUlEfOuR",
    "output": {
        "binary": null,
        "name": "tEsTmOdUlEfOuR",
        "version": null
    },
    "vars": {
        "binary": null,
        "name": "tEsTmOdUlEfOuR",
        "version": null
    },
    "version": null
}

PLAY RECAP *********************************************************************
alpine1                    : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
centos1                    : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
redhat1                    : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
ubuntu1                    : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

Inspection

  • playbook fails gracefully after installing cpanminus on target machine.

ansible documentation states

NOTES:
* Please note that http://search.cpan.org/dist/App-cpanminus/bin/cpanm, cpanm must be installed on the remote host.

so for this reason, I'm leaning towards it not being a bug but would like a second opinion

@jmsalvador2395
Copy link
Contributor Author

Summary

  • Module fails with error
TypeError: can only concatenate str (not "NoneType") to str
  • This module targets a proprietary software called Itential Automation Platform. This software can be installed after signing up for a free trial but I am holding off from doing that unless we decide to test it further.

I cannot conclusively say that this is a bug but to me it seems unlikely

Playbook

---
- name: Test playbook for community.network.iap_token module
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Generate IAP Token
      community.network.iap_token:
        iap_fqdn: null
        iap_port: null
        username: null
        password: null
        validate_certs: "True"
        https: "True"
      register: iap_token_result

    - name: Debug IAP Token Result
      debug:
        var: iap_token_result

Output

0.yaml

ansible-playbook [core 2.14.5]
  config file = None
  configured module search path = ['/home/john/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /data/john/projects/cf/env/lib/python3.10/site-packages/ansible
  ansible collection location = /home/john/.ansible/collections:/usr/share/ansible/collections
  executable location = /data/john/projects/cf/env/bin/ansible-playbook
  python version = 3.10.11 (main, Apr 20 2023, 19:02:41) [GCC 11.2.0] (/data/john/projects/cf/env/bin/python)
  jinja version = 3.1.2
  libyaml = True
No config file found; using defaults
host_list declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
script declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
auto declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
yaml declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
Parsed /data/john/projects/cf/files/ansible/hosts.ini inventory source with ini plugin
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: 0.yaml ***************************************************************
1 plays in /data/john/projects/cf/data/module_yaml/20230720-184644/lv3/community.network.iap_token/0.yaml

PLAY [Test playbook for community.network.iap_token module] ********************

TASK [Generate IAP Token] ******************************************************
task path: /data/john/projects/cf/data/module_yaml/20230720-184644/lv3/community.network.iap_token/0.yaml:7
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: john
<127.0.0.1> EXEC /bin/sh -c 'echo ~john && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/john/.ansible/tmp `"&& mkdir "` echo /home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241 `" && echo ansible-tmp-1689921836.6243913-824273-141938278374241="` echo /home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241 `" ) && sleep 0'
Using module file /home/john/.ansible/collections/ansible_collections/community/network/plugins/modules/iap_token.py
<127.0.0.1> PUT /home/john/.ansible/tmp/ansible-local-824269zfqs830c/tmpkox_rxey TO /home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/ /home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '/data/john/projects/cf/env/bin/python /home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
Traceback (most recent call last):
  File "/home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py", line 107, in <module>
    _ansiballz_main()
  File "/home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py", line 99, in _ansiballz_main
    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
  File "/home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py", line 47, in invoke_module
    runpy.run_module(mod_name='ansible_collections.community.network.plugins.modules.iap_token', init_globals=dict(_module_fqn='ansible_collections.community.network.plugins.modules.iap_token', _modlib_path=modlib_path),
  File "/home/john/miniconda3/envs/3.10/lib/python3.10/runpy.py", line 224, in run_module
    return _run_module_code(code, init_globals, run_name, mod_spec)
  File "/home/john/miniconda3/envs/3.10/lib/python3.10/runpy.py", line 96, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "/home/john/miniconda3/envs/3.10/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/tmp/ansible_community.network.iap_token_payload_xrk_ab0r/ansible_community.network.iap_token_payload.zip/ansible_collections/community/network/plugins/modules/iap_token.py", line 137, in <module>
  File "/tmp/ansible_community.network.iap_token_payload_xrk_ab0r/ansible_community.network.iap_token_payload.zip/ansible_collections/community/network/plugins/modules/iap_token.py", line 133, in main
  File "/tmp/ansible_community.network.iap_token_payload_xrk_ab0r/ansible_community.network.iap_token_payload.zip/ansible_collections/community/network/plugins/modules/iap_token.py", line 90, in get_token
TypeError: can only concatenate str (not "NoneType") to str
fatal: [localhost]: FAILED! => {
    "changed": false,
    "module_stderr": "Traceback (most recent call last):\n  File \"/home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py\", line 107, in <module>\n    _ansiballz_main()\n  File \"/home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py\", line 99, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/home/john/.ansible/tmp/ansible-tmp-1689921836.6243913-824273-141938278374241/AnsiballZ_iap_token.py\", line 47, in invoke_module\n    runpy.run_module(mod_name='ansible_collections.community.network.plugins.modules.iap_token', init_globals=dict(_module_fqn='ansible_collections.community.network.plugins.modules.iap_token', _modlib_path=modlib_path),\n  File \"/home/john/miniconda3/envs/3.10/lib/python3.10/runpy.py\", line 224, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/home/john/miniconda3/envs/3.10/lib/python3.10/runpy.py\", line 96, in _run_module_code\n    _run_code(code, mod_globals, init_globals,\n  File \"/home/john/miniconda3/envs/3.10/lib/python3.10/runpy.py\", line 86, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_community.network.iap_token_payload_xrk_ab0r/ansible_community.network.iap_token_payload.zip/ansible_collections/community/network/plugins/modules/iap_token.py\", line 137, in <module>\n  File \"/tmp/ansible_community.network.iap_token_payload_xrk_ab0r/ansible_community.network.iap_token_payload.zip/ansible_collections/community/network/plugins/modules/iap_token.py\", line 133, in main\n  File \"/tmp/ansible_community.network.iap_token_payload_xrk_ab0r/ansible_community.network.iap_token_payload.zip/ansible_collections/community/network/plugins/modules/iap_token.py\", line 90, in get_token\nTypeError: can only concatenate str (not \"NoneType\") to str\n",
    "module_stdout": "",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}

PLAY RECAP *********************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   


Inspection

  • This module targets a proprietary software called Itential Automation Platform. For this reason, the software cannot be installed and I am unable to test this module further.

For this reason, I cannot conclusively say that this is a bug but to me it seems unlikely

@akondrahman
Copy link
Contributor

@jmsalvador2395 : sample 1 and 8 are not bugs. So we cannot report them. I also agree with your assessment for 2-7. I want to know more about 0. Please share a detailed analysis here.

@jmsalvador2395
Copy link
Contributor Author

Inspection for Sample 0

Summary

  • Module fails with error
TypeError: expected string or bytes-like object
  • fix: comment out the creates field

The creates field is set to true which triggers the type error.
The documentation for this module notes for this field reads:

  • creates
    A filename on the remote node, when it already exists, this step will not
    be run.
    default: null
    added in: version 1.5 of ansible-core

Which implies that a string is the expected type. For that reason I believe this is not a bug

Playbook

---
- name: Execute script with mixed types
  hosts: all
  gather_facts: false

  tasks:
    - name: Run script
      ansible.builtin.script:
        cmd: pwd
        chdir: "{{ chdir | default('/path/to/script') }}"
        creates: "{{ creates | default(true) }}"
        decrypt: "{{ decrypt | default(false) }}"
        executable: "{{ executable | default(None) }}"
        free_form: "{{ free_form | default('This is a string.') }}"
        removes: "{{ removes | default(None) }}"
      register: script_output

    - name: Display script output
      debug:
        var: script_output.stdout

Output

0.yaml

ansible-playbook [core 2.14.5]
  config file = None
  configured module search path = ['/home/john/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /data/john/projects/cf/env/lib/python3.10/site-packages/ansible
  ansible collection location = /home/john/.ansible/collections:/usr/share/ansible/collections
  executable location = /data/john/projects/cf/env/bin/ansible-playbook
  python version = 3.10.11 (main, Apr 20 2023, 19:02:41) [GCC 11.2.0] (/data/john/projects/cf/env/bin/python)
  jinja version = 3.1.2
  libyaml = True
No config file found; using defaults
host_list declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
script declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
auto declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
yaml declined parsing /data/john/projects/cf/files/ansible/hosts.ini as it did not pass its verify_file() method
Parsed /data/john/projects/cf/files/ansible/hosts.ini inventory source with ini plugin
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: 0.yaml ***************************************************************
1 plays in /data/john/projects/cf/data/module_yaml/20230720-184644/lv3/ansible.builtin.script/0.yaml

PLAY [Execute script with mixed types] *****************************************

TASK [Run script] **************************************************************
task path: /data/john/projects/cf/data/module_yaml/20230720-184644/lv3/ansible.builtin.script/0.yaml:7
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<centos1> (0, b'/home/ansible\n', b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0664 for \'/data/john/projects/cf/files/docker_scripts/ssh/cf-key\' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key "/data/john/projects/cf/files/docker_scripts/ssh/cf-key": bad permissions\r\n')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689905036.0940988-3797646-1387221216334 `" && echo ansible-tmp-1689905036.0940988-3797646-1387221216334="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689905036.0940988-3797646-1387221216334 `" ) && sleep 0'"'"''
<alpine1> (0, b'/home/ansible\n', b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0664 for \'/data/john/projects/cf/files/docker_scripts/ssh/cf-key\' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key "/data/john/projects/cf/files/docker_scripts/ssh/cf-key": bad permissions\r\n')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689905036.114634-3797645-265263285473066 `" && echo ansible-tmp-1689905036.114634-3797645-265263285473066="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689905036.114634-3797645-265263285473066 `" ) && sleep 0'"'"''
<centos1> (0, b'ansible-tmp-1689905036.0940988-3797646-1387221216334=/home/ansible/.ansible/tmp/ansible-tmp-1689905036.0940988-3797646-1387221216334\n', b'')
<centos1> ESTABLISH SSH CONNECTION FOR USER: None
<centos1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/74516123ab"' centos1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689905036.0940988-3797646-1387221216334/ > /dev/null 2>&1 && sleep 0'"'"''
<ubuntu1> (0, b'/home/ansible\n', b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0664 for \'/data/john/projects/cf/files/docker_scripts/ssh/cf-key\' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key "/data/john/projects/cf/files/docker_scripts/ssh/cf-key": bad permissions\r\n')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689905036.1256528-3797644-166193130091395 `" && echo ansible-tmp-1689905036.1256528-3797644-166193130091395="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689905036.1256528-3797644-166193130091395 `" ) && sleep 0'"'"''
<alpine1> (0, b'ansible-tmp-1689905036.114634-3797645-265263285473066=/home/ansible/.ansible/tmp/ansible-tmp-1689905036.114634-3797645-265263285473066\n', b'')
<alpine1> ESTABLISH SSH CONNECTION FOR USER: None
<alpine1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/323bb6ff72"' alpine1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689905036.114634-3797645-265263285473066/ > /dev/null 2>&1 && sleep 0'"'"''
<alpine1> (0, b'', b'')
<ubuntu1> (0, b'ansible-tmp-1689905036.1256528-3797644-166193130091395=/home/ansible/.ansible/tmp/ansible-tmp-1689905036.1256528-3797644-166193130091395\n', b'')
<ubuntu1> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/492fe51149"' ubuntu1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689905036.1256528-3797644-166193130091395/ > /dev/null 2>&1 && sleep 0'"'"''
The full traceback is:
Traceback (most recent call last):
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/executor/task_executor.py", line 158, in run
    res = self._execute()
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/executor/task_executor.py", line 633, in _execute
    result = self._handler.run(task_vars=vars_copy)
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/action/script.py", line 52, in run
    if self._remote_file_exists(creates):
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/action/__init__.py", line 204, in _remote_file_exists
    cmd = self._connection._shell.exists(path)
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/shell/__init__.py", line 138, in exists
    cmd = ['test', '-e', shlex.quote(path)]
  File "/home/john/miniconda3/envs/3.10/lib/python3.10/shlex.py", line 329, in quote
    if _find_unsafe(s) is None:
TypeError: expected string or bytes-like object
fatal: [alpine1]: FAILED! => {
    "msg": "Unexpected failure during module execution: expected string or bytes-like object",
    "stdout": ""
}
<ubuntu1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/executor/task_executor.py", line 158, in run
    res = self._execute()
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/executor/task_executor.py", line 633, in _execute
    result = self._handler.run(task_vars=vars_copy)
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/action/script.py", line 52, in run
    if self._remote_file_exists(creates):
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/action/__init__.py", line 204, in _remote_file_exists
    cmd = self._connection._shell.exists(path)
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/shell/__init__.py", line 138, in exists
    cmd = ['test', '-e', shlex.quote(path)]
  File "/home/john/miniconda3/envs/3.10/lib/python3.10/shlex.py", line 329, in quote
    if _find_unsafe(s) is None:
TypeError: expected string or bytes-like object
fatal: [ubuntu1]: FAILED! => {
    "msg": "Unexpected failure during module execution: expected string or bytes-like object",
    "stdout": ""
}
<redhat1> (0, b'/home/ansible\n', b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\n@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @\r\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\r\nPermissions 0664 for \'/data/john/projects/cf/files/docker_scripts/ssh/cf-key\' are too open.\r\nIt is required that your private key files are NOT accessible by others.\r\nThis private key will be ignored.\r\nLoad key "/data/john/projects/cf/files/docker_scripts/ssh/cf-key": bad permissions\r\n')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/ansible/.ansible/tmp `"&& mkdir "` echo /home/ansible/.ansible/tmp/ansible-tmp-1689905036.1503963-3797647-135658171704633 `" && echo ansible-tmp-1689905036.1503963-3797647-135658171704633="` echo /home/ansible/.ansible/tmp/ansible-tmp-1689905036.1503963-3797647-135658171704633 `" ) && sleep 0'"'"''
<centos1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/executor/task_executor.py", line 158, in run
    res = self._execute()
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/executor/task_executor.py", line 633, in _execute
    result = self._handler.run(task_vars=vars_copy)
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/action/script.py", line 52, in run
    if self._remote_file_exists(creates):
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/action/__init__.py", line 204, in _remote_file_exists
    cmd = self._connection._shell.exists(path)
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/shell/__init__.py", line 138, in exists
    cmd = ['test', '-e', shlex.quote(path)]
  File "/home/john/miniconda3/envs/3.10/lib/python3.10/shlex.py", line 329, in quote
    if _find_unsafe(s) is None:
TypeError: expected string or bytes-like object
fatal: [centos1]: FAILED! => {
    "msg": "Unexpected failure during module execution: expected string or bytes-like object",
    "stdout": ""
}
<redhat1> (0, b'ansible-tmp-1689905036.1503963-3797647-135658171704633=/home/ansible/.ansible/tmp/ansible-tmp-1689905036.1503963-3797647-135658171704633\n', b'')
<redhat1> ESTABLISH SSH CONNECTION FOR USER: None
<redhat1> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/data/john/projects/cf/files/docker_scripts/ssh/cf-key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath="/home/john/.ansible/cp/cb04d076e0"' redhat1 '/bin/sh -c '"'"'rm -f -r /home/ansible/.ansible/tmp/ansible-tmp-1689905036.1503963-3797647-135658171704633/ > /dev/null 2>&1 && sleep 0'"'"''
<redhat1> (0, b'', b'')
The full traceback is:
Traceback (most recent call last):
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/executor/task_executor.py", line 158, in run
    res = self._execute()
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/executor/task_executor.py", line 633, in _execute
    result = self._handler.run(task_vars=vars_copy)
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/action/script.py", line 52, in run
    if self._remote_file_exists(creates):
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/action/__init__.py", line 204, in _remote_file_exists
    cmd = self._connection._shell.exists(path)
  File "/data/john/projects/cf/env/lib/python3.10/site-packages/ansible/plugins/shell/__init__.py", line 138, in exists
    cmd = ['test', '-e', shlex.quote(path)]
  File "/home/john/miniconda3/envs/3.10/lib/python3.10/shlex.py", line 329, in quote
    if _find_unsafe(s) is None:
TypeError: expected string or bytes-like object
fatal: [redhat1]: FAILED! => {
    "msg": "Unexpected failure during module execution: expected string or bytes-like object",
    "stdout": ""
}

PLAY RECAP *********************************************************************
alpine1                    : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
centos1                    : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
redhat1                    : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
ubuntu1                    : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

Inspection

  • The "creates" field is set to true. Testing with this field commented out generates a different (and expected) error message.
    The documentation for this module notes for this field:
  • creates
    A filename on the remote node, when it already exists, this step will not
    be run.
    default: null
    added in: version 1.5 of ansible-core

While not explicitly stated, it is implied that this field takes in a string instead of a boolean. For that reason, I believe that this is not a bug.

@akondrahman
Copy link
Contributor

akondrahman commented Jul 26, 2023

it is implied that this field takes in a string instead of a boolean
For a new Ansible user it is hard to imply.

Ideally the documentation should state

creates : string
just like free_form

Instead the Ansible core compiler throws an obscure error when Boolean data is provided. For a typical sysadmin/developer it is very hard to tease out the stack traces, and then find the root cause for this crash, and then assign a proper value for creates.
The code in ansible/plugins/shell/__init__.py should have checked for type of creates, and done proper type handling.

So, @jmsalvador2395 I think this is a bug. Please submit this is a bug report ASAP, if you agree.

@jmsalvador2395
Copy link
Contributor Author

@akondrahman I think this is a fair argument. I will write up a bug report with this in mind and let you know when it's submitted.

Is there anything else you'd like to go over regarding these 9 samples?

@akondrahman
Copy link
Contributor

@jmsalvador2395

Nothing else for the 9 samples. Please share the bug report link, when ready. Also, start looking into the remaining 179 samples that generated crashes.

@jmsalvador2395
Copy link
Contributor Author

@akondrahman submitted the bug report here. Let me know if you are unable to see it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants