Ansible Molecule Testing
Ansible Molecule Testing#
Molecule aids in the development and testing of Ansible roles.
Red Hat took over development of Molecule in September 2018d
Installation#
See the ansible molecule installation notes
pip install --user molecule
Getting Started#
Generate a new role
molecule init role -r my-new-role
To initialise molecule within an existing role
molecule init scenario -r my-role-name
The following folders are generated:
$ ls
README.md defaults/ handlers/ meta/ molecule/ tasks/ vars/
molecule/
- contains various scenarios - test suites for created roles. You can have as many scenarios as you want and run one after the other
The scenario default
contains:
$ ls
Dockerfile.j2 INSTALL.rst molecule.yml playbook.yml tests/
Dockerfile.j2
is the jinja template file used to create a docker image to test your role againstINSTALL.rst
install instructions on additional software or steps for molecule to interface with the drivermolecule.yml
central configuration entry pointplaybook.yml
the playbook run against the drivertests/
is the test directory as molecule usestest infra
as the default verifier. Allowing you to run specific tests about the state of a container after the playbook is run.
Molecule.yml#
Configures the components
dependency
- dependency manager (ansible galaxy)driver
- the provider of the instance to test against (docker, azure, ec2, linode)lint
- enforce best practices when writing yamlplatforms
- name (distrribution) and the group it belongs toprovisioner
scenario
- control scenario sequence orderverifier
- package that is doing the state tests (TestInfra)
Running a test sequence#
Using a virtual env in benefitial
Ensure you have everything you need installed in:
test-role/molecule/default/INSTALL.rst
Check docker is running with a sanity check:
docker run hello-world
Tell molecule to create the instance
molecule create
Verify that the instance has been created with
molecule list
Add a task to test-role/tasks/main.yml
:
- name: Molecule Hello World!
debug:
msg: Hello, World!
Tell molecule to test the role against the instance:
molecule converge
To manually inspect the instance afterwards:
molecule login
Destroy the instance with:
molecule destroy
The
--debug
option can be used to get more verbose output
Full Test Suite#
To run the full sequence of tests:
molecule test
Tell molecule not to destroy if the test fails:
--destroy=never