У меня есть список 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]} ) }}"