Получение списка репозиториев и версий их тегов за один вызов

#azure #command-line-interface #sh

#azure #интерфейс командной строки #sh

Вопрос:

У меня есть два запроса azure CLI.

 az acr repository list
  

чтобы получить список репозиториев в моем реестре контейнеров

 az acr repository show-tags
  

для получения тега версии для каждого из репозиториев, возвращенных первым запросом

Это приводит к первоначальному вызову для извлечения списка, а затем к 1 вызову для каждого возвращенного репозитория. Есть ли альтернатива, которая позволила бы сократить количество требуемых вызовов до одного? Извлечение списка репозиториев и их версии за один раз.

команде show-tags требуется параметр репозитория, который является обязательным, и я не знаю ни о каких других командах, которые возвращали бы нужную мне информацию.

Ответ №1:

На данный момент невозможно выполнить это за один вызов.

Как кто-то уже упоминал, наименьший шаг вызова — создать скрипт для получения всех репозиториев (сохранить репозитории в переменной), затем в цикле использовать az acr repository show-tags для получения их тегов.

Те же скрипты, что и blow:

 result="$(az acr repository list -n ACR_name --output tsv)"

for i in $result; do az acr repository show-tags -n ACR_name --repository $i; done
  

Результат теста, как показано ниже:

введите описание изображения здесь

Комментарии:

1. Именно этим я сейчас и занимаюсь, спасибо за подтверждение 🙂

Ответ №2:

AFAIK в настоящее время нет альтернативы, которая могла бы получить список репозиториев и их версий за один раз. Я рекомендую поделиться этим отзывом, разместив его здесь -> https://feedback.azure.com/forums/903958-azure-container-registry

Просто предложение, о котором вы, возможно, уже знаете, заключается в том, что на данный момент в качестве обходного пути вы можете разработать небольшой скрипт для извлечения всех репозиториев с помощью команды list и последовательно вводить каждое имя репозитория одно за другим в качестве входных данных в команду show tags и объединять выходные данные всех репозиториев.

Надеюсь, это поможет!!

Ответ №3:

Чтобы получить список полных имен изображений, с которыми вы можете использовать docker pull , выполните это:

 export REGISTRY=mycontainerregistry
  
 #!/bin/bash
mycontainers=$(az acr repository list --name $REGISTRY --output tsv)
for i in $mycontainers
do
    echo -n "$REGISTRY.azurecr.io/$i:"
    az acr repository show-tags -n $REGISTRY --repository $i --output tsv|tail -1
done
  

Ответ №4:

Я попробовал приведенный выше скрипт, опубликованный bbaassssiiee , и, похоже, он работает для извлечения только последних изображений. Если вы хотите сгенерировать список ВСЕХ изображений в репозитории, используя IMAGE_REPO:TAG формат, я создал следующий скрипт bash, аналогичный приведенному выше, чтобы сделать именно это:

 #!/bin/bash
    
registry_name='REGISTRY_NAME'
destination='LOCATION_TO_STORE_LIST'
az acr login --name $registry_name
touch $destination

repos="$(az acr repository list -n $registry_name --output tsv)"

for i in $repos; do
    images="$(az acr repository show-tags -n $registry_name --repository $i --output tsv --orderby time_desc)"
    for j in $images; do
        echo $i":"$j >> $destination;
    done;
done;
  

Единственными переменными, которые вам нужно установить, являются registry_name и destination для сохранения списка. Я хотел немного очистить наш реестр контейнеров, потому что там много неиспользуемых изображений, поэтому идея заключалась в том, чтобы определить, какие изображения нам нужно сохранить из списка, удалить их, а затем создать скрипт для запуска az acr repository delete с оставшимися изображениями, чтобы очистить реестр и уменьшить объем хранилища, которое мы используем для реестра контейнеров, чтобы избежать ненужных затрат.