【发布时间】:2020-07-28 13:53:45
【问题描述】:
我有一个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。
在循环内,我想创建一个 dict all key - 帐户已映射的秘密:
比如:
acc_one:
keyone: secret_1
keytwo: secret_2
我选择了 set_fact 路线,使用了 combine 过滤器。
- name: "Create dict of account secrets"
set_fact:
account_secrets: "{{ account_secrets |default({}) | combine( {item: secrets[item]} ) }}"
with_items:
- "{{ mappedsecrets[account] }}"
问题是:
每个循环只是不断附加account_secrets 变量,这导致最后一个帐户拥有之前迭代的所有秘密。
(如果我错了,请纠正我)我已经读到不可能在 ansible-play 中重置事实。
所以我想我可以根据循环迭代制作动态名称:比如account_secrets_{{ ansible_loop.index }}
但我一直无法弄清楚以下内容的正确语法:
set_fact:
account_secrets_{{ ansible_loop.index }}: "{{ account_secrets_{{ ansible_loop.index }} |default({}) | combine( {item: secrets[item]} ) }}"
【问题讨论】:
标签: ansible