我正在尝试开发一个简单的剧本(稍后将在更大的剧本中使用)来检查清单中的 Windows VM 是否已启动并正在运行。我使用 Ansible Tower(免费版)来管理包含 Windows VM 的动态 VMware 清单。这些 VM 已预先配置为与 Ansible 配合使用(启用 winrm 等)。因此,我不会维护任何手动编辑的主机文件。
- name: Check if VMs are up and running
hosts: localhost
tasks:
- name: Pauses the workflow
pause: minutes=5
- name: Wait for port number 5986 to be available
vars:
- vmname: ['VM-NO1', 'VM-NO2']
local_action: wait_for host={{ hostvars[item].ansible_ssh_host }} state=started delay=10 timeout=15 connect_timeout=15
with_items: "{{ vmname }}"
我暂停了一下,以便 VM 有时间启动,我尝试过的时间范围从 1 到 5 分钟不等。实际上,VM 启动时间不到 3 分钟。
我遇到了一个奇怪的问题wait_for
。虽然从 vCenter 控制台可以看到虚拟机已启动并正在运行,但 Ansible 报告了此故障:
致命:[localhost]:失败! => {“失败”:true,“msg”:“字段“args”具有无效值,似乎包含未定义的变量。错误为:“dict object”没有属性“ansible_ssh_host”\n\n错误似乎出现在“/var/lib/awx/projects/vms/waitcheck.yml”中:第 10 行,第 7 列,但可能\n位于文件的其他位置,具体取决于确切的语法问题。\n\n有问题的行似乎是:\n\n\n - 名称:等待端口号 5986 可用\n ^ 此处\n”}
port=5986
我在该部分添加和删除了标志wait_for
。令人惊讶的是,相同的剧本运行并在第二次运行时报告成功。我该如何解决这个问题?
答案1
Ansible 2.3
tasks:
- name: Pauses the workflow
pause: minutes=5
- name: Wait for port number 5986 to be available
wait_for:
host: {{ hostvars[item]['ansible_host'] }}
port: 5986
delay: 10
state: started
with_items:
- VM-NO1
- VM-NO2
delegate_to: 127.0.0.1