Ansible – How to use a variable in a variable name

Ansible – How to use a variable in a variable name

29 September 2018 0 By Eric Deleforterie

Some times you have to construct the name of a variable to use it.

In previous versions of ansible there was a syntax like this one 

vars[ ansible_hostname + 'string' ]
vars[ ansible_hostname + 'string' ]

Now, since the Ansible 2.5 you have another syntax very useful

  1. - name: Show value of 'variablename'
  2. debug: msg="{{ lookup('vars', 'variabl' + myvar)}}"
  3. vars:
  4. variablename: hello
  5. myvar: ename
  6. - name: Show default empty since i dont have 'variablnotename'
  7. debug: msg="{{ lookup('vars', 'variabl' + myvar, default='')}}"
  8. vars:
  9. variablename: hello
  10. myvar: notename
  11. - name: Produce an error since i dont have 'variablnotename'
  12. debug: msg="{{ lookup('vars', 'variabl' + myvar)}}"
  13. ignore_errors: True
  14. vars:
  15. variablename: hello
  16. myvar: notename
  17. - name: find several related variables
  18. debug: msg="{{ lookup('vars', 'ansible_play_hosts', 'ansible_play_batch', 'ansible_play_hosts_all') }}"
  19. - name: alternate way to find some 'prefixed vars' in loop
  20. debug: msg="{{ lookup('vars', 'ansible_play_' + item) }}"
  21. loop:
  22. - hosts
  23. - batch
  24. - hosts_all
- name: Show value of 'variablename'
  debug: msg="{{ lookup('vars', 'variabl' + myvar)}}"
  vars:
    variablename: hello
    myvar: ename

- name: Show default empty since i dont have 'variablnotename'
  debug: msg="{{ lookup('vars', 'variabl' + myvar, default='')}}"
  vars:
    variablename: hello
    myvar: notename

- name: Produce an error since i dont have 'variablnotename'
  debug: msg="{{ lookup('vars', 'variabl' + myvar)}}"
  ignore_errors: True
  vars:
    variablename: hello
    myvar: notename

- name: find several related variables
  debug: msg="{{ lookup('vars', 'ansible_play_hosts', 'ansible_play_batch', 'ansible_play_hosts_all') }}"

- name: alternate way to find some 'prefixed vars' in loop
  debug: msg="{{ lookup('vars', 'ansible_play_' + item) }}"
  loop:
    - hosts
    - batch
    - hosts_all
- name: Show value of 'variablename'
  debug: msg="{{ lookup('vars', 'variabl' + myvar)}}"
  vars:
    variablename: hello
    myvar: ename

- name: Show default empty since i dont have 'variablnotename'
  debug: msg="{{ lookup('vars', 'variabl' + myvar, default='')}}"
  vars:
    variablename: hello
    myvar: notename

- name: Produce an error since i dont have 'variablnotename'
  debug: msg="{{ lookup('vars', 'variabl' + myvar)}}"
  ignore_errors: True
  vars:
    variablename: hello
    myvar: notename

- name: find several related variables
  debug: msg="{{ lookup('vars', 'ansible_play_hosts', 'ansible_play_batch', 'ansible_play_hosts_all') }}"

- name: alternate way to find some 'prefixed vars' in loop
  debug: msg="{{ lookup('vars', 'ansible_play_' + item) }}"
  loop:
    - hosts
    - batch
    - hosts_all

Find the documentaiton here

Please follow and like us: