You should not be using vars files from inside roles as vars_files entries.
If you want easily overridden variables put them in defaults/main.yml and
then override them either via role parameters or inventory variables (like
host_vars and group_vars).


On Sun, Jun 8, 2014 at 10:22 PM, Greg Hurrell <[email protected]> wrote:

> Hi,
>
> I had a playbook that I *think* used to work, but I'm finding now that
> variables other than the ones I intended are being applied to a particular
> host. Does the following minimal test case look sane?
>
> I have vars file at roles/mariadb/vars/credentials.yml with some default
> settings:
>
> ---
> mysql_root_passphrase: foo
>
> I have a more specific vars file at
> roles/mariadb/vars/credentials-rails-sandbox.yml ("rails-sandbox" is the
> hostname in my inventory) with some overrides:
>
> ---
> mysql_root_passphrase: bar
>
> My inventory, defined in a file called staging, looks like this:
>
> [general]
> general-sandbox
>
> [rails]
> rails-sandbox
>
> And my playbook, rails.yml, looks like this:
>
> - hosts: rails
>   roles:
>     - { role: mariadb }
>   vars_files:
>     - [ "roles/mariadb/vars/credentials-{{ inventory_hostname }}.yml",
> roles/mariadb/vars/credentials.yml" ]
>
> I apply it with this:
>
> ansible-playbook -i staging rails.yml
>
> But when I come to run the tasks in roles/mariadb/tasks/main.yml, this
> one ends up using the variables from credentials.yml instead of
> credentials-rails-sandbox.yml:
>
> - name: mariadb | set up root user credentials
>   template:
>     src=dot-my.cnf.j2
>     dest={{ item.directory }}/.my.cnf
>     owner={{ item.username }}
>     group={{ item.username }}
>     mode=600
>   with_items:
>     - username: root
>       passphrase: '{{ mysql_root_passphrase }}'
>       directory: /root
>   sudo: yes
>
> I used the debug module to print the inventory_hostname, and it is
> rails-sandbox like I expect:
>
> - name: mariadb | debug inventory_hostname
>   debug: msg="inventory_hostname is {{ inventory_hostname }}"
>
> During the run I also see that the credentials-rails-sandbox.yml file is
> being read:
>
> GATHERING FACTS
> ***************************************************************
> ok: [rails-sandbox]
> rails-sandbox: importing
> /Users/glh/code/ansible-configs/roles/mariadb/vars/credentials-rails-sandbox.yml
>
> But when the task runs the wrong password is used:
>
> TASK: [mariadb | mariadb | set up root user credentials]
> **********************
> ok: [rails-sandbox] => (item={'username': 'root', 'directory': '/root',
> 'passphrase': u'foo'})
>
> The docs <http://docs.ansible.com/playbooks_variables.html> make me think
> that the values from my more specific vars file should be taking
> precedence, but they're not.
>
> Am I misunderstanding the way variable precedence works in Ansible? Any
> obvious mistakes in here?
>
> Thanks for your help.
>
> -Greg
>
>  --
> 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/f283289f-61e7-4638-85ed-4f88140f49a2%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/f283289f-61e7-4638-85ed-4f88140f49a2%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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/CAMFyvFiQwW848EMpV3vQhRL3B3q_3BtMa_bXajDvowa0Ddeieg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to