Проверка задач: режим check и режим diff
Ansible предоставляет два режима выполнения, которые проверяют задачи: режим check и режим diff. Эти режимы могут использоваться по отдельности или вместе. Они полезны при создании или редактировании playbook или роли, когда вы хотите узнать, что они сделают. В режиме check Ansible выполняется без внесения каких-либо изменений на удаленных системах. Модули, поддерживающие режим check, сообщают об изменениях, которые они бы внесли. Модули, не поддерживающие режим check, ничего не сообщают и ничего не делают. В режиме diff Ansible предоставляет сравнения «до» и «после». Модули, поддерживающие режим diff, отображают подробную информацию. Вы можете объединить режимы check и diff для подробной проверки вашего playbook или роли.
Использование режима check
Режим check — это просто симуляция. Он не будет генерировать вывод для задач, использующих условные выражения, основанные на зарегистрированных переменных (результаты предыдущих задач). Однако он отлично подходит для проверки playbooks управления конфигурацией, которые выполняются на одном узле за раз. Чтобы запустить playbook в режиме check:
ansible-playbook foo.yml --check
Принудительное выполнение в режиме check для задач
Новое в версии 2.2.
Если вы хотите, чтобы определенные задачи всегда выполнялись или никогда не выполнялись в режиме check, независимо от того, запускается ли playbook с --check, или без него, вы можете добавить опцию check_mode к этим задачам:
- Чтобы принудительно выполнить задачу в режиме check, даже когда playbook вызывается без
--check, установитеcheck_mode: true. - Чтобы принудительно выполнить задачу в обычном режиме и внести изменения в систему, даже когда playbook вызывается с
--check, установитеcheck_mode: false.
Например:
tasks:
- name: This task will always make changes to the system
ansible.builtin.command: /something/to/run --even-in-check-mode
check_mode: false
- name: This task will never make changes to the system
ansible.builtin.lineinfile:
line: "important config"
dest: /path/to/myconfig.conf
state: present
check_mode: true
register: changes_to_important_config
Запуск отдельных задач с check_mode: true может быть полезен для тестирования Ansible модулей, как для тестирования самого модуля, так и для тестирования условий, при которых модуль вносит изменения. Вы можете регистрировать переменные (см. Условные выражения) в этих задачах для получения более подробной информации о потенциальных изменениях.
Примечание
До версии 2.2 существовал только эквивалент check_mode: false. Обозначение для этого было always_run: true.
Пропуск задач или игнорирование ошибок в режиме check
Новое в версии 2.1.
Если вы хотите пропустить задачу или проигнорировать ошибки в задаче, когда вы запускаете Ansible в режиме check, вы можете использовать магическую булеву переменную ansible_check_mode, которая установлена в значение True при запуске Ansible в режиме check. Например:
tasks:
- name: This task will be skipped in check mode
ansible.builtin.git:
repo: ssh://git@github.com/mylogin/hello.git
dest: /home/mylogin/hello
when: not ansible_check_mode
- name: This task will ignore errors in check mode
ansible.builtin.git:
repo: ssh://git@github.com/mylogin/hello.git
dest: /home/mylogin/hello
ignore_errors: "{{ ansible_check_mode }}"
Использование режима diff
Опция --diff для ansible-playbook может использоваться сама по себе или вместе с --check. Когда вы выполняете в режиме diff, любой модуль, поддерживающий режим diff, сообщает о произведенных изменениях или, если используется с --check, о изменениях, которые должны были быть произведены. Режим diff чаще всего используется в модулях, манипулирующих файлами (например, модуль template), но и другие модули могут показывать информацию «до» и «после» (например, модуль user).
Режим diff генерирует большое количество вывода, поэтому лучше всего использовать его при проверке одного хоста за раз. Например:
ansible-playbook foo.yml --check --diff --limit foo.example.com
Новое в версии 2.4.
Выполнение или предотвращение режима diff для задач
Поскольку опция --diff может раскрывать конфиденциальную информацию, вы можете отключить её для задачи, указав diff: false. Например:
tasks:
- name: This task will not report a diff when the file changes
ansible.builtin.template:
src: secret.conf.j2
dest: /etc/secret.conf
owner: root
group: root
mode: '0600'
diff: false
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_checkmode.html