выполнить ansible playbook для следующего хоста после завершения одного хоста, не все разветвленные хосты - PullRequest
1 голос
/ 23 января 2020

С помощью переменной fork я могу сказать ansible, сколько хостов должно выполняться параллельно. Следующие хосты выполняются, когда все хосты из ранее завершены. В случае, если время выполнения отличается на хостах, я должен дождаться последнего завершения хоста.

Можно ли сказать ansible начать следующую игру для одного хоста после того, как закончился один, а не все запущены.

Другими словами, у меня есть сотни клиентов с игрой, работающей за 5 минут, и некоторым хостам нужно 30 минут. Мы проверили количество вилки и обнаружили, что 50 - это хорошее значение. Иногда следующие 50 должны были ждать одного хоста 25 минут.

1 Ответ

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

Q: "Можно ли сказать ansible начать следующую игру для одного хоста после его завершения?"

A : Да. Возможно. Плагин стратегии host_pinned - это то, что вы ищете. Цитата:

Ansible не будет ждать, пока другие хосты завершат sh текущую задачу, прежде чем поставить в очередь следующую задачу для хоста, которая завершилась. Как только хост завершает игру, он открывает слот для нового хоста, который ждал начала.

Пример

Позволяет создать инвентарь

$ cat hosts
all:
  hosts:
    test_01:
      wait_timeout: 1
    test_02:
      wait_timeout: 2
    test_03:
      wait_timeout: 3
    test_06:
      wait_timeout: 4
    test_09:
      wait_timeout: 5

Книга воспроизведения ниже

$ cat pinned-01.yml
- name: Play A
  hosts: all
  gather_facts: false
  strategy: host_pinned
  tasks:
    - debug:
        msg: "A:{{ inventory_hostname }}
              {{ lookup('pipe', 'date +%H-%M-%S') }}
              started"
    - wait_for:
        timeout: "{{ wait_timeout }}"
    - debug:
        msg: "A:{{ inventory_hostname }}
              {{ lookup('pipe', 'date +%H-%M-%S') }}
              finished"

дает

$ ansible-playbook pinned-01.yml -f 3 | grep msg\":
    "msg": "A:test_06 15-33-05 started"
    "msg": "A:test_09 15-33-05 started"
    "msg": "A:test_01 15-33-05 started"
    "msg": "A:test_01 15-33-08 finished"
    "msg": "A:test_02 15-33-08 started"
    "msg": "A:test_06 15-33-11 finished"
    "msg": "A:test_03 15-33-11 started"
    "msg": "A:test_02 15-33-11 finished"
    "msg": "A:test_09 15-33-12 finished"
    "msg": "A:test_03 15-33-15 finished"

Результаты

Из-за -f 3 Ansible стартовали 3 хозяина (1,9,6). Хост 1 финишировал первым и opened it's slot to a new host that was waiting to start. Хост 2 запущен. Точно так же хост 3 начал сразу после того, как хост 6 закончился. Хост 2, запущенный после хоста 9, завершил работу до хоста 9.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...