ansible-sshd
ansible-sshd copied to clipboard
'__sshd_required_facts' is undefined on Amazon Linux 2023
I'm getting this error on Amazon Linux 2023:
TASK [willshersystems.sshd : Ensure ansible_facts used by role] ***********************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The conditional check 'not ansible_facts.keys() | list | intersect(__sshd_required_facts) == __sshd_required_facts' failed. The error was: error while evaluating conditional (not ansible_facts.keys() | list | intersect(__sshd_required_facts) == __sshd_required_facts): '__sshd_required_facts' is undefined. '__sshd_required_facts' is undefined\n\nThe error appears to be in '/root/.ansible/roles/willshersystems.sshd/tasks/variables.yml': line 2, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n- name: Ensure ansible_facts used by role\n ^ here\n"}
# ansible --version
ansible [core 2.15.5]
config file = /root/ansible_bootstrap/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.9.16 (main, Feb 23 2023, 00:00:00) [GCC 11.3.1 20221121 (Red Hat 11.3.1-4)] (/usr/bin/python3)
jinja version = 3.1.2
libyaml = True
# cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
SUPPORT_END="2028-03-01"
I guess an appropriately named file needs to be put in vars/ to fix this.
If someone could tell me what the file should be named like, I could submit a pull request.
I was too quick.
The issue is this:
# ansible-galaxy install willshersystems.sshd --force -vvv
ansible-galaxy [core 2.15.5]
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible-galaxy
python version = 3.9.16 (main, Sep 8 2023, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] (/usr/bin/python3)
jinja version = 3.1.2
libyaml = True
No config file found; using defaults
Starting galaxy role install process
Processing role willshersystems.sshd
Opened /root/.ansible/galaxy_token
- downloading role 'sshd', owned by willshersystems
- downloading role from https://github.com/willshersystems/ansible-sshd/archive/v0.21.0.tar.gz
- extracting willshersystems.sshd to /root/.ansible/roles/willshersystems.sshd
[WARNING]: Illegal filename '..': '..' is not allowed
ERROR! Unexpected Exception, this is probably a bug: join() missing 1 required positional argument: 'a'
the full traceback was:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/ansible/cli/__init__.py", line 659, in cli_executor
exit_code = cli.run()
File "/usr/local/lib/python3.9/site-packages/ansible/cli/galaxy.py", line 719, in run
return context.CLIARGS['func']()
File "/usr/local/lib/python3.9/site-packages/ansible/cli/galaxy.py", line 119, in method_wrapper
return wrapped_method(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/ansible/cli/galaxy.py", line 1370, in execute_install
self._execute_install_role(role_requirements)
File "/usr/local/lib/python3.9/site-packages/ansible/cli/galaxy.py", line 1469, in _execute_install_role
installed = role.install()
File "/usr/local/lib/python3.9/site-packages/ansible/galaxy/role.py", line 426, in install
setattr(member, attr, os.path.join(*n_final_parts))
TypeError: join() missing 1 required positional argument: 'a'
I've filed a bug report for Amazon Linux 2023: https://github.com/amazonlinux/amazon-linux-2023/issues/514
Additionally I filed a bug report for Ansible: https://github.com/ansible/ansible/issues/81965
And I filled the following pull request: https://github.com/ansible/ansible/pull/81966
It might still be worth a look here, as the issue seems to be triggered by a file called ".." being included in ansible-sshd.
See https://github.com/ansible/ansible/blame/4f04df75ccacbd8eafb6c6b93333d2e799c505f1/lib/ansible/galaxy/role.py#L415
@nomike can you confirm this is/isn't working with v0.22.0? You may need to change your requirements.yaml to:
- name: willshersystems.sshd
src: https://github.com/willshersystems/ansible-sshd
version: v0.22.0