Set_fact dynamici c имя переменной внутри цикла - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть список accounts, словарь mappedsecrets с ключами accounts и список secrets в качестве значений и, наконец, словарь secrets содержит секретные имена и секретные значения

#variables
accounts:
  acc_one
  acc_two

mappedsecrets:
  acc_one:
    - keyone
    - keytwo
  acc_two:
    - keythree
    - keyfour

secrets:
  keyone: secret_1
  keytwo: secret_2
  keythree: secret_3
  keyfour: secret_4

У меня есть include_task, зацикливающийся на учетных записях с loop_var:account. Внутри l oop я хочу создать в общих чертах все ключевые секреты, которые были сопоставлены учетной записью: например,

acc_one:
  keyone: secret_1
  keytwo: secret_2

Я прошел маршрут set_fact с фильтром объединения.

- name: "Create dict of account secrets"
  set_fact:
    account_secrets: "{{ account_secrets |default({}) | combine( {item: secrets[item]} ) }}"
  with_items:
    - "{{ mappedsecrets[account] }}"

Проблема заключается в следующем:

каждый l oop просто добавляет переменную account_secrets, в результате чего у последней учетной записи есть все секреты предыдущих итераций.

(поправьте меня, если я ошибаюсь) Я читал, что невозможно сбросить факты в игре ansible. Итак, я думаю, что могу создавать динамические c имена, основываясь на итерации l oop: например, account_secrets_{{ ansible_loop.index }}

Но я застрял в поиске правильного синтаксиса для следующего:

set_fact: account_secrets_{{ ansible_loop.index }}: "{{ account_secrets_{{ ansible_loop.index }} |default({}) | combine( {item: secrets[item]} ) }}"

1 Ответ

0 голосов
/ 15 апреля 2020

Я понял:

set_fact:
    account_secrets_{{ ansible_loop.index }}: "{{ lookup('vars', 'account_secrets_' + ansible_loop.index|string) |default({}) | combine( {item: secrets[item]} ) }}"

Мне все еще интересно, есть ли более "1005 *" способ добиться этого варианта использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...