Возможный ответ "до" от Jira API
Я пытаюсь запланировать сборщик игровых тетрадей для повторной индексации Jira, я также хотел бы, чтобы наш разработчик мог использовать эту специальную возможность, что они могли бы сделать через AWX, я могу начать повторную индексацию, но хотел бы уведомление, когда переиндексация завершена.
Вот мои команды CLI и выходные данные:
[root@devjira02 ~]# curl -u admin:admin123! -X GET https://devjira.comapny.com/rest/api/2/reindex/progress
{"progressUrl":"/secure/admin/jira/IndexProgress.jspa?taskId=12720","currentProgress":35,"currentSubTask":"Currently working on: Issue index","type":"BACKGROUND","submittedTime":"2019-04-01T14:23:50.971+0100","startTime":"2019-04-01T14:23:50.973+0100","success":false}
[root@devjira02 ~]# curl -u admin:admin123! -X GET https://devjira.company.com/rest/api/2/reindex/progress
{"progressUrl":"/secure/admin/jira/IndexProgress.jspa?taskId=12720","currentProgress":100,"type":"BACKGROUND","submittedTime":"2019-04-01T14:23:50.971+0100","startTime":"2019-04-01T14:23:50.973+0100","finishTime":"2019-04-01T14:24:33.922+0100","success":true}
Моя книга игр:
- name: DEV Jira Re-index
become: true
become_method: sudo
become_user: root
hosts: DEVJIRA02
gather_facts: yes
tasks:
- name: Jira Re-index
uri:
url: https://devjira.company.com/rest/api/2/reindex?type=BACKGROUND_PREFERRED
method: POST
user: admin
password: admin123!
force_basic_auth: yes
status_code: [201, 202]
- name: Wait until re-index completes
uri:
url: https://devjira.company.com/rest/api/2/reindex/progress
method: GET
user: admin
password: admin123!
force_basic_auth: yes
status_code: [201, 202]
return_content: yes
body_format: json
register: result
until: result.json.success == true
retries: 180
delay: 30
Я хотел бы, чтобы вторая часть повторялась до успеха == true, после чего AWX может отправить уведомление по электронной почте. Запуск книги воспроизведения вручную запустит переиндексацию, но повторная попытка будет повторена, даже если переиндексация завершена
1 ответ
Изменить после комментария пользователя:
Хотя мое следующее предложение все еще является хорошей практикой и предотвратит некоторые возможные будущие головные боли, в данном случае оно оказалось не проблемой.
Сначала я не обратил внимания на то, что вы запрашиваете URL-вызов для возврата статуса 201 или 202, в то время как в документации jira указано, что вы получите 200.
Вы должны либо:
- Измените ожидаемый код возврата:
status: 200
- Отбросьте опцию статуса полностью и измените ваше состояние:
until: response.status == 200 and (result.json.success | bool)
Оригинальное предложение (не исправляет, но все же хорошая практика)
Вообще-то плохая идея в ANSIBLE проверять на наличие литерала true
или же false
потому что ansible/yaml довольно разрешительно относится к значениям, которые вы можете использовать для этого (да, true, Y, 1, 234, нет, false, 0, ...), а также потому, что значения иногда можно интерпретировать как чистые строки, а не логические значения (попробуйте с помощью vars_prompt устранить проблему, если у вас есть время).
Ansible предоставляет фильтр для проверки логического представления значения. Я не уверен на 100%, что это решит вашу текущую проблему, но я бы попробовал с until: result.json.success | bool