Ansible 数据收集到数组中

问题描述 投票:0回答:1

我在使用

Ansible
(v2.16.2 ; python v3.11.5)
整理一些数据时遇到一些问题,而且我似乎找不到合并数据的正确方法(类型错误)。我确实安装了 Community.general 集合,但现在不想添加任何其他集合(业务需求)。

在清单文件中,我将提供主机列表。

[myhosts]
SomeHost001
AnotherHost002
RandomHost-003

到目前为止,我正在尝试这样做:

  • 将主机放入数组
  • 添加其他详细信息,例如该主机的 ansible_facts(基于匹配的
    nodename
    值)。

我正在寻找的结果是这样的:

"provided_hosts": {
  "SomeHost001": [{
    "facts": [{ ...ansible_facts... }]
  }],
  "AnotherHost002": [{
    "facts": [{ ...ansible_facts... }]
  }],
  "RandomHost-003": [{
    "facts": [{ ...ansible_facts... }]
  }],

稍后,我将添加一些其他细节,例如

provided_hosts['SomeHost001'].vcenter
等。例如,我有一个来自 VMware 的 vcenter 数组,并将此数组组合在一起:

"vcenters": {
  "vcenter1": {
    "hostname": "vc01.somewhere.com",
    "ip_addr": "192.168.10.90"
  },
  "vcenter2": {
    "hostname": "vc02.somewhere.com",
    "ip_addr": "192.168.10.91"
  },
  # etc (there are 5 total)
}

我一直在尝试这种玩法的变体:

---
- name: Data Collection
  hosts: myhosts
  gather_facts: yes
  vars:
    provided_hosts: {}         # also tried []

  tasks:
    - name: Set provided hosts
      set_fact:
        provided_hosts: "{{ groups['myhosts'] }}"

    - name: Add vcenters
      set_fact:
        provided_hosts: "{{ provided_hosts | default({}) | combine('vcenters', item, default={}, recursive=true, list_merge='append') }}"
      loop: "{{ vcenters | list }}"

如果这看起来不完整,我深表歉意...我已经尝试了很多变体(这个以

recursive
结尾,而
list_merge
是唯一有效的关键字参数”),但从根本上来说,我只是想抓住相关的将数据放入数组中,其中
<hostname> (provided_hosts[<hostname>] = ansible_facts guest_name)
。这样我就有了所有需要的主机数据,稍后将使用这些数据导出详细信息。

任何人都可以帮我找到正确的地方吗?预先感谢您!

我已经尝试了相当多的变体(包括在线教程的帮助),但我似乎无法专心为这种情况正确定义数组。

arrays ansible ansible-2.x merging-data
1个回答
0
投票
  • 将主机放入数组
  • 添加其他详细信息,例如该主机的 ansible_facts(基于匹配的节点名值)

您不需要这样做 - 它已经存在:阅读有关 hostvars 魔术变量。

© www.soinside.com 2019 - 2024. All rights reserved.