Skip to content

ansible-sign stumbles over looping symlink #55

@Thulium-Drake

Description

@Thulium-Drake

Hi there!

In the latest version of ansible-lint a folder (.ansible) is created in the role directory (when linting roles) which contains a symlink to the role folder itself. However, ansible-sign doesn't like it and borks:

t$ ansible-sign project gpg-sign .
Traceback (most recent call last):
  File "/home/ansible/.local/bin/ansible-sign", line 8, in <module>
    sys.exit(run())
             ~~~^^
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/cli.py", line 374, in run
    return main(sys.argv[1:])
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/cli.py", line 364, in main
    exitcode = cli.run_command()
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/cli.py", line 46, in run_command
    return self.args.func()
           ~~~~~~~~~~~~~~^^
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/cli.py", line 321, in gpg_sign
    checksum_file_contents = self._generate_checksum_manifest()
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/cli.py", line 161, in _generate_checksum_manifest
    manifest = checksum.generate_gnu_style()
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/checksum/base.py", line 119, in generate_gnu_style
    calculated = self.calculate_checksums_from_root(verifying=False)
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/checksum/base.py", line 147, in calculate_checksums_from_root
    for path in self.differ.list_files(verifying=verifying):
                ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/checksum/differ/base.py", line 51, in list_files
    gathered = self.gather_files(verifying=verifying)
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/ansible_sign/checksum/differ/distlib_manifest.py", line 42, in gather_files
    manifest.process_directive(line)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/distlib/manifest.py", line 163, in process_directive
    if not self._include_pattern(pattern, anchor=False):
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/distlib/manifest.py", line 280, in _include_pattern
    self.findall()
    ~~~~~~~~~~~~^^
  File "/home/ansible/.local/share/pipx/venvs/ansible-sign/lib64/python3.13/site-packages/distlib/manifest.py", line 79, in findall
    stat = os.stat(fullname)
OSError: [Errno 40] Too many levels of symbolic links: '/home/ansible/roles/apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt/.ansible/roles/thulium_drake.apt'

There is an issue open on ansible-lint (ansible/ansible-lint#4533) regarding the clutter, but I think it's wise to see if it's possible to teach ansible-sign not to explode this spectacularly 🎆 :-)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions