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

CRITICAL 'molecule/default/molecule.yml' glob failed. Exiting - Unable to run molecule #4117

Open
6 of 7 tasks
iamgini opened this issue Jan 19, 2024 · 14 comments
Open
6 of 7 tasks
Assignees

Comments

@iamgini
Copy link
Contributor

iamgini commented Jan 19, 2024

Prerequisites

  • This was not already reported in the past (duplicate check)
  • It does reproduce it with code from main branch (latest unreleased version)
  • I include a minimal example for reproducing the bug
  • The bug is not trivial, as for those a direct pull-request is preferred
  • Running pip check does not report any conflicts
  • I was able to reproduce the issue on a different machine
  • The issue is not specific to any driver other than 'default' one

Environment

$ ansible --version
ansible [core 2.16.2]
  config file = /home/iamgini/.ansible.cfg
  configured module search path = ['/home/iamgini/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.12/site-packages/ansible
  ansible collection location = /home/iamgini/collections:/home/iamgini/.ansible/collections/ansible_collections:/usr/share/ansible/collections/ansible_collections:/home/iamgini/ansible/ansible-real-life/ansible-molecule-demo/collections/ansible_collections
  executable location = /usr/bin/ansible
  python version = 3.12.1 (main, Dec 18 2023, 00:00:00) [GCC 13.2.1 20231205 (Red Hat 13.2.1-6)] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = True

What happened

I have a collection with molecule configured and its working perfectly in one folder.
Now I am trying to copy the molecule setup for another collection but facing the below error.

$ molecule create
CRITICAL 'molecule/default/molecule.yml' glob failed.  Exiting.

$ molecule test
CRITICAL 'molecule/default/molecule.yml' glob failed.  Exiting.

$ molecule reset
CRITICAL 'molecule/default/molecule.yml' glob failed.  Exiting.

$ molecule destroy
CRITICAL 'molecule/default/molecule.yml' glob failed.  Exiting.

I tried:

  1. re-copy the working extensions folder from another working collection dir but getting same result!
  2. Freshly done molecule init scenario

Any idea?

Reference code: https://github.com/iamgini/ansible-real-life/tree/main/ansible-molecule-demo

Reproducing example

No response

@priyamsahoo
Copy link

@iamgini, it is hard for us to reproduce the scenario. Is it possible for you to provide more info on the setup, or maybe if you could create a branch with the setups, we can reproduce the error?

@shameoff
Copy link

shameoff commented Feb 9, 2024

I have the same error but maybe in little different case.
When I initialized scenario default and then deleted the folder with that, I was trying to do molecule reset and got CRITICAL 'molecule/default/molecule.yml' glob failed. Exiting.

@iamgini
Copy link
Contributor Author

iamgini commented Feb 27, 2024

@shameoff my apologies for the very late response here!
For me, the molecule reset also giving the same result.

$ molecule reset
CRITICAL 'molecule/default/molecule.yml' glob failed.  Exiting.
```|

Update: I have initiated a separate repo (root/project directory) and repeated the steps and its working!!!

no idea what is the problem with the other folder!

Hope the dev team can give more details verbose option rather than a single line `CRITICAL 'molecule/default/molecule.yml' glob failed.  Exiting.`

@mafalb
Copy link

mafalb commented Feb 27, 2024

I think the error message means that no directory named molecule/default/molecule.yml exists. Sometimes this happens to me when I am running molecule while in the wrong current working directory.

Looking at your reference code, I see that there is no molecule/default/molecule.yml, but extensions/molecule/default/molecule.yml

(assuming that the collection in question is in ansible-real-life/ansible-molecule-demo/ansible-devspaces-demo-brandor5/collections/ansible_collections/sample_namespace/sample_collection)

@Ic0n4
Copy link

Ic0n4 commented Apr 4, 2024

I have the same issue. But I found out what was causing it—for me at least. When I run any molecule command and the molecule/default/molecule.yml file is listed in my .gitignore file, I get the error. After I remove the line in the .gitignore file, all commands work just fine. It is only the molecule.yml file. Every other Molecule file can be listed in the .gitignore file, and it works.

I am using Molecule inside a dev container. Let me know if you need the config for it.

@jovmarkovic
Copy link

jovmarkovic commented Apr 6, 2024

Confirming that removing molecule/default/molecule.yml from .gitignore worked for me as well. I'm using molecule from venv but it's a linux on bare metal. Any idea to why is it causing the issue?

@valkiriaaquatica
Copy link

valkiriaaquatica commented Apr 21, 2024

I was having thas same error as you had.
Scenario of the error I was having (simplified but the error was the same)

  1. molecule init scenario my_role
    Change the files as you need or add you role or files .
  2. Had the structure like this (basic one)
 tree 
.
└── molecule
    └── my_role
        ├── converge.yml
        ├── create.yml
        ├── destroy.yml
        └── molecule.yml

2 directories, 4 files

  1. If you execute from the top folder (not inside molecule and not inside my_role) molecule converge it gives the error, you need to add the -s so the command is: molecule converge -s my_role

Steps to reproduce

  1. molecule init scenario my_role
  2. molecule converge -s my_role (you can change with no problem to create, destroy..)
    Dont use the molecule converge with no scenario defined because it looks for default scenario and gives the CRITICAL error

Steps to reproduce having multiple roles inside one molecule scenario

In the case you want to have multiple roles inside one molecule folder, like this:

tree molecule/
molecule/
├── my_role
│   ├── converge.yml
│   ├── create.yml
│   ├── destroy.yml
│   └── molecule.yml
└── my_role_2
    ├── converge.yml
    ├── create.yml
    ├── destroy.yml
    └── molecule.yml

2 directories, 8 files

To run my_role -> molecule converge -s my_role
To run my_role_2 -> molecule converge -s my_role_2

To reset my_role_1-> Below

molecule reset -s my_role
INFO     my_role scenario test matrix: 
INFO     Performing prerun with role_name_check=0...
INFO     Removing /home/myuser/.cache/molecule/tmp/my_role

I have tried also adding a .gitignore with this content:
molecule/
in the same directory as molecule folder and have 0 problems.

@iamgini
Copy link
Contributor Author

iamgini commented Apr 22, 2024

I was having thas same error as you had. Scenario of the error I was having (simplified but the error was the same)

  1. molecule init scenario mi_rol_ansible
    Change the files as you need
  2. Had the structure like this
 tree 
.
└── molecule
    └── my_role
        ├── converge.yml
        ├── create.yml
        ├── destroy.yml
        └── molecule.yml

2 directories, 4 files
  1. Tried with molecule converge from molecule direcotory, from my role directory and from converge, verify directory, always had the same error: CRITICAL 'molecule/default/molecule.yml' glob failed. Exiting.

The solution is really straighforward, just create molecule and default directories inside the role, like this

tree molecule/
molecule/
└── my_role
    └── molecule
        └── default
            ├── converge.yml
            ├── create.yml
            ├── destroy.yml
            └── molecule.yml

3 directories, 4 files

Execute molecule converge from /my_role directory and it works

Did you mean to use separate molecule content for each roles?

#4117 (comment)

@valkiriaaquatica
Copy link

@iamgini Hey!, I have just updated the comment, now is more clear and straight forward with an example with two roles inside one molecule scenario, let me know if that helps you

@iamgini
Copy link
Contributor Author

iamgini commented Apr 22, 2024

@valkiriaaquatica oh ok. This is also good.

Our approach is a common molecule directory

├── ansible.cfg
├── collections
│   └── ansible_collections
│       ├── iamgini
│       │   ├── meetupdemo
│       │   │   ├── docs
│       │   │   ├── extensions
│       │   │   │   └── molecule
│       │   │   │       └── default
│       │   │   │           ├── backup
│       │   │   │           │   └── prepare.yml
│       │   │   │           ├── converge.yml
│       │   │   │           ├── create.yml
│       │   │   │           ├── destroy.yml
│       │   │   │           ├── molecule.yml
│       │   │   │           ├── requirements.yml
│       │   │   │           ├── tasks
│       │   │   │           │   └── create-fail.yml
│       │   │   │           └── verify.yml
│       │   │   ├── galaxy.yml
│       │   │   ├── meta
│       │   │   │   └── runtime.yml
│       │   │   ├── playbooks
│       │   │   │   └── install_web.yaml
│       │   │   ├── plugins
│       │   │   │   └── README.md
│       │   │   ├── README.md
│       │   │   └── roles
│       │   │       └── web
│       │   │           ├── defaults
│       │   │           │   └── main.yml
│       │   │           ├── files
│       │   │           ├── handlers
│       │   │           │   └── main.yml
│       │   │           ├── meta
│       │   │           │   └── main.yml
│       │   │           ├── README.md
│       │   │           ├── tasks
│       │   │           │   └── main.yml
│       │   │           ├── templates
│       │   │           ├── tests
│       │   │           │   ├── inventory
│       │   │           │   └── test.yml
│       │   │           └── vars

@valkiriaaquatica
Copy link

valkiriaaquatica commented Apr 22, 2024

@iamgini thanks for the info. I've just created your example asi is shown below (quick approach) but instead of giving the inside folder of molecule the default value i changed it to my_rol_of_iamgini (execute the molecule init scenario my_rol_of_iamgini) .

myuser@ubuntu-dev:/tmp$ tree ansible_collections/
ansible_collections/
└── iamgini
    └── meetupdemo
        ├── docs
        ├── extensions
        │   └── molecule
        │       └── my_rol_of_iamgini
        │           ├── backup
        │           │   └── prepare.yml
        │           ├── converge.yml
        │           ├── create.yml
        │           ├── destroy.yml
        │           ├── molecule.yml
        │           ├── requirements.yml
        │           ├── tasks
        │           │   └── create-fail.yml
        │           └── verify.yml
        ├── galaxy.yml
        ├── meta
        │   └── runtime.yml
        ├── playbooks
        │   └── install_web.yml
        ├── plugins
        │   └── README.md
        └── roles
            └── web
                ├── defaults
                │   └── main.yml
                ├── files
                ├── handlers
                │   └── main.yml
                ├── meta
                │   └── main.yml
                ├── README.md
                ├── tasks
                │   └── main.yml
                ├── templates
                ├── tests
                │   ├── inventory
                │   └── test.yml
                └── vars
                    └── main.yml

20 directories, 21 files

Then i move to route below and exexute the following

myuser@ubuntu-dev:/tmp/ansible_collections/iamgini/meetupdemo/extensions$ ls
molecule
myuser@ubuntu-dev:/tmp/ansible_collections/iamgini/meetupdemo/extensions$ molecule converge -s my_rol_of_iamgini
INFO     my_rol_of_iamgini scenario test matrix: dependency, create, prepare, converge
INFO     Performing prerun with role_name_check=0...
INFO     Running my_rol_of_iamgini > dependency

Hope it helps you

@Thomas-McKanna
Copy link

As was mentioned by @Ic0n4, Molecule fails to find the glob if the molecule files are under a folder in .gitignore:

I have the same issue. But I found out what was causing it—for me at least. When I run any molecule command and the molecule/default/molecule.yml file is listed in my .gitignore file, I get the error. After I remove the line in the .gitignore file, all commands work just fine. It is only the molecule.yml file. Every other Molecule file can be listed in the .gitignore file, and it works.

Is there any reason for this? I have a use case where I want my molecule files to not be checked into version control. This behavior seems unintentional to me.

@onwsk8r
Copy link

onwsk8r commented May 21, 2024

I had this problem when I accidentally named the parent directory extension instead of extensions and I was in the directory:

cd extension
❯ molecule test --all
CRITICAL 'molecule/*/molecule.yml' glob failed.  Exiting.
❯ cd ..
❯ mv extension{,s}
❯ cd extensions
❯ molecule test --all
WARNING  Driver podman does not provide a schema.
INFO     Performing prerun with role_name_check=0...
INFO     Running nginx > dependency
WARNING  Skipping, missing the requirements file.
WARNING  Skipping, missing the requirements file.

@gravyflex
Copy link

I had this issue and I could not figure it out:

-rw-r--r--  1 user  staff  138 27 Aug 13:04  molecule.yml
-rw-r--r--  1 user  staff  202 27 Aug 12:11 converge.yml

The molecule file had a space at the start of the file name. 🤦

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

No branches or pull requests