Ansible обработчик читать локальный факт

У меня есть Ansible playbook для установки различного числа приложений в группе серверов. Для установки приложений необходимо запустить ряд последовательных задач, и, поскольку может быть несколько приложений, я перебираю их с помощью with_items:

Я также регистрирую любые изменения локального факта таким образом, что если три приложения выполняются в приложении A, приложение A помечается.

У меня проблемы с обработчиком. Он должен прочитать эти локальные факты и перезапустить любое приложение, которое было помечено, но мне не удается этого добиться. Мой обработчик просто пропускает, но отладка показывает локальный факт с флагом.

Мой playbook похож на это:

---
- name: Ensure the application's jar file exists
  copy:
    src: '{{ item.appName }}/{{ item.jarName }}'
    dest: '{{ AppsRootFolder }}/{{ item.appName }}/{{ item.jarName }}'
  register: task
  with_items: '{{ deployApp }}'
  notify: Restart application

- name: Registering App for later restart
  set_fact:
    myapps_toberestarted_{{ item.item.appName }}: "{{ item.changed }}"
  with_items: "{{ task.results }}"
  when: "{{ item.changed }}"

- name: Ensure the application's conf file exists
  template:
    src: '{{ item.confName }}.j2'
    dest: '{{ AppsRootFolder }}/{{ item.appName }}/{{ item.confName }}'
  register: task
  with_items: '{{ deployApp }}'
  notify: Restart application

- name: Registering App for later restart
  set_fact:
    myapps_toberestarted_{{ item.item.appName }}: "{{ item.changed }}"
  with_items: "{{ task.results }}"
  when: "{{ item.changed }}"

Обработчик мне нужна помощь со следующим. Пропускается задача "Перезапустить приложение":

- name: Restart application
  debug: var=myapps_toberestarted_{{ item.appName }}
  with_items: "{{ deployApp }}"
  when: myapps_toberestarted_{{ item.appName }} == 'true'

И наконец мой group_vars

AppsRootFolder: /opt/Apps
deployApp:
  - { appName: "API", jarName: "api.jar", confName: "api.conf" } 
  - { appName: "Demo", jarName: "demo.jar", confName: "demo.conf" } 
  - { appName: "Another", jarName: "another.jar", confName: "another.conf" } 

1 ответ

Решение

true/false (зарегистрировано в результатах задачи ' changed переменная, следовательно, также в item.changed) являются логическими значениями, а не строками, поэтому вы можете определить свое условие в обработчике следующим образом:

when: myapps_toberestarted_{{ item.appName }}

С == 'true' вы сравниваете его со строкой, которая всегда будет давать отрицательный результат.

Другие вопросы по тегам