willshersystems / ansible-sshd

Ansible role to configure the OpenSSH server daemon
https://galaxy.ansible.com/willshersystems/sshd
GNU Lesser General Public License v3.0
244 stars 136 forks source link

'__sshd_required_facts' is undefined on Amazon Linux 2023 #261

Open nomike opened 1 year ago

nomike commented 1 year ago

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"
nomike commented 1 year ago

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.

nomike commented 1 year ago

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'
nomike commented 1 year ago

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

mattwillsher commented 1 year ago

@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
mattwillsher commented 2 months ago

I don't have an AWS account to be able to check this, so I'm not sure if this is still an issue given subsequence changes as a result of the PRs. @nomike can you provide an update?