I found this post 
(http://stackoverflow.com/questions/29276198/ansible-how-to-construct-a-variable-from-another-variable-and-then-fetch-its-v)
 
and was hoping to find a way to cope with it.

To sum up though, basically I have a situation where I'd like to get the 
value of a value of a variable.

e.g.:


*defaults/main.yml:*---
Ubuntu:
 14:
  packages:
    install:
      - iptables
    remove:
      - mlocate

CentOS:
 6:
  packages:
    install:
      - emacs
    remove: [ ]

packages:
 install: "{{ ansible_distribution }}.{{ ansible_distribution_major_version 
}}.packages.remove|default([ ]) | union(my_packages.remove|default([ ]))"
 remove: "{{ ansible_distribution }}.{{ ansible_distribution_major_version 
}}.packages.remove|default([ ]) | union(my_packages.remove|default([ ]))"

However, this is assigning a string value to *packages.install *and 
*packages.remove 
*not the actual list, so I have to force variable expansion. This works for 
tasks:
 


*tasks/main.yml:---* - name: install packages
   action: "{{anisble_pkg_mgr }} state=present name={{ item }}"
   with_items: "{{ packages.install }}"

But it does not work for templating:


*templates/test.j2:*--- 
{{ packages.install }}

...

*TASK: [template src=t.yml dest=/tmp/] 
***************************************** *
*--- before: /tmp/t.yml*
*+++ after: /home/ansible-playbooks/t.yml*
*@@ -0,0 +1,43 @@*
*+Ubuntu.14.packages.install*

If I could force or enable multiple pass variable expansion on the 
definition of *packages.install* (i.e. expand *{{ ansible_distribution }}* and 
*{{ ansible_distribution_major_version }}*  and then get the value of "
*Ubuntu.14.packages.install*" and assign that list to *packages.install* ), 
I wouldn't need to force the expansion on the task and could also use the 
resulting list in templates like normal.

There are only two ways of getting around this as I see it, but neither are 
ideal. I could make tasks use a distribution specific when clause, but 
those are a pain as it ends up with a lot of duplicated work. I could also 
make distribution specific vars files and have an include_vars task, but 
this is bad as include_vars would prevent variables from being overridden 
in playbooks that used this role as a dependency. 

Is this possible? Or does someone have a suggestion about how to cope with 
this situation that I haven't considered?

-- 
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/2d8455cc-f749-4b3c-860e-0b64bcc506a0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to