Проверка задач: режим проверки и режим сравнения
Ansible предоставляет два режима выполнения для проверки задач: режим проверки и режим сравнения. Эти режимы можно использовать отдельно или вместе. Они полезны при создании или редактировании плейбука или роли, когда нужно знать, что они будут делать. В режиме проверки Ansible выполняется, не внося изменений в удалённые системы. Модули, поддерживающие режим проверки, сообщают об изменениях, которые они внесли бы. Модули, не поддерживающие режим проверки, ничего не сообщают и не делают. В режиме сравнения Ansible предоставляет сравнения до и после. Модули, поддерживающие режим сравнения, отображают подробную информацию. Режимы проверки и сравнения можно объединить для подробной проверки плейбука или роли.
Использование режима проверки
Режим проверки — это всего лишь симуляция. Он не будет генерировать вывод для задач, в которых используются условия на основе зарегистрированных переменных (результаты предыдущих задач). Однако этот режим отлично подходит для проверки плейбуков управления конфигурацией, которые выполняются на одном узле за раз. Чтобы запустить плейбук в режиме проверки:
ansible-playbook foo.yml --check
Принудительное включение или запрет режима проверки для задач
Добавлено в версии 2.2.
Если вы хотите, чтобы определённые задачи всегда выполнялись в режиме проверки или никогда в нём не выполнялись, независимо от того, запускаете ли вы плейбук с --check или без него, добавьте к этим задачам параметр check_mode:
- Чтобы принудительно выполнить задачу в режиме проверки, даже если плейбук запущен без
--check, задайте значениеcheck_mode: true. - Чтобы принудительно выполнить задачу в обычном режиме и внести изменения в систему, даже если плейбук запущен с
--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.
Пропуск задач или игнорирование ошибок в режиме проверки
Добавлено в версии 2.1.
Если при запуске Ansible в режиме проверки вы хотите пропустить задачу или игнорировать ошибки в задаче, используйте магическую логическую переменную ansible_check_mode, которой присваивается значение True при запуске Ansible в режиме проверки. Например:
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 для ansible-playbook можно использовать отдельно или вместе с --check. При запуске в режиме сравнения любой модуль, поддерживающий этот режим, сообщает о внесённых изменениях или, если он используется с --check, об изменениях, которые были бы внесены. Режим сравнения чаще всего применяется в модулях, работающих с файлами (например, в модуле template), но другие модули также могут показывать информацию «до и после» (например, модуль user).
Режим сравнения создаёт большой объём вывода, поэтому его лучше использовать при проверке одного узла за раз. Например:
ansible-playbook foo.yml --check --diff --limit foo.example.com
Добавлено в версии 2.4.
Принудительное включение или запрет режима сравнения для задач
Поскольку параметр --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–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_checkmode.html