How to copy files with ansible relatively to the role?

AnsibleAnsible Playbook

Ansible Problem Overview


I have a copy task inside a role and I was expecting that the src location would be relative to the role itself, not the playbook that calls the roles.

How do I make this work and use the files from myfrole/files from a task inside myrole/tasks, I don't want to include the role name as part of the path as it does not make much sense. If I do it will break if I duplicate the role.

Ansible Solutions


Solution 1 - Ansible

If you do not provide any path at all, just the filename, Ansible will pick it automatically from the files directory of the role.

- copy:
    src: foo.conf
    dest: /etc/foo.conf

Additionally, since Ansible 1.8, there is the variable role_path which you could use in your copy task.

- copy:
    src: "{{ role_path }}/files/foo.conf"
    dest: /etc/foo.conf

Solution 2 - Ansible

You wouldn't need to specify the path of the file to copy, as long as it is stored in files directory.

Here's how your role should look like:

my-awesome-role
├───files
│       my-awesome-file
└───tasks
        main.yml

And here's the way to call copy in the tasks/main.yml:

- copy:
    src: my-awesome-file
    dest: '{{ some_destination }}'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsorinView Question on Stackoverflow
Solution 1 - AnsibleudondanView Answer on Stackoverflow
Solution 2 - Ansibleavi.elkharratView Answer on Stackoverflow