Ansible wait_for 模块的问题 - 如何可靠地检查 VM 是否启动并正在运行?

Ansible wait_for 模块的问题 - 如何可靠地检查 VM 是否启动并正在运行?

我正在尝试开发一个简单的剧本(稍后将在更大的剧本中使用)来检查清单中的 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

相关内容