Ansible set_事实正在覆盖项
这是我的主菜Ansible set_事实正在覆盖项,ansible,virtual-machine,vmware,ansible-facts,info,Ansible,Virtual Machine,Vmware,Ansible Facts,Info,这是我的主菜 --- -名称:收集VCenter事实 vmware\u虚拟机\u信息: 主机名:“{vcenter_server}}” 用户名:“{vcenter_user}” 密码:{vcenter_pass}} 验证证书:错误 注册:vcenter_事实 委托给:localhost -调试: var:vcenter\u facts.virtual\u machines -名称:查找所有要运行IO的测试虚拟机 设定事实: vm_ip:“{item.ip_address}” 循环:“{vcent
---
-名称:收集VCenter事实
vmware\u虚拟机\u信息:
主机名:“{vcenter_server}}”
用户名:“{vcenter_user}”
密码:{vcenter_pass}}
验证证书:错误
注册:vcenter_事实
委托给:localhost
-调试:
var:vcenter\u facts.virtual\u machines
-名称:查找所有要运行IO的测试虚拟机
设定事实:
vm_ip:“{item.ip_address}”
循环:“{vcenter\u facts.virtual\u machines}”
时间:item.guest\u名称为regex(“test\u vm*”)
-名称:打印vm_ip变量值
调试:
var:vm_ip
-名称:在每个测试虚拟机中安装16TB dropbox
外壳:mount-16tb-dropbox.sh
args:
chdir:/usr/local/bin/
带_项:“{vm_ip}”
以下是总结:
ok: [localhost] => {
"vcenter_facts.virtual_machines": [
{
"attributes": {},
"cluster": "Compute Cluster",
"esxi_hostname": "100.80.90.179",
"guest_fullname": "CentOS 7 (64-bit)",
"guest_name": "test_vm4",
"ip_address": "192.168.202.13",
"mac_address": [
"00:50:56:9d:d2:99"
],
"power_state": "poweredOn",
"tags": [],
"uuid": "421d7b54-1359-14e8-3ec4-74b568cb96d2",
"vm_network": {
"00:50:56:9d:d2:99": {
"ipv4": [
"192.168.202.13"
],
"ipv6": [
"fe80::44f6:a395:cde3:4dd1",
"fe80::a357:a163:e44f:2086",
"fe80::cd0c:e7d7:1356:2830"
]
}
}
},
{
"attributes": {},
"cluster": "Compute Cluster",
"esxi_hostname": "100.80.90.178",
"guest_fullname": "CentOS 7 (64-bit)",
"guest_name": "test_vm3",
"ip_address": "192.168.202.12",
"mac_address": [
"00:50:56:9d:a9:e8"
],
"power_state": "poweredOn",
"tags": [],
"uuid": "421d9239-0980-80c1-bca4-540efd726452",
"vm_network": {
"00:50:56:9d:a9:e8": {
"ipv4": [
"192.168.202.12"
],
"ipv6": [
"fe80::cd0c:e7d7:1356:2830"
]
}
}
},
{
"attributes": {},
"cluster": "Compute Cluster",
"esxi_hostname": "100.80.90.178",
"guest_fullname": "CentOS 7 (64-bit)",
"guest_name": "Test_Automation_CentOS8_Linux_VM",
"ip_address": "192.168.202.6",
"mac_address": [
"00:50:56:9d:13:14"
],
"power_state": "poweredOn",
"tags": [],
"uuid": "421d53ba-4824-57e4-06fd-fba0f2b1dbea",
"vm_network": {
"00:50:56:9d:13:14": {
"ipv4": [
"192.168.202.6"
],
"ipv6": [
"fe80::cd0c:e7d7:1356:2830",
"fe80::44f6:a395:cde3:4dd1"
]
}
}
},
{
"attributes": {},
"cluster": "Compute Cluster",
"esxi_hostname": "100.80.90.180",
"guest_fullname": "CentOS 7 (64-bit)",
"guest_name": "test_vm5",
"ip_address": "192.168.202.14",
"mac_address": [
"00:50:56:9d:85:b6"
],
"power_state": "poweredOn",
"tags": [],
"uuid": "421d6855-e60e-cd80-f113-39f11927d63b",
"vm_network": {
"00:50:56:9d:85:b6": {
"ipv4": [
"192.168.202.14"
],
"ipv6": [
"fe80::44f6:a395:cde3:4dd1",
"fe80::cd0c:e7d7:1356:2830",
"fe80::a357:a163:e44f:2086"
]
}
}
}
]
}
我无法遍历所有ip\u地址
变量(即192.168.202.12
,192.168.202.13
,192.168.202.14
)。它只读取最后一项(即
192.168.202.14
)
set\u事实上它没有读取所有变量并执行下面的一组任务,我可能做错了什么?这应该会给出所有IP。您正确地假设了代码可能需要更正的位置。在代码中,vm_ip
变量被每个循环覆盖,最后一个ip保持不变。您需要的是一个列表,然后将每个IP附加到列表中
-设置事实:
vm_ip:{{vm_ip}默认值([])+[item.ip_地址]}”
循环:{vcenter_facts.virtual_machines|flatten}”
时间:item.guest\u名称为regex(“test\u vm*”)
-调试:
var:vm_ip
使用的替代解决方案
-设置事实:
虚拟机ip:>-
{{vcenter_facts.virtual_machines |展平
|rejectattr('guest_name','match','^(?!test_vm.*'))
|映射(属性='ip_地址')|列表}
使用
---
-名称:收集VCenter事实
vmware\u虚拟机\u信息:
主机名:“{vcenter_server}}”
用户名:“{vcenter_user}”
密码:{vcenter_pass}}
验证证书:错误
注册:vcenter_事实
委托给:localhost
-名称:在每个测试虚拟机中安装16TB dropbox
外壳:mount-16tb-dropbox.sh
args:
chdir:/usr/local/bin/
变量:
查询:>-
[?包含(“来宾名称”,“测试虚拟机”)。ip地址[]
带|项:{vcenter_facts.virtual|u machines | to_json | from|json | json|u查询(查询)|列表}”
注意:to_json | from_json
是ansible和jmespath之间的一种变通方法,因此所有值都可以转换为实际字符串,并可以与jmespathcontains
函数一起使用。请添加vm_ip
的调试输出@turmoilawaits抱歉,我的意思是要求提供vcenter\u facts.virtual\u machines
的调试输出。如果数据格式正确,对其他人也有帮助。但是,我可能看到了您的代码中存在的问题。@Moon抱歉,我很难格式化这些内容。道歉。我已经用vcenter_facts.virtual_machines的输出更新了这个问题。非常感谢。它成功了!!确定:[localhost]=>{“vm_ip”:[“192.168.202.13”、“192.168.202.12”、“192.168.202.14”]}