Thanks, Matt.
In that case, I'll keep it the way I've written it :)

On Sunday, 15 November 2015 15:47:47 UTC, Matt Martz wrote:
>
> The default behavior of Ansible is to "replace" the entire data structure 
> instead of merging it.  This is dAhefined/configured by the hash_behavior 
> parameter in an ansible.cfg file.
>
> Because switching to merge is a process that requires a user to modify 
> their Ansible configuration, I feel that is most appropriate to *not* use 
> nested data structures where you expect users to provide configurations for 
> your role, but instead use what you were doing previously with 
> sensu_api_host.
>
> On Sunday, November 15, 2015, cmacrae <[email protected] <javascript:>> 
> wrote:
>
>> Hey People,
>>
>> Having some trouble using YAML dictionaries.
>> I'm refactoring my variable structure in a role a wrote a while ago.
>>
>> The variables used to all look like: sensu_api_host, but I wanted to move to 
>> using dictionaries, so when referencing them it wouldn't be:
>> {{ sensu_api_host }}
>> it'd be:
>> {{ sensu['api']['host'] }}
>>
>> In doing so, I've restructured my roles' defaults/main.yml like so:
>> sensu:
>>   api:
>>     host: "{{ groups['sensu_masters'][0] }}"
>>     port: 4567
>>     ssl: "false"
>>     user_name: admin
>>     password: secret
>>     uchiwa_path: ''
>>     timeout: 5000
>>   client_config: client.json.j2
>>   config_path: /opt/local/etc/sensu
>>   gem_state: present
>>   plugin_gem_state: present
>>   user_name: sensu
>>   group_name: sensu
>>   include_plugins: true
>>   include_dashboard: false
>>   master: false
>>
>> Though, I have a problem. Lookups for the above variables work fine... until 
>> I try to assign them values elsewhere, where it should take precedence.
>>
>> Some of the key values above are clobbered when they are defined elsewhere, 
>> such as host_vars/hostname.yml or group_vars/groupname.yml.
>> It seems that if I want to define one of the nested keys' value elsewhere, 
>> it ruins the dictionary lookup for all other child keys who share that 
>> parent.
>>
>> For example, above you can see that sensu['include_dashboard'] is set to 
>> false.  
>> If I want to set this to `true` for a particular host, in 
>> host_vars/hostname.yml like so:  
>> ---
>> sensu:
>>   include_dashboard: true 
>>
>> This then clobbers the lookup for any other child keys belonging to the 
>> sensu dictionary.  
>> So, for example, lookups for sensu['group_name'] will fail with the 
>> following:fatal: [my.host.tld] => One or more undefined variables: 'dict 
>> object' has no attribute 'group_name'
>> When trying to evaluate the following play:
>>   - name: Ensure the Sensu group is present
>>     group: name={{ sensu['group_name'] }}
>>            state=present
>>
>> I'm not sure what it is I'm doing wrong here - I'd really appreciate any 
>> help!
>> For the record: I'm running Ansible 1.9.4
>>
>> Thanks in advance,
>> Calum
>>
>> -- 
>> 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/01207bb1-325a-4d80-93ad-ab501a60d422%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/ansible-project/01207bb1-325a-4d80-93ad-ab501a60d422%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
> Matt Martz
> @sivel
> sivel.net
>
>

-- 
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/d96df938-e876-4779-bc25-a93f95026745%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to