Роль запуска Ansible на основе измененного статуса

#linux #ansible

#linux #ansible

Вопрос:

Я вызываю все роли по порядку, и теперь мне нужно добавить проверку условий перед запуском других ролей,

Текущий main.yml

 - hosts: all
  gather_facts: no
  roles:
     - artifacts_copy
     - app_build
     - db_build
     - log_build
 

artifacts_copy: копирует код

Можно ли добавить условие, если роль artifacts_copy изменилась, тогда запустите оставшиеся роли, иначе просто пропустите оставшиеся роли

   something like this

  roles:
     - artifacts_copy
     when: artifacts_copy.chnaged=true # then run below roles
           - app_build
           - db_build
           - log_build
 

Комментарии:

1. Модуль может возвращать значение , например changed . Роль не может этого сделать. Используйте include_role или import_role .

Ответ №1:

Я только что понял это, и это может помочь другим, поэтому публикую этот ответ

роли:

        - artifacts_copy
       - app_build
       - db_build
       - log_build
 

artifacts_copy: tasks/main.yml добавил установленный факт следующим образом

 ---
# tasks file for artifacts
- name: copy artifacts
  copy:
     src: files
     dest: /root/mycode/
  register: artifacts_copy_status

- set_fact:
    artifacts_copy_status={{ artifacts_copy_status }}
       
 

затем я вызвал роль, как показано ниже

 ---
- hosts: all
  gather_facts: no
  roles:
     - artifacts_copy
     - role: app_build
       when: artifacts_copy_status.changed | bool ==  true
     - role: db_build
       when: artifacts_copy_status.changed | bool == true
     - role: log_build
       when: artifacts_copy_status.changed | bool == true