Не могу сказать, когда Ansible сервер работает - PullRequest
0 голосов
/ 07 января 2020

У меня есть Ansible playbook для создания Linode серверов. У меня проблема в том, что мой playbook не может определить, когда работает новый сервер. Я использую Ansible 2.8.4. Моя книга воспроизведения выглядит следующим образом:

---
hosts: 127.0.0.1
gather_facts: False

- name: create server
  linode_v4:
    label: "{{ host_name }}_{{ 100 | random }}"
    access_token: "{{ linode_api4_key }}"
    type: "{{ plan_1GB }}"
    region: "{{ region_us_central }}"
    image: "{{ image_debian_10 }}"
    root_pass: "{{ linode_root_password }}"
    authorized_keys: "{{ my_ssh_public_key }}"
    tags: "inventory.ini"
    state: present
  register: linode

- name: save new server's ip address to a fact
  set_fact: ip_addr={{ linode.instance.ipv4 }}
  tags: always

- debug:
    var: ip_addr

- name: wait until new server is up and listening on port 22
  wait_for:
    host: "{{ ip_addr }}"
    port: 22
    delay: 2
    timeout: 600
    state: started
    msg: "Server port is not listening"
  tags: always

Я тоже пробовал это так:

- name: wait until new server is up
  local_action:
    module: wait_for
    state: started
    host: "{{ ip_addr }}"
    port: 22
    delay: 1
    timeout: 100

Я пытался сделать это с помощью wait_for, а также с помощью local_action, но ни один из них не работает. Плейбук никогда не возвращается из задачи ожидания. Я слежу за своей приборной панелью Linode во время работы playbook и вижу, что этот IP-адрес, который я передаю задаче через «ip_addr», является правильным, и приборная панель также показывает мне, когда сервер работает. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Вы можете попробовать это.

- name: Check if host is accessible
  wait_for: host=<host to check> port=80 timeout=3
  register: host_accessible
  failed_when: False

- include: next_task_you_want.yml
  when: host_accessible.state is defined and host_accessible.state == "started"
0 голосов
/ 07 января 2020

Я решил аналогичную проблему с тайм-аутами, зарегистрировав результат действия и повторив попытку, пока результат не потерпит неудачу. Вы можете настроить задержку между повторными попытками и максимальное количество попыток:

Кроме того, я заметил, что вы не включили в свою игру состояние, которое может вызывать проблему.

- name: wait until new server is up and listening on port 22
  wait_for:
    host: mywebserver.com
    port: 22
    state: started         # Port should be open
    delay: 0               # No wait before first check (sec)
    timeout: 4             # Stop checking after timeout (sec)
  register: waitfor_result
  until: waitfor_result is not failed
  retries: 50
  delay: 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...