Sorry, that OR in the precedence applies only to the one item above and the one item below it.
On Thu, Apr 26, 2018 at 3:49 PM, Karl Auer <[email protected]> wrote: > I've just done some testing, and a role in the current working directory > WILL be used, but only if the role cannot be found elsewhere. This is with > Ubuntu 16.04 and Ansible 2.5.1. > > I haven't worked out the precedence yet, but it appears to be : > > - the roles directory below the directory containing the playbook > - the elements of roles_path from left to right (two elements in my case) > OR > - the elements of the DEFAULT_ROLES_PATH from left to right (three > elements) > - the directory the playbook is in > - the current working directory > > To test this, I put a test role in each of the eight possible locations > (my CWD test was from /tmp) then renamed them all so that the playbook > would be unable to find them. I then ran the playbook and got the expected > failure to find the role. Then I renamed the role in each of the locations > in turn, to the name expected by the playbook, checked that the playbook > could find it, then renamed it away again. > > One surprise was that although the comment in the distributed ansible.cfg > says that the roles_path variable is for "additional paths to search for > roles in", in fact roles_path will, if specified, REPLACE the defaults. > > On my system the default role paths (i.e., with no roles_path specified > in ansible.cfg) are ~/.ansible/roles, /usr/share/ansible/roles, and > /etc/ansible/roles. > > Regards, K. > > > On Wednesday, April 25, 2018 at 6:18:22 AM UTC+10, Karl Auer wrote: >> >> Is there any way to output the roles_path in a task (not the specific >> path to a role, I mean the search path)? >> >> The doco for Ansible 2.5 says that roles are found in the ./roles >> directory relative to the playbook file, and in /etc/ansible/roles. >> >> "ansible-config list" says that roles are also found in ~/.ansible/roles, >> /usr/share/ansible/roles and /etc/ansible/roles - the first two are not >> mentioned in the doco. >> >> It seems to me from my testing that roles are also found in the current >> working directory, and in the playbooks directory. >> >> I have a role called other_role (i.e., a directory called other_role, >> containing a tasks directory containing main.yaml) in /tmp. >> >> As a control, I have another role called local_role in ./playbooks/roles >> >> Finally I have an extremely simple playbook in ./playbooks that >> references the roles: >> >> --- >> - hosts: localhost >> >> roles: >> - { role: local_role } >> - { role: other_role } >> >> If I place other_role in my ./playbooks/roles directory: >> >> mv /tmp/other_role ./playbooks/roles >> ansible-playbook -v playbooks/test.yaml --> both roles run >> >> If I place other_role in my ./playbooks directory: >> >> mv ./playbooks/roles/other_role ./playbooks >> ansible-playbook -v playbooks/test.yaml --> both roles run >> >> If I place other_role in my current working directory (my playbook >> directory's parent) : >> >> mv ./playbooks/other_role . >> ansible-playbook -v playbooks/test.yaml --> both roles run >> >> If I place other_role in /etc/ansible/roles: >> >> sudo mv ./other_role /etc/ansible/roles >> ansible-playbook -v playbooks/test.yaml --> both roles run >> >> If I place other_role back in the /tmp directory (or anywhere else except >> the above four locations), running the playbook produces a "role not found" >> error: >> >> mv ./other_role /tmp >> >> so it seems to me that the search path for roles contains at least these >> four locations: >> >> - the current working directory >> - the directory containing the playbook >> - the roles directory relative to the directory containing the playbook >> - /etc/ansible/roles >> >> Plus the other two that ansible-config reports (that I didn't test): >> - ~/.ansible/roles >> - /usr/share/ansible/roles >> >> Is all this expected? In what order are these locations checked when a >> role is referenced? >> >> Regards, K. >> > -- > You received this message because you are subscribed to the Google Groups > "Ansible Project" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/ansible-project/19adfdd8-d595-4166-8db1-736f68cc913c%40googlegroups. > com > <https://groups.google.com/d/msgid/ansible-project/19adfdd8-d595-4166-8db1-736f68cc913c%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- Karl Auer Email : [email protected] Website: http://2pisoftware.com GPG/PGP : 958A 2647 6C44 D376 3D63 86A5 FFB2 20BC 0257 5816 Previous: F0AB 6C70 A49D 1927 6E05 81E7 AD95 268F 2AB6 40EA -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CA%2B%2BT08ToodCAesyzArEtSE_ytaXaMaNBwkvouVJqazzga%3D4ZKg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
