在 ansible 中使用 with_items 为多个 cloudformation 堆栈获取 cloudformation_facts
get cloudformation_facts for multiple cloudformation stacks with with_items in ansible
我有多个 clouformation 堆栈,并将它们的名称存储为列表 CF_TEMPLATE_ITEMS
现在我正在尝试收集关于他们所有人的信息(最后我想得到他们所有人的 stack_output):
- name: Get all facts for all cf stacks
cloudformation_facts:
stack_name: "{{ item }}"
with_items: "{{ CF_TEMPLATE_ITEMS }}"
不幸的是,此后 cloudformation
仅包含 last 堆栈的信息。其他人的信息好像都被覆盖了
我能以某种方式从堆栈名称列表中找出所有 cloudformation 堆栈的事实吗?
是的,cloudformation_facts
用每个 运行 覆盖 cloudformation
个事实。
从每个 运行、register
循环结果中收集数据并将其重新格式化为干净的字典,如下所示:
- cloudformation_facts:
stack_name: "{{ item }}"
with_items: "{{ CF_TEMPLATE_ITEMS }}"
register: cf_tmp
- set_fact:
cf: "{{ dict(cf_tmp.results | map(attribute='ansible_facts.cloudformation') | map('dictsort') | sum(start=[])) }}"
此代码未经测试。这应该会为您提供 cf
字典,其中包含所有堆栈事实作为其键。
我有多个 clouformation 堆栈,并将它们的名称存储为列表 CF_TEMPLATE_ITEMS
现在我正在尝试收集关于他们所有人的信息(最后我想得到他们所有人的 stack_output):
- name: Get all facts for all cf stacks
cloudformation_facts:
stack_name: "{{ item }}"
with_items: "{{ CF_TEMPLATE_ITEMS }}"
不幸的是,此后 cloudformation
仅包含 last 堆栈的信息。其他人的信息好像都被覆盖了
我能以某种方式从堆栈名称列表中找出所有 cloudformation 堆栈的事实吗?
是的,cloudformation_facts
用每个 运行 覆盖 cloudformation
个事实。
从每个 运行、register
循环结果中收集数据并将其重新格式化为干净的字典,如下所示:
- cloudformation_facts:
stack_name: "{{ item }}"
with_items: "{{ CF_TEMPLATE_ITEMS }}"
register: cf_tmp
- set_fact:
cf: "{{ dict(cf_tmp.results | map(attribute='ansible_facts.cloudformation') | map('dictsort') | sum(start=[])) }}"
此代码未经测试。这应该会为您提供 cf
字典,其中包含所有堆栈事实作为其键。