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
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