在 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 字典,其中包含所有堆栈事实作为其键。