ansible/molecule

ERROR! the role 'acme.myrole' was not found. "symlink to current repository" not used?!

maartenq opened this issue · 3 comments

Issue Type

  • Bug report

Molecule and Ansible details

ansible --version && molecule --version
ansible [core 2.12.6]
  config file = None
  configured module search path = ['/Users/maarten/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/ansible
  ansible collection location = /Users/maarten/.ansible/collections:/usr/share/ansible/collections
  executable location = /Users/maarten/.pyenv/versions/test/bin/ansible
  python version = 3.10.4 (main, Jun  4 2022, 20:32:38) [Clang 13.0.0 (clang-1300.0.29.30)]
  jinja version = 3.1.2
  libyaml = True
molecule 3.6.1 using python 3.10
    ansible:2.12.6
    delegated:3.6.1 from molecule
    docker:1.1.0 from molecule_docker requiring collections: community.docker>=1.9.1

Molecule installation method (one of):

  • pip

Ansible installation method (one of):

  • pip

test setup:

❯ pwd
/Users/maarten/test
❯ pyenv virtualenv test
❯ pyenv activate test
❯ pip install -U pip setuptools
❯ pip install  "molecule[docker]" ansible
❯ pyenv which molecule
/Users/maarten/.pyenv/versions/test/bin/molecule
❯ rm -rf ~/.cache/molecule
❯ molecule init role -d docker acme.myrole
❯ cd myrole
❯ cat << EOF > meta/main.yml
galaxy_info:
  author: My Name
  role_name: myrole
  namespace: acme
  description: My role description
  license: MIT
EOF
❯ molecule create

Detail any linters or test runners used:

  • none

Desired Behavior

Have molecule converge find the role without setting the ANSIBLE_ROLES_PATH environment variable on command line explicitly:


❯  ANSIBLE_ROLES_PATH=/Users/maarten/.cache/ansible-compat/a8f7d1/roles:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles molecule --debug converge
DEBUG    Validating schema /Users/maarten/test/myrole/molecule/default/molecule.yml.
INFO     default scenario test matrix: dependency, create, prepare, converge
INFO     Performing prerun...
INFO     Set ANSIBLE_LIBRARY=/Users/maarten/.cache/ansible-compat/a8f7d1/modules:/Users/maarten/.ansible/plugins/modules:/usr/share/ansible/plugins/modules
INFO     Set ANSIBLE_COLLECTIONS_PATH=/Users/maarten/.cache/ansible-compat/a8f7d1/collections:/Users/maarten/.ansible/collections:/usr/share/ansible/collections
INFO     Using /Users/maarten/.cache/ansible-compat/a8f7d1/roles/acme.myrole symlink to current repository in order to enable Ansible to find the role using its expected full name.
INFO     Running default > dependency
WARNING  Skipping, missing the requirements file.
WARNING  Skipping, missing the requirements file.
INFO     Running default > create
WARNING  Skipping, instances already created.
INFO     Running default > prepare
WARNING  Skipping, prepare playbook not configured.
INFO     Running default > converge
INFO     Sanity checks: 'docker'
DEBUG: ANSIBLE ENVIRONMENT:
ANSIBLE_COLLECTIONS_PATH: /Users/maarten/.cache/molecule/myrole/default/collections:/Users/maarten/.ansible/collections:/usr/share/ansible/collections:/etc/ansible/collections
ANSIBLE_CONFIG: /Users/maarten/.cache/molecule/myrole/default/ansible.cfg
ANSIBLE_FILTER_PLUGINS: /Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/molecule/provisioner/ansible/plugins/filter:/Users/maarten/.cache/molecule/myrole/default/plugins/filter:/Users/maarten/test/myrole/plugins/filter:/Users/maarten/.ansible/plugins/filter:/usr/share/ansible/plugins/filter
ANSIBLE_FORCE_COLOR: '1'
ANSIBLE_LIBRARY: /Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/molecule/provisioner/ansible/plugins/modules:/Users/maarten/.cache/molecule/myrole/default/library:/Users/maarten/test/myrole/library:/Users/maarten/.ansible/plugins/modules:/usr/share/ansible/plugins/modules
ANSIBLE_ROLES_PATH: /Users/maarten/.cache/molecule/myrole/default/roles:/Users/maarten/test:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/Users/maarten/.cache/ansible-compat/a8f7d1/roles:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles

DEBUG: MOLECULE ENVIRONMENT:
MOLECULE_DEBUG: 'True'
MOLECULE_DEPENDENCY_NAME: galaxy
MOLECULE_DRIVER_NAME: docker
MOLECULE_ENV_FILE: /Users/maarten/test/myrole/.env.yml
MOLECULE_EPHEMERAL_DIRECTORY: /Users/maarten/.cache/molecule/myrole/default
MOLECULE_FILE: /Users/maarten/.cache/molecule/myrole/default/molecule.yml
MOLECULE_INSTANCE_CONFIG: /Users/maarten/.cache/molecule/myrole/default/instance_config.yml
MOLECULE_INVENTORY_FILE: /Users/maarten/.cache/molecule/myrole/default/inventory/ansible_inventory.yml
MOLECULE_PROJECT_DIRECTORY: /Users/maarten/test/myrole
MOLECULE_PROVISIONER_NAME: ansible
MOLECULE_SCENARIO_DIRECTORY: /Users/maarten/test/myrole/molecule/default
MOLECULE_SCENARIO_NAME: default
MOLECULE_STATE_FILE: /Users/maarten/.cache/molecule/myrole/default/state.yml
MOLECULE_VERIFIER_NAME: ansible
MOLECULE_VERIFIER_TEST_DIRECTORY: /Users/maarten/test/myrole/molecule/default/tests

DEBUG: SHELL REPLAY:
ANSIBLE_COLLECTIONS_PATH=/Users/maarten/.cache/molecule/myrole/default/collections:/Users/maarten/.ansible/collections:/usr/share/ansible/collections:/etc/ansible/collections ANSIBLE_CONFIG=/Users/maarten/.cache/molecule/myrole/default/ansible.cfg ANSIBLE_FILTER_PLUGINS=/Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/molecule/provisioner/ansible/plugins/filter:/Users/maarten/.cache/molecule/myrole/default/plugins/filter:/Users/maarten/test/myrole/plugins/filter:/Users/maarten/.ansible/plugins/filter:/usr/share/ansible/plugins/filter ANSIBLE_FORCE_COLOR=1 ANSIBLE_LIBRARY=/Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/molecule/provisioner/ansible/plugins/modules:/Users/maarten/.cache/molecule/myrole/default/library:/Users/maarten/test/myrole/library:/Users/maarten/.ansible/plugins/modules:/usr/share/ansible/plugins/modules ANSIBLE_ROLES_PATH=/Users/maarten/.cache/molecule/myrole/default/roles:/Users/maarten/test:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/Users/maarten/.cache/ansible-compat/a8f7d1/roles:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles MOLECULE_DEBUG=True MOLECULE_DEPENDENCY_NAME=galaxy MOLECULE_DRIVER_NAME=docker MOLECULE_ENV_FILE=/Users/maarten/test/myrole/.env.yml MOLECULE_EPHEMERAL_DIRECTORY=/Users/maarten/.cache/molecule/myrole/default MOLECULE_FILE=/Users/maarten/.cache/molecule/myrole/default/molecule.yml MOLECULE_INSTANCE_CONFIG=/Users/maarten/.cache/molecule/myrole/default/instance_config.yml MOLECULE_INVENTORY_FILE=/Users/maarten/.cache/molecule/myrole/default/inventory/ansible_inventory.yml MOLECULE_PROJECT_DIRECTORY=/Users/maarten/test/myrole MOLECULE_PROVISIONER_NAME=ansible MOLECULE_SCENARIO_DIRECTORY=/Users/maarten/test/myrole/molecule/default MOLECULE_SCENARIO_NAME=default MOLECULE_STATE_FILE=/Users/maarten/.cache/molecule/myrole/default/state.yml MOLECULE_VERIFIER_NAME=ansible MOLECULE_VERIFIER_TEST_DIRECTORY=/Users/maarten/test/myrole/molecule/default/tests


PLAY [Converge] ****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [instance]

TASK [Include acme.myrole] *****************************************************

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

Actual Behaviour

Converge (without setting the ANSIBLE_ROLES_PATH environment variable on command line explicitly):

❯ molecule --debug converge
DEBUG    Validating schema /Users/maarten/test/myrole/molecule/default/molecule.yml.
INFO     default scenario test matrix: dependency, create, prepare, converge
INFO     Performing prerun...
INFO     Set ANSIBLE_LIBRARY=/Users/maarten/.cache/ansible-compat/a8f7d1/modules:/Users/maarten/.ansible/plugins/modules:/usr/share/ansible/plugins/modules
INFO     Set ANSIBLE_COLLECTIONS_PATH=/Users/maarten/.cache/ansible-compat/a8f7d1/collections:/Users/maarten/.ansible/collections:/usr/share/ansible/collections
INFO     Set ANSIBLE_ROLES_PATH=/Users/maarten/.cache/ansible-compat/a8f7d1/roles:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles
INFO     Using /Users/maarten/.cache/ansible-compat/a8f7d1/roles/acme.myrole symlink to current repository in order to enable Ansible to find the role using its expected full name.
INFO     Running default > dependency
WARNING  Skipping, missing the requirements file.
WARNING  Skipping, missing the requirements file.
INFO     Running default > create
WARNING  Skipping, instances already created.
INFO     Running default > prepare
WARNING  Skipping, prepare playbook not configured.
INFO     Running default > converge
INFO     Sanity checks: 'docker'
DEBUG: ANSIBLE ENVIRONMENT:
ANSIBLE_COLLECTIONS_PATH: /Users/maarten/.cache/molecule/myrole/default/collections:/Users/maarten/.ansible/collections:/usr/share/ansible/collections:/etc/ansible/collections
ANSIBLE_CONFIG: /Users/maarten/.cache/molecule/myrole/default/ansible.cfg
ANSIBLE_FILTER_PLUGINS: /Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/molecule/provisioner/ansible/plugins/filter:/Users/maarten/.cache/molecule/myrole/default/plugins/filter:/Users/maarten/test/myrole/plugins/filter:/Users/maarten/.ansible/plugins/filter:/usr/share/ansible/plugins/filter
ANSIBLE_FORCE_COLOR: '1'
ANSIBLE_LIBRARY: /Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/molecule/provisioner/ansible/plugins/modules:/Users/maarten/.cache/molecule/myrole/default/library:/Users/maarten/test/myrole/library:/Users/maarten/.ansible/plugins/modules:/usr/share/ansible/plugins/modules
ANSIBLE_ROLES_PATH: '/Users/maarten/.cache/molecule/myrole/default/roles:/Users/maarten/test:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:'

DEBUG: MOLECULE ENVIRONMENT:
MOLECULE_DEBUG: 'True'
MOLECULE_DEPENDENCY_NAME: galaxy
MOLECULE_DRIVER_NAME: docker
MOLECULE_ENV_FILE: /Users/maarten/test/myrole/.env.yml
MOLECULE_EPHEMERAL_DIRECTORY: /Users/maarten/.cache/molecule/myrole/default
MOLECULE_FILE: /Users/maarten/.cache/molecule/myrole/default/molecule.yml
MOLECULE_INSTANCE_CONFIG: /Users/maarten/.cache/molecule/myrole/default/instance_config.yml
MOLECULE_INVENTORY_FILE: /Users/maarten/.cache/molecule/myrole/default/inventory/ansible_inventory.yml
MOLECULE_PROJECT_DIRECTORY: /Users/maarten/test/myrole
MOLECULE_PROVISIONER_NAME: ansible
MOLECULE_SCENARIO_DIRECTORY: /Users/maarten/test/myrole/molecule/default
MOLECULE_SCENARIO_NAME: default
MOLECULE_STATE_FILE: /Users/maarten/.cache/molecule/myrole/default/state.yml
MOLECULE_VERIFIER_NAME: ansible
MOLECULE_VERIFIER_TEST_DIRECTORY: /Users/maarten/test/myrole/molecule/default/tests

DEBUG: SHELL REPLAY:
ANSIBLE_COLLECTIONS_PATH=/Users/maarten/.cache/molecule/myrole/default/collections:/Users/maarten/.ansible/collections:/usr/share/ansible/collections:/etc/ansible/collections ANSIBLE_CONFIG=/Users/maarten/.cache/molecule/myrole/default/ansible.cfg ANSIBLE_FILTER_PLUGINS=/Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/molecule/provisioner/ansible/plugins/filter:/Users/maarten/.cache/molecule/myrole/default/plugins/filter:/Users/maarten/test/myrole/plugins/filter:/Users/maarten/.ansible/plugins/filter:/usr/share/ansible/plugins/filter ANSIBLE_FORCE_COLOR=1 ANSIBLE_LIBRARY=/Users/maarten/.pyenv/versions/3.10.4/envs/test/lib/python3.10/site-packages/molecule/provisioner/ansible/plugins/modules:/Users/maarten/.cache/molecule/myrole/default/library:/Users/maarten/test/myrole/library:/Users/maarten/.ansible/plugins/modules:/usr/share/ansible/plugins/modules ANSIBLE_ROLES_PATH=/Users/maarten/.cache/molecule/myrole/default/roles:/Users/maarten/test:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles: MOLECULE_DEBUG=True MOLECULE_DEPENDENCY_NAME=galaxy MOLECULE_DRIVER_NAME=docker MOLECULE_ENV_FILE=/Users/maarten/test/myrole/.env.yml MOLECULE_EPHEMERAL_DIRECTORY=/Users/maarten/.cache/molecule/myrole/default MOLECULE_FILE=/Users/maarten/.cache/molecule/myrole/default/molecule.yml MOLECULE_INSTANCE_CONFIG=/Users/maarten/.cache/molecule/myrole/default/instance_config.yml MOLECULE_INVENTORY_FILE=/Users/maarten/.cache/molecule/myrole/default/inventory/ansible_inventory.yml MOLECULE_PROJECT_DIRECTORY=/Users/maarten/test/myrole MOLECULE_PROVISIONER_NAME=ansible MOLECULE_SCENARIO_DIRECTORY=/Users/maarten/test/myrole/molecule/default MOLECULE_SCENARIO_NAME=default MOLECULE_STATE_FILE=/Users/maarten/.cache/molecule/myrole/default/state.yml MOLECULE_VERIFIER_NAME=ansible MOLECULE_VERIFIER_TEST_DIRECTORY=/Users/maarten/test/myrole/molecule/default/tests


PLAY [Converge] ****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [instance]

TASK [Include acme.myrole] *****************************************************
ERROR! the role 'acme.myrole' was not found in /Users/maarten/test/myrole/molecule/default/roles:/Users/maarten/.cache/molecule/myrole/default/roles:/Users/maarten/test:/Users/maarten/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/Users/maarten/test/myrole:/Users/maarten/test/myrole/molecule/default

The error appears to be in '/Users/maarten/test/myrole/molecule/default/converge.yml': line 7, column 15, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

      include_role:
        name: "acme.myrole"
              ^ here

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

WARNING  Retrying execution failure 2 of: ansible-playbook --diff --inventory /Users/maarten/.cache/molecule/myrole/default/inventory --skip-tags molecule-notest,notest /Users/maarten/test/myrole/molecule/default/converge.yml
CRITICAL Ansible return code was 2, command was: ['ansible-playbook', '--diff', '--inventory', '/Users/maarten/.cache/molecule/myrole/default/inventory', '--skip-tags', 'molecule-notest,notest', '/Users/maarten/test/myrole/molecule/default/converge.yml'][

could you please try it in pre release version?

pip install molecule== 4.0.0a0

0uep commented

Reproduce the issue with Molecule-3.6.1

# optional: remove all user-installed Python packages
# python3 -m pip list --user | awk '{print $1}' | tail +3 | xargs python3 -m pip uninstall -y

git clone https://github.com/kilip/ansible-role-workstation
cd ansible-role-workstation

python3 -m pip install --user ansible molecule molecule-docker docker
python3 -m molecule test

The error

ERROR! the role 'kilip.workstation' was not found in /home/o/prj/ansible-role-workstation/molecule/default/playbooks/roles:/home/o/.cache/molecule/ansible-role-workstation/default/roles:/home/o/prj:/home/o/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/home/o/prj/ansible-role-workstation:/home/o/prj/ansible-role-workstation/molecule/default/playbooks

The error appears to be in '/home/o/prj/ansible-role-workstation/molecule/default/playbooks/base.yml': line 8, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  roles:
    - "kilip.workstation"
      ^ here
WARNING  Retrying execution failure 1 of: ansible-playbook --inventory /home/o/.cache/molecule/ansible-role-workstation/default/inventory --skip-tags molecule-notest,notest --syntax-check /home/o/prj/ansible-role-workstation/molecule/default/playbooks/base.yml

Install molecule v4.0.0a0

$ python3 -m pip install --user --index-url https://test.pypi.org/simple --extra-index-url https://pypi.org/simple molecule==4.0.0a0
[...]
Installing collected packages: molecule
  Attempting uninstall: molecule
    Found existing installation: molecule 3.6.1
    Uninstalling molecule-3.6.1:
      Successfully uninstalled molecule-3.6.1
Successfully installed molecule-4.0.0a0

Success

python3 -m molecule test

Release molecule-4.0.0 ASAP

Thank you @ssbarnea @zhan9san for your great and very useful work. But, please, release molecule-4.0.0 as soon as possible because this is a blocking issue for many Molecule users.

Similar issue

If think this issue is the same as #3404

This issue is fixed in latest version.

pip install -U molecule