Назад | Перейти на главную страницу

Проблема с модулем Ansible wait_for - как надежно проверить, запущена ли виртуальная машина?

Я пытаюсь разработать простую книгу (которая позже будет использоваться в более крупных), чтобы проверить, работают ли виртуальные машины Windows в инвентаре. Я использую Ansible Tower (бесплатная версия) для управления динамической инвентаризацией VMware, содержащей виртуальные машины Windows. Эти виртуальные машины предварительно настроены для работы с 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 }}"

У меня есть пауза, чтобы предоставить некоторое время для загрузки виртуальной машины; я пробовал время от 1 до 5 минут. На самом деле виртуальные машины появляются менее чем за 3 минуты.

Я столкнулся со странной проблемой с w.r.t. wait_for. Пока виртуальные машины запущены и работают, как видно из консоли vCenter, Ansible сообщает об этой ошибке:

фатальный: [localhost]: НЕ ВЫПОЛНЕНО! => {"failed": 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 раздел. Удивительно, та же книга запускается и сообщает об успехе при повторном запуске. Как я могу это решить?

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