我在使用
Ansible
(v2.16.2 ; python v3.11.5)
整理一些数据时遇到一些问题,而且我似乎找不到合并数据的正确方法(类型错误)。我确实安装了 Community.general 集合,但现在不想添加任何其他集合(业务需求)。
在清单文件中,我将提供主机列表。
[myhosts]
SomeHost001
AnotherHost002
RandomHost-003
到目前为止,我正在尝试这样做:
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)
。这样我就有了所有需要的主机数据,稍后将使用这些数据导出详细信息。
任何人都可以帮我找到正确的地方吗?预先感谢您!
我已经尝试了相当多的变体(包括在线教程的帮助),但我似乎无法专心为这种情况正确定义数组。
- 将主机放入数组
- 添加其他详细信息,例如该主机的 ansible_facts(基于匹配的节点名值)
您不需要这样做 - 它已经存在:阅读有关 hostvars 魔术变量。