common file dependencies for roles

51 views
Skip to first unread message

Yoshi Spendiff

unread,
Jan 4, 2016, 8:32:30 PM1/4/16
to Ansible Project
Hi,

I'm wondering if anyone knows of any tricks for neatly handling common file dependencies for roles. I initially thought having a common dependent role in meta/main.yml would facilitate this but apparently dependencies don't apply to files (which does make sense if roles are though of as totally isolated), but is there some way to achieve this? Or is there some way to specify search paths for files inside a role or something?

So far the best I've come up with is putting a files and/or templates directory in the root of the ansible directory and then referencing files/templates with src=file/myfile.txt and/or src=templates/mytemplate.txt (I've also seen the recommendation to use src={{ inventory_dir }}/files/myfile.txt but that doesn't seem necessary). The problem with this is that it doesn't really organise dependencies for roles but rather just lumps everything into one directory and makes it difficult to share roles externally.

Alternatively, is there some way to specify multiple task files in a role so that all other components can be shared, i.e. something like the following (or Chef cookbook recipes really)

- name: myplay
  roles:
    - myrole.create (roles/myrole/tasks/create.yml)
    - myrole (roles/myrole/tasks/main.yml)
    - myrole.delete (roles/myrole/tasks/delete.yml)

Regards,
Yoshi

David Karban

unread,
Jan 5, 2016, 5:45:12 AM1/5/16
to ansible...@googlegroups.com
Hi, 

I would try to get paths for files into variables in meta roles and export it as facts:

defaults/main.yml:
rolename_path: {{ role_path }}

tasks/main.yml:
  - set_fact: rolename_path={{ rolename_path }}

And that use this variable to get file:
{{ rolepath_name + 'files/filename.txt' }} 

Could work.

David Karban
Linux server specialist/Specialista na správu linuxových serverů
www.karban.eu

--
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 ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/a1264234-c753-4402-974c-7b1f8c7fc142%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Yoshi Spendiff

unread,
Jan 5, 2016, 12:36:28 PM1/5/16
to ansible...@googlegroups.com
Thanks David,

That's quite a reasonable solution actually, for one it works but also it makes you consider naming conventions for the facts and dependencies that will use it.

I had to quote the {{ role_path }} in defaults/main.yml for it to work for me.

So variables defined in defaults/main.yml are scoped only for the execution of tasks in that role?

Regards,
Yoshi

--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/Nijxp6RA_68/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.

To post to this group, send email to ansible...@googlegroups.com.

David Karban

unread,
Jan 6, 2016, 5:38:12 AM1/6/16
to ansible...@googlegroups.com
Hi Yoshi, 

role variables are accessible only in roles, thats why create a fact that is accessible to host (and thru hostvars from other hosts if needed). Personally I always scope role variables with role name, easier for me to read host_vars/ group_vars files.

David Karban
Linux server specialist/Specialista na správu linuxových serverů
www.karban.eu

Yoshi Spendiff

unread,
Jan 6, 2016, 11:46:17 AM1/6/16
to ansible...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages