У меня есть пьеса ниже (упрощенная).
Он отлично работает, но я хотел бы провести разминку, когда я развертываюсь только на одном хосте (например, 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