9
votes

I have vars where I put something like this:

vars/main.yml
hello_port: 80
world_port: 81

in my ansbile file I load the vars with

vars_files:
  - ./vars/main.yml

This is how I initialize m_name:

 - name: set_fact
     set_fact:
        m_name:
          - 'hello'
          - 'world'

and after that I have task with iterate using with_items:

 - debug:
      msg: "{{ (item + '_port') }}"
   with_items: "{{ m_name }}"

But I've got as output

hello_port
world_port

not their values.


OK I find that if I use debug var it is working. But If I want to put this expression "{{ (item + '_port') }}" for an example in shell task it does not evaluate it. Is there a way to evaluate the dynamically created variables name - to get the value?

3

3 Answers

22
votes

https://docs.ansible.com/ansible/2.5/plugins/lookup/vars.html

- name: Show value of 'variablename'
  debug: msg="{{ lookup('vars', 'variabl' + myvar)}}"
  vars:
    variablename: hello
    myvar: ename
3
votes

I think you are searching for:

{{ vars[item ~ '_port'] }}