directory layout for grouping playbooks - ansible.cfg ?

Hi,

we have several playbooks and roles in our project so I try to organize them in that way:

\---deployment \---trunk| ansible.cfg`

app1.yml
| ....yml
| app[N].yml
±–files
±–filter_plugins
±–group_vars
±–library
±–playbooks
±–provisioning

binaryBuild.yml
root.yml
site.yml
user.yml
±–roles
| | | test-java.yml
±–java

`

we put the ansible.cfg to the root of our project (trunk) to keep all settings in a central place, so whenever somebody checks out that project it should be executable.

Now, when invoking

ansible-playbook -i /path/to/inventory/hosts playbooks/provisioning/site.yml

the execution faills because of missing roles, filter_plugins and so on. Ansible tries to load those relative to the playbook - and not relative to the current directory!

Only workaround I found is to add a list of settings to the ansible.cfg file:

`
roles_path = roles: …/roles: …/…/roles
filter_plugins = filter_plugins:…/filter_plugins:…/…/filter_plugins:~/.ansible/plugins/filter_plugins/:/usr/share/ansible_plugins/filter_plugins

`


Using ${ANSIBLE_HOME} in the ansible.cfg to have fixed path also did not work for me.

=> What is the "best practice" to organize real-life projects, containing a huge list of playbooks? 
=> Also, where do people put their "test playbooks", for integration testing of roles ?

I dont want a solution based on 
* ansible.cfg outside the project ( HOME directory or any other user dependant place)
* symlinks

I couldn´t find any hint concerning "test playbooks" and "organizing modules" in the documentation.

Thanx for any advice, 

Torsten

in addition, also the group_vars cannot be resolved - they are expected relative to the playbook(s) - or the inventory hosts file.

=> how do i define common group_vars/all.yml - when i want to structure my playbooks in (sub) directories ?

Regards, Torsten

Hi,
I’m also in the situation to get “many” different projects under control and use following directory structure:

  • one folder per project with dependeing playbooks and roles
  • global inventory with one folder per stage (since the project share hosts I made only one inventory )
  • group_vars and host_vars only in inventory
  • global "site.yml’ including playbooks out of projects
  • "only for “global_roles” I had to add one Entry in roles_path in my ansible.cfg

I don’t know if this is good practice. Improvements and tips are welcome :smiley:

Details:

site.yml example:

Hi,

Torsten, did you ever find an answer?

It seems like it should be trivial to simply have a plays or playbooks directory, but I’m not finding a good way to do it…

Breaking down into projects isn’t what I’m looking for as I’d like to share roles

Regards,
Yoshi

I also yearn for a solution to this problem – I think that ansible playbooks don’t compose well – and roles are (in my opinion) a not-so-good abstraction for code re-use / process organization. Frequently for the ‘orchestration’ portion of some automation I find myself needing playbooks and the only way I can write playbook logic with access to resources that is shared with other playbooks (vars, group_vars, plugins etc) is to keep them all in what becomes a giant directory of playbooks … Its both annoying and harder to organize/package for other users than it would be if I could compose the playbook units in a better way … I’d love to be able to:

(1) include a playbook from another playbook with dynamically specified hosts: eg something like:
include: some-playbook.yml hosts={{some_host_or_group_determined_by_logic}}

(2) organize my playbooks so that I can suggest to other developers which playbooks are entry points and which are only meant to be used as part of other automation pipelines – while keeping a unified ‘file/template/plugin/var_file…’ search space …
include: ./some_dir/some-playbook.yml keep_resource_search_paths=true