Quick way for testing new Ansible roles

543 views
Skip to first unread message

Behrang

unread,
May 21, 2018, 10:01:24 PM5/21/18
to Ansible Project
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

BIJAY PARIDA

unread,
May 21, 2018, 11:22:28 PM5/21/18
to Ansible Project
Host example is not a valid host name.

- hosts: localhost

Behrang

unread,
May 22, 2018, 4:01:26 AM5/22/18
to Ansible Project
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.

Mischa ter Smitten

unread,
May 23, 2018, 3:15:14 AM5/23/18
to Ansible Project
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.

Behrang

unread,
May 23, 2018, 3:28:26 AM5/23/18
to Ansible Project
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.
Reply all
Reply to author
Forward
0 new messages