Quick way for testing new Ansible roles

Hi,

In the docs, it is written that:

Test It

The actual work to be performed gets added as playbook tasks to tasks/main.yml. Once you’ve added some tasks, create a playbook to test the role and insure it works. Here’s a simple playbook to execute your new role:

# test.yml
# test playbook
- hosts: example
  roles:
  - { role: acme }
 
$ ansible-playbook test.yml

However, this won’t work as the test playbook directory doesn’t have access to the role.


$ ansible-galaxy init sample-role
- sample-role was created successfully

$ cd sample-role/tests/

$ ansible-playbook test.yml
 [WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

 [WARNING]: No inventory was parsed, only implicit localhost is available

 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

ERROR! the role 'sample-role' was not found in /Users/grey.behrangs/Documents/Projects/ansible-roles/sample-role/tests/roles:/Users/grey.behrangs/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/Users/grey.behrangs/Documents/Projects/ansible-roles/sample-role/tests

The error appears to have been in '/Users/grey.behrangs/Documents/Projects/ansible-roles/sample-role/tests/test.yml': line 5, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  roles:
    - sample-role
      ^ here

Is there a quick way to test newly created roles?

Cheers,
Behrang

Host example is not a valid host name.

  • hosts: localhost

ansible-galaxy generates the correct host name (localhost), so the docs on the website seem to be out of date.

But the problem was that the role being developed is not under tests/roles. I added a symlink from tests/roles to the root directory of the role and that fixed the problem.

Have a look at some of our roles https://github.com/Oefenweb?tab=repositories. They are all tested on Travis CI and contain a Vagrantfile for manual testing.

Thanks Mischa.

I ended up doing something similar with Vagrant.

  • Created a symlink from the tests/roles dir to the root dir of the role I am writing

  • Installed the vagrant-hostupdater to add a custom host name to the Vagrant box I use for testing

  • Updated the inventory and added the hostname of the Vagrant box

  • Created a minimal Vagrantfile to spin up the test env:

Vagrant.configure(“2”) do |config|

config.vm.box = “centos/6”

config.vm.network “private_network”, ip: “192.168.33.10”

config.vm.hostname = “myrole.vagrant.test.local”

config.vm.provider “virtualbox” do |vb|

vb.memory = “2048”

end

config.vm.provision “shell”, inline: <<-SHELL

printf ‘[sensu]\nname=sensu\nbaseurl=https://sensu.global.ssl.fastly.net/yum/$releasever/$basearch/\ngpgcheck=0\nenabled=1’ > /etc/yum.repos.d/sensu.repo

yum update -y

yum install libselinux-python sensu -y

SHELL

end

There’s still room for improvement, but this gets the job done for the time being.