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'
вы сравниваете его со строкой, которая всегда будет давать отрицательный результат.