I had the remnants of the aliases so host_vars/server1 didn't match 
'primary'

I'm not getting the var. 

Thanks!

On Tuesday, November 4, 2014 2:17:34 PM UTC-8, James Martin wrote:
>
> Ah, I didn't see that last line.  Do a:
>
> - debug: var=partner
>
> Just to make sure you have your variables loading properly.
>
> On Tuesday, November 4, 2014 5:15:51 PM UTC-5, James Martin wrote:
>>
>> That indicates you haven't defined "partner" properly.  Make sure it's 
>> listed in the right pace in your inventory host_vars.
>>
>> On Tuesday, November 4, 2014 5:06:45 PM UTC-5, Barry Morrison wrote:
>>>
>>> {{ hostvars[partner]['ansible_eth0']['ipv4']['address'] }} << doesn't 
>>> work
>>>
>>> "{'msg': "AnsibleUndefinedVariable: One or more undefined variables: 
>>> 'partner' is undefined", 'failed': True}"
>>>
>>> in inventory/host_vars/server1.domain there is 'partner: server2.domain'
>>>
>>>
>>> On Tuesday, November 4, 2014 6:08:23 AM UTC-8, James Martin wrote:
>>>>
>>>> If you wanted to get the ip address of the first node in the 
>>>> production-cluster, you could do something like this.  Think of the group 
>>>> as a list and 0 being the first element in the list.
>>>>
>>>> "{{ 
>>>> hostvars[groups['production-cluster'][0]]['ansible_eth0']['ipv4']['address']
>>>>  
>>>> }}"
>>>>
>>>> as far as your second example goes, you have some syntax errors in 
>>>> defining your variable.  You don't need to encapsulate "partner" in curly 
>>>> brackets or quotes.  The following should work:
>>>>
>>>>
>>>> {{ hostvars[partner]['ansible_eth0']['ipv4']['address'] }} 
>>>>
>>>>
>>>> - James
>>>>
>>>>
>>>>
>>>>
>>>> On Tuesday, November 4, 2014 6:59:16 AM UTC-5, Barry Morrison wrote:
>>>>>
>>>>> I have a pair of servers (server1.<environment>.domain, 
>>>>> server2.<environment>.domain) in two environments (staging and 
>>>>> production). 
>>>>> Server1 is primary, server2 is secondary. 
>>>>>
>>>>> When I originally built the playbook, I had aliases in the inventory 
>>>>> file
>>>>>
>>>>> [staging-cluster]
>>>>> primary server1.staging.domain
>>>>> secondary server2.staging.domain
>>>>>
>>>>> And I'd target the IP of the other host with {{ 
>>>>> hostvars['primary']['ansible_eth0']['ipv4']['address'] }} to get the of 
>>>>> the 
>>>>> "other" host. This worked fine, until I needed the playbook to target 
>>>>> another set of hosts in production:
>>>>>
>>>>> [production-cluster]
>>>>> primary server1.prod.domain
>>>>> secondary server2.prod.domain
>>>>>
>>>>> The problem with the above, aliases are global and you can't have more 
>>>>> than one in an inventory. So...this breaks the above lookup {{ 
>>>>> hostvars['secondary']['ansible_eth0']['ipv4']['address'] }}
>>>>>
>>>>> As much as I disliked the idea, I then thought to leverage 
>>>>> hostvars/serverX.environment.domain with a var like:
>>>>>
>>>>> primary: true
>>>>> partner: server2.environment.domain
>>>>>
>>>>> The above var would exist on server1 since it is the primary and it's 
>>>>> partner is server2
>>>>>
>>>>> The problem with the above is, I can't expand {{ partner }} in the 
>>>>> above fact (may not have explained that properly, I can't do this:
>>>>>
>>>>> {{ hostvars['{{ partner }}']['ansible_eth0']['ipv4']['address'] }} or 
>>>>> this {{ hostavars[{{partner}}]['ansible_eth0']['ipv4']['address'] }}
>>>>>
>>>>> Anyone have any ideas on how I can manage a primary/secondary 
>>>>> role/membership in a cluster? Actually defining if the host is 
>>>>> primary/secondary is the easy part...but defining it's partner and 
>>>>> getting 
>>>>> facts from its partner, I'm not certain of. 
>>>>>
>>>>> Thanks!!
>>>>>
>>>>

-- 
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/c54d8387-36f8-43a0-b4ad-487e2d7efebb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to