Оценить имя динамической переменной в недоступном

У меня есть вары, куда я помещаю что-то вроде этого:

vars/main.yml
hello_port: 80
world_port: 81

в моем файле ansbile я загружаю вары с помощью

vars_files:
  - ./vars/main.yml

Вот как я инициализирую m_name:

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

и после этого у меня есть задача с итерацией с использованием with_items:

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

Но у меня на выходе

hello_port
world_port

не их ценности.


Хорошо, я считаю, что если я использую debug var, он работает. Но если я хочу поместить это выражение "{{ (item + '_port') }}" в качестве примера в задачу оболочки, оно не оценивает его. Есть ли способ оценить имя динамически создаваемой переменной - чтобы получить значение?


person Jordan Borisov    schedule 26.01.2017    source источник


Ответы (3)


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
person abc    schedule 22.07.2018

{{ hostvars[inventory_hostname][item + '_port'] }}

http://docs.ansible.com/ansible/latest/faq.html#how-do-i-access-a-variable-name-programmatically

person Ben Tse    schedule 28.01.2018

Я думаю, вы ищете:

{{ vars[item ~ '_port'] }}
person henry    schedule 26.01.2019
comment
Пожалуйста, объясните, почему это сработает в дополнение к ответу. - person GKE; 26.01.2019
comment
Я точно не знаю, почему это работает, но я использую в шаблонах для установки паролей для различных этапов производства, которые хранятся в зашифрованных файлах хранилища. password="{{ vars['password_' ~ stage] }}" - person henry; 29.01.2019
comment
Ух ты! На самом деле это лучше, чем поиск ('vars', item ~ '_port') во многих отношениях. - person Vsevolod; 27.03.2021
comment
@henry Я не смог найти никакой документации по vars[..]. Вы помните, может быть, где вы это нашли? Я пытаюсь понять, что он на самом деле делает. - person Chen A.; 28.04.2021