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

Развертывание Ansible "для прогрева"

У меня есть пьеса ниже (упрощенная).

Он отлично работает, но я хотел бы провести разминку, когда я развертываюсь только на одном хосте (например, serial: 1), а затем останавливаюсь, чтобы я мог проверить журналы, чтобы убедиться, что все в порядке, прежде чем выпускать что-то размером с 33% всех моих услуг.

Есть ли простой способ сделать это с помощью Ansible?

Прямо сейчас у меня есть действительно хакерское решение, включающее, по сути, копирование и вставку моего кода с serial: 1, оператором ошибки, кучей проверок when и аргументами командной строки. Должен быть способ получше, чем испортить чистый и читаемый сценарий. Я просто не уверен, что это может быть.

- name: 33% at a time max-analytics deploy
  hosts: role_max_logger
  serial: 33%
  tasks:
    - name: take out of lb analytics
      shell: haproxy stuff
    - pause:
        seconds: 5
    - name: gracefulReloading max-analytics
      shell: reload stuff
    - name: add back to lb analytics
      shell: haproxy stuff

Начиная с Ansible 2.2 вы можете установить динамический размер партии.

---
- hosts: mygroup
  serial:
   - 1
   - 33%
  tasks:
    - shell: date
    - pause:
        prompt: check if everything ok
      when: ansible_play_hosts.index(inventory_hostname) == 0

Это займет только один хост в первом пакете, выполнит команду date на этом хосте и сделает паузу, если текущий хост является первым в игровых хостах. Таким образом, он будет приостановлен только один раз, а затем 33% пакетов будут выполнены без паузы.

Вы можете сделать серийный номер переменной и передать сумму, которую вы хотите, чтобы playbook запускал. Например, вы можете передать «1» в качестве порядкового номера и ближе к концу playbook, если переменная равна «1», выйти из playbook.

Если переменная не равна «1», playbook продолжится с другими серверами. Ваш первый сервер может быть развернут снова, но это не проблема, так как ваши изменения уже должны быть актуальными.

Дополнительная информация здесь: http://docs.ansible.com/ansible/playbooks_variables.html#passing-variables-on-the-command-line

и используйте модуль ошибки для выхода, если переменная равна «1»: http://docs.ansible.com/ansible/fail_module.html