Ansible Dynamic Host Vars

Можно ли заменить {{ item.name }} в цикле, а затем использовать его для поиска hostvar?

Примечание. {{ item.name }} является динамическим и заранее неизвестным.

Host Vars создаются таким образом, что:

existing_item_this: "1234"
existing_item_that: "2345"

Предположим, мы перебираем список, где item.name равно "this", а затем "that". Я хочу, чтобы ansible сначала заменил {{ item.name }} на "this", затем искал hostVar.

hostvars['127.0.0.1']['existing_item_{{ item.name }}']
becomes
hostvars['127.0.0.1']['existing_item_this']
becomes
"1234"
tasks:
  - name: Do Loop
    uri:
      url: "https://example.com/{{hostvars['127.0.0.1']['existing_item_{{ item.name }}'] }}"
    loop: # Loop where item.name is "this" then "that"

Выше задача будет выполняться дважды и вызывать:

https://example.com/1234
and
https://example.com/2345

Это возможно?

Такое ощущение, что должно быть проще. Есть ли более простой способ?


person A. Gardner    schedule 20.09.2019    source источник


Ответы (2)


Задача ниже

- debug:
    msg: "{{ hostvars[inventory_hostname]['existing_item_' ~ item] }}"
  loop:
    - 'this'
    - 'that'

дает

ok: [127.0.0.1] => (item=this) => {
    "msg": "1234"
}
ok: [127.0.0.1] => (item=that) => {
    "msg": "2345"
}

В: Кажется, это должно быть проще. Есть ли более простой способ?

О: Можно использовать Поиск с vars плагин. Задача ниже

- debug:
    msg: "{{ lookup('vars', 'existing_item_' ~ item) }}"
  loop:
    - 'this'
    - 'that'

дает тот же результат.

person Vladimir Botka    schedule 20.09.2019

Работает ли определение переменных, как показано ниже, для вашего сценария?

existing_item:
  this: “1234”
  that: “2345”

Затем зациклитесь на exists_item.

person Moon    schedule 20.09.2019