Я пытаюсь найти тег, соответствующий определенному репозиторию изображений в реестре Docker.
curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list\
result: {"name":"ancean-api","tags":["v1.0.0","v19.0.0","v11.1.1"]}
Как проверить, существует ли тег v1.0.0(example) в выходных данных json, как показано выше?
Я пытался
curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq '.tags | select(. == v1.0.19)'
jq-документ Документ jq попытался использовать select, но потерпел неудачу. Приведенная выше команда успешна независимо от того, какой тег используется.
curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq '.tags | .[]' | grep "v1.0.0"
Я пытался использовать его с grep, но безуспешно.
Через ответ в личку решил проблему с функцией IN
.
curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq IN'(.tags[]; "v1.0.0")'
Используя IN
, я смог вернуть значение bool, когда в данных json было определенное значение.
🤔 А знаете ли вы, что...
Shell обладает возможностью работы с удаленными серверами с помощью SSH.
Если объект, содержащий ключ tags
, находится внутри ключа default
другого объекта (как показано в вашем примере, хотя кавычки отсутствуют), вам необходимо включить его в путь.
Там вы можете использовать функцию IN
для проверки содержания рассматриваемого элемента, которая выдает логическое значение:
IN(.default.tags[]; "v1.0.0")
Кроме того, флаг --exit-status
(или -e
) может устанавливать статус выхода в зависимости от результата.