Azure Репозиторий реестра контейнеров Go Клиент не может получить атрибут - PullRequest
0 голосов
/ 28 апреля 2020

Я не могу получить атрибуты для конкретного хранилища контейнеров Azure Реестр контейнеров.

Я также пробовал странные комбинации для запуска этого.

Попытка 1

loginURI := "https://management.azure.com/subscriptions/" + subscriptionId + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.ContainerRegistry/registries/" + registryName + ".azurecr.io"

Попытка 1 сообщение об ошибке

azure: Service returned an error. Status=400 Code="MissingApiVersionParameter" Message="The api-version query parameter (?api-version=) is required for all requests."

Попытка 2

loginURI := "https://" + registryName + ".azurecr.io/acr/v1/hello-world"

Попытка 3

loginURI := "https://management.azure.com/subscriptions/" + subscriptionId + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.ContainerRegistry/registries/" + registryName + ".azurecr.io?api-version=2019-08-15-preview"

Попытка 3 сообщение об ошибке

2020/04/28 13:33:45 Error while fetching location list, containerregistry.RepositoryClient#GetAttributes: Failure responding to request: StatusCode=400 -- Original Error: autorest/
azure: Service returned an error. Status=400 Code="NoRegisteredProviderFound" Message="No registered resource provider found for location 'westus' and API version '2019-08-15-previ
ew/acr/v1/hello-world?api-version=2019-08-15-preview' for type 'registries'. The supported api-versions are '2016-06-27-preview, 2017-03-01, 2017-10-01, 2019-05-01, 2019-12-01-prev
iew, 2017-06-01-preview'. The supported locations are 'westus, eastus, southcentralus, westeurope, northeurope, uksouth, ukwest, australiaeast, australiasoutheast, centralindia, ko
reacentral, francecentral, southafricanorth, uaenorth, eastasia, japaneast, japanwest, southeastasia, southindia, brazilsouth, canadaeast, canadacentral, centralus, eastus2, northc
entralus, westcentralus, westus2, switzerlandnorth'."

Но все равно не повезло при получении атрибутов

Может кто-нибудь посоветовать исправить меня, если я здесь что-то не так делаю? Это правильный способ предоставления loginURI для клиента хранилища контейнеров? Нужно ли указывать ApiVersion для того же самого, если да, то как? Есть ли примеры, доступные для репозитория ACR, чтобы я мог сослаться на него?

Пример кода можно найти здесь

Go версия go1.14.2 windows / amd64

package main

import (
    "context"
    "fmt"
    "github.com/Azure/azure-sdk-for-go/profiles/preview/preview/containerregistry/runtime/containerregistry"
    "github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2015-11-01/subscriptions"
    "github.com/Azure/go-autorest/autorest/azure/auth"
    "log"
    "os"
)
func main() {
    subscriptionId := ""
    clientId := ""
    clientSecret := ""
    tenantId := ""
    resourceGroupName := ""
    registryName := "test"
        repositoryName := "hello-world"
    err := os.Setenv("AZURE_CLIENT_ID", clientId)
    if err != nil {
        log.Printf("Error while setting env variable, %v ", err)
    }
    err = os.Setenv("AZURE_CLIENT_SECRET", clientSecret)
    if err != nil {
        log.Printf("Error while setting env variable, %v ", err)

    }
    err = os.Setenv("AZURE_TENANT_ID", tenantId)
    if err != nil {
        log.Printf("Error while setting env variable, %v ", err)

    }
    err = os.Setenv("AZURE_SUBSCRIPTION_ID", subscriptionId)
    if err != nil {
        log.Printf("Error while setting env variable, %v ", err)
    }
    authorizer, err := auth.NewAuthorizerFromEnvironment()
    if err != nil {
        log.Printf("Error while creating an new authentication, %v ", err)

    }
    loginURI := "https://management.azure.com/subscriptions/" + subscriptionId + "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.ContainerRegistry/registries/"
    subscriptionsClient := containerregistry.NewRepositoryClient(loginURI)
    subscriptionsClient.Authorizer = authorizer
    attributes, err2 := subscriptionsClient.GetAttributes(context.Background(), registryName+ "/"+ repositoryName)
    if err2 != nil {
        log.Printf("Error while fetching attributes, %v ", err)
    }
    fmt.Print(attributes)
}
...