Ansible с sh тайм-аут соединения после перезагрузки - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в Ansible и при попытке выполнить операцию после проверки системы требуется перезагрузка или нет, и это будет обрабатываться самим ansible, я могу определить, требуется ли перезагрузка системы или нет, после того, как этой системе требуется некоторое время для того, чтобы она заработала (в начальном состоянии), по умолчанию она выполняет 5 с sh попыток подключений, чтобы проверить работоспособность системы. Некоторые пункты, которые я хотел бы добавить: есть настройка по умолчанию 5 попыток для s sh в ansible .config можно ли перезаписать это значение в playbook.

Есть ли способ увеличить задержку между повторными попытками, если s sh попыток остается неизменным (например: 5) Я пытался добиться того же, но не смог сделать это.

- name: Check for require reboot
  hosts: "{{ target_host }}"
  remote_user: root
  gather_facts: False
  tasks:
    - name: Performing reboot check now after patch integration
      command: needs-restarting -r
      register: needsrestarting
      changed_when:
        - needsrestarting.rc != 0
      failed_when:
        - needsrestarting.rc != 1
        - needsrestarting.rc != 0

    - name: Reboot the server
      tags: reboot
      command: reboot
      async: 1
      poll: 0
#      when:
#        - needsrestarting.rc == 1

    - name: Adding delay for system to come up
      wait_for:
       timeout: 300

    - name: Wait for the nodes to wake up for login with fixed timer
      wait_for:
        host={{ ansible_ssh_host }}
        port={{ ansible_ssh_port }}
        timeout=300
        state=started
        delegate_to= "{{ inventory_hostname }}"
        ignore_errors= yes
      delay: 60
      retries: 20

журналы:

 UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

1 Ответ

1 голос
/ 23 апреля 2020

Вам необходимо передать задачу wait_for контроллеру Ansible :

- name: Adding delay for system to come up
  wait_for:
    timeout: 300
  delegate_to: localhost

В противном случае задача wait_for должна быть выполнено на цели , которая недоступна, так как перезагружается. Это модуль общего пользования, который служит многим целям. Иногда имеет смысл использовать удаленно, а иногда нет.

С другой стороны, можно предпочесть выполнение сборника пьес локально, в конечном итоге делегируя задачи целевым объектам. Это решение может быть обусловлено тем, сколько задач должно быть выполнено локально, а сколько нет:

- name: Check for require reboot
  hosts: "{{ target_host }}"
  remote_user: root
  gather_facts: False
  connection: local
  tasks:
    ...

Обратите внимание, что локальное выполнение не имеет никакого отношения к целевым хостам, инвентарю и т. Д. c., как они все равно повторяются. Вы можете обратиться к целому списку целей только с помощью локальных исполнений (например, модули vmWare , которые выполняются на контроллере и создают диски на объектах инвентаризации).

Из Ansible Документы по wait_for модулю , вы можете реально улучшить условия ожидания, указав c s sh подключения (значение по умолчанию "timeout" 300 с):

# Do not assume the inventory_hostname is resolvable and delay 10 seconds at start
- name: Wait 300 seconds for port 22 to become open and contain "OpenSSH"
  wait_for:
    port: 22
    host: '{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}'
    search_regex: OpenSSH
    delay: 10
  connection: local

Или используйте для этого указанный модуль c wait_for_connection :

# Wake desktops, wait for them to become ready and continue playbook
- hosts: all
  gather_facts: no
  tasks:
  - name: Send magic Wake-On-Lan packet to turn on individual systems
    wakeonlan:
      mac: '{{ mac }}'
      broadcast: 192.168.0.255
    delegate_to: localhost

  - name: Wait for system to become reachable
    wait_for_connection:

  - name: Gather facts for first time
    setup:
  ...

Обратите внимание на первое задание, выполненное локально, поскольку цели еще не доступны, но назначение для пакетов c magi.

После этого нет необходимости делегировать задачу wait_for_connection, , потому что она построена таким образом .

...