Ansible - режим проверки с файловым модулем и зависимыми шагами

Вопрос задан: 8 месяцев назад Последняя активность: 5 месяцев назад
up 1 down

В моих сборниках пьес у меня часто бывают такие шаги, как «создать каталог, а затем что-нибудь сделать в нем», например:

- name: Create directory
  file:
    path: "{{ tomcat_directory }}"
    state: directory

- name: Extract tomcat
  unarchive:
    src: 'tomcat.tar.gz'
    dest: '{{ tomcat_directory }}'

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

Есть ли способ, как я мог бы написать шаги, подобные этим, где я создаю папку, а затем работаю в ней, и в то же время могу запустить playbook в режиме проверки (не пропуская такие шаги)?

3 ответа

up 2 down

Режим проверки может быть немного болезненным. У вас есть только два варианта:

1) Добавьте условные обозначения в задачи, чтобы пропустить их в режиме проверки, чего вы не хотите делать. Для справки:

when: not ansible_check_mode

2) Вы можете изменить поведение задачи в режиме проверки. Если вы установите check_mode: no на задании, то в режиме проверки он будет вести себя так же, как в обычном режиме. То есть, несмотря на то, что вы указали режим проверки, он фактически выполнит задачу и создаст каталог, если он еще не существует. Вы должны сделать выбор, если вы удовлетворены тем, что данное задание действительно выполняется в режиме проверки, поэтому оно подходит только для задач с низким уровнем риска, но предоставляет вам маршрут для продолжения тестирования остальной части вашей книги игр, которая зависит от рассматриваемого шага.

Ansible Check Mode Docs

up 0 down

Опция будет «зарегистрировать: результат» и проверить «когда определено: result.state»

- name: Create directory
  file:
    path: "{{ tomcat_directory }}"
    state: directory
  register: result

- name: Extract tomcat
  unarchive:
    src: 'tomcat.tar.gz'
    dest: '{{ tomcat_directory }}'
  when: result.state is defined
up 0 down

Вы могли бы использовать ignore_errors вариант задачи, наряду с ansible_check_mode переменная, чтобы игнорировать ошибки с вашим Extract tomcat задание только при работе в режиме проверки, например:

- name: Create directory
  file:
    path: "{{ tomcat_directory }}"
    state: directory

- name: Extract tomcat
  unarchive:
    src: 'tomcat.tar.gz'
    dest: '{{ tomcat_directory }}'
  ignore_errors: "{{ ansible_check_mode }}"

Запуск этого в режиме проверки покажет Extract tomcat задача не выполнена из-за dest не существует Тем не менее, вместо сбоя playbook, сбой задачи будет помечен как проигнорированный, и выполнение playbook продолжится.