Обработчик уведомлений Ansible with_items

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

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

- name: Add variable1
  become: yes
  lineinfile: dest=/etc/environment regexp='^VARIABLE1=' line='VARIABLE1={{VARIABLE1}}'
  notify: restart application1

- name: restart application1
  become: yes
  command: restart application1

Поскольку у меня есть много приложений, делающих это таким образом, у меня много задач. Я хотел бы, чтобы у вас была задача перебирать приложения, используя with_items, Чего я не могу понять, так это как получить одну задачу-обработчик для перезапуска. Можно ли передать обработчику, какое приложение нуждается в перезапуске? Что-то вроде:

- name: add variables
  become: yes
  lineinfile: dest=/etc/environment regexp='^{{item.app_name}}='
  line='{{item.app_name}}={{ item.variable }}'
  notify: restart apps   #pass app_name to handler somehow
  with_items:
  - { variable: "FIRST", app_name: "APP1"}
  - { variable: "SECOND", app_name: "APP2"}
  - { variable: "THIRD", app_name: "APP3"}


- name: restart apps
  become: yes
  command: restart {{app_name}}

1 ответ

Решение

Вы можете эмулировать функциональность обработчика самостоятельно, регистрируя значения и перебирая их в последующей задаче (эта вторая задача может быть или не быть определена как обработчик):

- name: add variables
  lineinfile:
    dest: ./testfile
    regexp: '^{{item.app_name}}='
    line: '{{item.app_name}}={{ item.variable }}'
  register: add_variables
  with_items:
    - { variable: "FIRST", app_name: "APP1"}
    - { variable: "SECOND", app_name: "APP2"}
    - { variable: "THIRD", app_name: "APP3"}

- name: restart apps
  become: yes
  command: restart {{item.item.app_name}}
  when: item.changed
  with_items: "{{ add_variables.results }}"
Другие вопросы по тегам