如何重试,直到为IP地址分配了Ansible和vmware_vm_信息?

如何重试,直到为IP地址分配了Ansible和vmware_vm_信息?,ansible,vmware,Ansible,Vmware,我想再试一次,直到获得主机(guest\u name:)的vm\u info:module的ip\u地址。问题是,有时配置的vm没有启动,因此我无法获得IP地址 问题: 我应该如何定义我的角色,直到定义ip_地址为止 --- - name: Get virtual machine info vmware_vm_info: hostname: '{{ vsphere_host }}' username: '{{ vsphere_user }}' passwor

我想再试一次,直到获得主机(guest\u name:)的vm\u info:module的ip\u地址。问题是,有时配置的vm没有启动,因此我无法获得IP地址

问题:

我应该如何定义我的角色,直到定义ip_地址为止

---
 - name: Get virtual machine info
   vmware_vm_info:
     hostname: '{{ vsphere_host }}'
     username: '{{ vsphere_user }}'
     password: '{{ vsphere_password }}'
     validate_certs: false    
     folder: '/{{ vsphere_datacenter }}/vm'
   delegate_to: localhost
   register: vm_info

 - debug:
     var:  vm_info


 - name: "Update host_var with new IP Address"
   set_fact: 
     ansible_host: "{{ item.ip_address }}"
     ansible_hostname: "{{ item.guest_name }}"
     regexp: "^ansible_host:" 
   with_items:
     - "{{ vm_info.virtual_machines | json_query(query) }}"
   vars:
     query: "[?guest_name=='{{ hostname }}']"
   delegate_to: localhost
这是寄存器vm_信息的调试:

ok: [1-Europe-Cisco-Site1-2-pci] => 
 vm_info:
   changed: false
   failed: false
   virtual_machines:
   - attributes: {}
     cluster: null
     esxi_hostname: 51.89.43.64
     guest_fullname: Other 3.x Linux (64-bit)
     guest_name: 1-Europe-Cisco-Site2-2-guest
     ip_address: ''
     mac_address:
     - 00:50:56:91:41:b7
     - 00:50:56:91:80:67
     - 00:50:56:91:f2:a3
     power_state: poweredOn
     tags: []
     uuid: 42110cfc-0b31-5de2-659d-6f8fe47e8136
     vm_network: {}
   - attributes: {}
     cluster: null
     esxi_hostname: 51.89.43.64
     guest_fullname: Other 3.x Linux (64-bit)
     guest_name: 1-Europe-Cisco-Site1-2-guest
     ip_address: ''
     mac_address:
     - 00:50:56:91:07:e1
     - 00:50:56:91:b0:79
     - 00:50:56:91:d4:5a
     power_state: poweredOn
     tags: []
     uuid: 4211db9d-5608-14fd-1c9b-6cfc470c29c7
     vm_network: {}
   - attributes: {}
     cluster: null
     esxi_hostname: 51.89.43.64
     guest_fullname: Other 3.x Linux (64-bit)
     guest_name: 1-Europe-Cisco-Site2-1-guest
     ip_address: ''
     mac_address:
     - 00:50:56:91:89:ac
     - 00:50:56:91:12:c7
     - 00:50:56:91:e3:0b
     - 00:50:56:91:de:b3
     power_state: poweredOn
     tags: []
     uuid: 421126d9-e74a-2db2-b58c-0a09571d9b29
     vm_network: {}
直到只适用于一个任务,但我需要在这里定义2个任务: 1.获取虚拟机信息
2.通过vm\u info循环并定义主机ip

如何使用vmware\u guest\u info模块,如下所示?
在下面的剧本中,vmware_guest_info将一直执行,直到使用schema和properties选项从虚拟机获取IP地址为止

---
-名称:示例剧本
主机:本地主机
收集事实:错误
任务:
-名称:操作虚拟机以打开电源
vmware_来宾:
主机名:“{vcenter_hostname}”
用户名:“{vcenter_username}”
密码:{vcenter_password}}
验证证书:错误
数据中心:“{{datacenter\u name}}”
名称:“{vm_name}}”
州:poweredon
-名称:收集虚拟机信息
vmware\u来宾\u信息:
主机名:“{vcenter_hostname}”
用户名:“{vcenter_username}”
密码:{vcenter_password}}
验证证书:错误
数据中心:“{{datacenter\u name}}”
名称:“{vm_name}}”
模式:vsphere
特性:
-guest.ipAddress
重试次数:60次
延误:10
直到:gather\u vm\u info.instance.guest.ipAddress不是none
注册:收集虚拟机信息
-调试:var=gather\u vm\u info

非常感谢,您解决了我最大的问题之一:)有时您必须搜索其他模块,而不是尝试解决模块中无法解决的问题!!!还有一个问题,当until循环重试任务时,如何打印?我刚看到它,它会延迟打印直到它成功!?对不起,你能告诉我印刷品的意思吗?是否要在执行直到处理时打印任务结果输出?感谢sky_jokerxx,我解决了它。不过,我现在还有一个问题。当我从vyOS VM获取IP地址时,我总是获取DHCP地址,但是,当我再次运行PlayBook时,我从eht1或eht2获取静态IP地址,而不是从eth0获取。VMWare中是否有办法指定将哪个IP地址用作guest.ipAddress?