如何重试,直到为IP地址分配了Ansible和vmware_vm_信息?
我想再试一次,直到获得主机(guest\u name:)的vm\u info:module的ip\u地址。问题是,有时配置的vm没有启动,因此我无法获得IP地址 问题: 我应该如何定义我的角色,直到定义ip_地址为止如何重试,直到为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
---
- 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?