Mix Tasks and roles: files folder

having this playbook (where i’d like to copy the private key to some users):

`

  • hosts: my_special_hosts

tasks:

  • name: Copy Private Key
    copy:
    src={{item.name ~ “_key” }}
    dest=“/home/{{item.name}}/.ssh/id_rsa”
    owner=“{{item.name}}”
    mode=“0500”
    with_items: admin_users
    sudo: true

roles:

  • admin_users

`

I am wondering:
The with_items statement works perfectly (the variable admin_users is defined in roles/admin_users/vars/main.yml).
On the other hand ‘copy’ does look up the ‘roles/admin_users/files’ folder. (The error message is: ‘could not find src=/ansibledir/user_key’)

It seems inconsistant to me. Does anyone know more?

Thanks

“It seems inconsistant to me.”

What specifically seems inconsistent?

Can you share output and the ansible version you are using?

Thanks!

I am using ansible 1.5 .

It seems inconsistent to me that the variable defined in the role (i.e. defined in roles/admin_users/vars/main.
yml)
is also available in the task while the files in the role file folder (i.e. roles/admin_users/files) are not found by the copy module

Thanks

This is working as designed.

When you define a variable in a role, that role might be something like “common” and package variables that other roles might like to use.

For instance a role could define “production” vs “staging” environment behavior, and a value like “ntp_server” could be used in subsequent roles.

When roles look for files, they look for files relative to them first, then at playbook level.

However, we don’t comb all file paths, as it would be difficult to source where files were drawing from – as it’s not improbable two different files might share the same name and different paths. The files are only searched in two places – the files (or templates) dir, and the level up.