Replying to myself.
Well, it was just integer vs. string in the end. So yeah, PEBKAC. Quoting
everything in proxy_to_app_map did the trick.
Regards,
Daniel
On Friday, July 17, 2015 at 6:29:36 PM UTC+1, Daniel Siechniewicz wrote:
>
> Hi,
>
> I'm using ansible[-playbook] 1.9.0.1.
>
> I have 4 "proxy" hosts talking to 2 "app" hosts:
>
> proxy1 -> app1
> proxy2 -> app1
> proxy3 -> app2
> proxy4 -> app2
>
> In group vars I defined:
>
> proxy_to_app_map:
> 1: 1
> 2: 1
> 3: 2
> 4: 2
>
> proxy_no: "{{ ansible_hostname | regex_replace('^.*([0-9]+)$', '\\\\1') }}"
> app_no: "{{ proxy_to_app_map[proxy_no] }}"
>
>
> I'm getting:
>
> ok: [proxy1] => {
> "var": {
> "proxy_no": "1"
> }
> }
>
> and so on, but then I get a string instead of a specific dictionary value
> (I expect a number, 1 or 2).
>
> ok: [proxy1] => {
>
> "var": {
>
> "app_no": "{{ proxy_to_app_map[proxy_no] }}"
>
> }
>
> }
>
> I tried this:
> app_no: "{{ proxy_to_app_map.proxy_no }}"
>
> And this
> app_no: proxy_to_app_map.proxy_no
>
> And this
> app_no: "proxy_to_app_map.proxy_no"
>
> and it still does not access the value. Why does this (not) happen? Is
> there any documentation somewhere that would describe the rules of what
> gets interpolated and what doesn't?
>
> I have something like that later on, but it won't work without proper
> app_no.
>
> app_peer_host: "{{ ansible_hostname | regex_replace('^proxy', 'app') |
> regex_replace(proxy_no + '$', app_no) }}"
> app_peer_ip: "{{
> hostvars[app_peer_host]['ansible_eth0']['ipv4']['address'] }}"
>
> I'm using the hostvars trick like in the app_peer_ip in many places so
> some interpolation works within group vars, but not all. Is this because
> hostvars is a dict defined "externally" and proxy_to_app_map internally?
>
> A workaround is something like that:
>
> proxy_to_app_map:
> proxy1: app1
> proxy2: app1
> proxy3: app2
> proxy4: app2
>
> app_peer_host: "{{ proxy_to_app_map[ansible_hostname] }}"
>
> Which does work, and looks simpler, but would need to be defined for every
> environment separately (real hostnames are more complex than proxy and
> app), and that's lots of defining.
>
> This leads me to a conclusion that a variable defined within group_vars
> cannot be used as a key "identifier" to access a dictionary element if that
> dictionary is also defined in group_vars. Is that the case?
>
>
> Regards,
> Daniel
>
>
--
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/c6256bf3-534c-4103-ac8b-3cff9ecced2c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.