Я вызываю веб-сервис и возвращаю JSON. Я хочу условно запустить последующую задачу в зависимости от того, найдено ли конкретное значение name.
Например, установите значение nameExists тогда и только тогда, когда массив values содержит поле name из myDemo. Таким образом, в этом случае nameExists будет определено:
...
"failed": false,
"json": {
"values": [{
"id": "1234",
"name": "myDemo"
},
{
"id": "6789",
"name": "myDemo2"
}]
},
"msg": "OK (100 bytes)"
...
Вот что я сейчас пытаюсь:
# Call API
- name: Call API
uri:
url: myURL
method: POST
register: apiCheckResult
- name: Debug Auto tags
debug:
msg: "{{ item.name }}"
loop: "{{ apiCheckResult.json['values'] }}"
when: item.name == "myDemo"
register: tagExists
В некотором смысле это работает, но дает мне полный вывод JSON, все, что мне нужно, это true/false.
Я на правильном пути или есть лучший способ добиться этого?

Вы (обычно) не используете задачу debug для установки переменных. Вероятно, вы захотите использовать set_fact. Если я правильно понимаю ваш вопрос, вы хотите установить логическое значение tagExists в true, если один из элементов в списке values ответа API содержит namemyDemo. Это может выглядеть так:
- set_fact:
tagExists: "{{ apiCheckResult.json|json_query('values[?name == `myDemo`]') }}"
«Но подождите!», — скажете вы, — «это не логическое значение!». Пока ты прав, можешь обращаться вроде вкл. Например, установив tagExists с помощью этой задачи, вы можете сделать это:
- debug:
msg: "The tag exists!"
when: tagExists
Это работает, потому что непустой список оценивается как значение true в логическом контексте (а пустой список оценивается как false). Приведенное выше выражение json_query возвращает непустой список, если есть совпадение, и пустой список в противном случае.
Если вы В самом деле хотите логическое значение, вы можете сделать это вместо этого:
- set_fact:
tagExists: "{{ true if apiCheckResult.json|json_query('values[?name == `myDemo`]') else false }}"