Ansible 运行meta:在循环中刷新\u库存?
我正在使用Ansible和a在libvirt中构建一些虚拟机。创建机器后,我需要等待它们获取ip地址。我不能简单地这样做:Ansible 运行meta:在循环中刷新\u库存?,ansible,libvirt,Ansible,Libvirt,我正在使用Ansible和a在libvirt中构建一些虚拟机。创建机器后,我需要等待它们获取ip地址。我不能简单地这样做: - wait_for_connection: 因为在创建虚拟机之后,它们就没有ip地址了。我需要做的是: - name: wait until node has acquired an address meta: refresh_inventory until: ansible_host|ipaddr retries: 30 delay: 1 - nam
- wait_for_connection:
因为在创建虚拟机之后,它们就没有ip地址了。我需要做的是:
- name: wait until node has acquired an address
meta: refresh_inventory
until: ansible_host|ipaddr
retries: 30
delay: 1
- name: wait until node has finished booting
wait_for_connection:
也就是说,我需要等待,直到每个主机的资源清册信息在ansible\u host
中包含一个地址。不幸的是,上面的任务不起作用:它只执行一次并继续执行
我可以硬编码一个延迟:
- pause:
seconds: 30
但我希望这里有一个更积极的检查,以避免不必要的延迟(如果某件事情需要比预期更长的时间,则会出现问题)。在对它进行了一点修改后,我最终做了以下工作:
- hosts: ovn
gather_facts: false
tasks:
- name: wait for nodes to acquire addresses
delegate_to: localhost
command: >-
ansible-inventory --host {{ inventory_hostname }}
register: nodecheck
changed_when: false
until: >-
(nodecheck.stdout|from_json).ansible_host|default('')|ipaddr
retries: 30
delay: 1
- meta: refresh_inventory
这会反复调用ansible inventory--host
,它以JSON格式输出
的清单信息。我们解析它,查找ansible\u主机
,并验证它是一个ip地址
一旦我们知道资源清册源能够报告所有节点的ip地址,我们就调用
refresh\u inventory
不幸的是,这个主题似乎很清楚:不支持元任务循环。
。所以我猜直到循环属于这一类。您是否考虑过首先在包含元任务的include上循环并设置一个事实,直到该事实为真?这是一种工作环境,但可能值得一试……事实证明,在包含任务
之前,您也不能使用。