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之间的一种变通方法,因此所有值都可以转换为实际字符串,并可以与jmespath
contains
函数一起使用。

请添加
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”]}