Home > database >  go-containerregistry package lists GCR repositories from all projects / organizations
go-containerregistry package lists GCR repositories from all projects / organizations

Time:11-17

I am using the following code to list my docker repositories that are available in GCR

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/google/go-containerregistry/pkg/authn"
    gcr "github.com/google/go-containerregistry/pkg/name"
    "github.com/google/go-containerregistry/pkg/v1/google"
    "github.com/google/go-containerregistry/pkg/v1/remote"
)

func main() {

    auth, err := google.NewGcloudAuthenticator()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(auth)
    registry, err := gcr.NewRegistry("gcr.io")
    if err != nil {
        log.Fatal(err)
    }
    ctx := context.Background()
    repos, err := remote.Catalog(ctx, registry, remote.WithAuthFromKeychain(authn.DefaultKeychain))
    if err != nil {
        log.Fatal(err)
    }
    for _, repoName := range repos {
        fmt.Println(repoName)
    }
}

The problem is that despite the fact that I have performed an explicit gcloud config set project to a specific project, invocation of the above program will list ALL repos of ALL organizations and ALL projects my gcloud has access to.

Is there a way to limit the code above so that it lists the gcr repos of a specific org/project?

CodePudding user response:

"Checking the Container Registry API, and there's no way explained there to do so (seems to only implement the Docker API, which does not understand the concept of projects). There is suggested to migrate to Artifact Registry. Is this a change that you can make? Or do you need to use the Google Container Registry?" - @Jofre

"The GCP project in which a GCR repository (not registry) is created are named [(us|eu|..).]gcr.io/${PROJECT}. The registry root is gcr.io. There's a NewRepository method too that may permit referencing the Project to give you only those images. Projects are a primary resource container in GCP. You'll probably want to enumerate the projects in an Org and then enumerate the content of the repositories (!) using the approach above. You can check whether GCR is enabled in a project but likely easier to just try to enumerate its images. But, this is probably the way you'll have to proceed. Note gcloud config set project only applies to gcloud (CLI) commands not SDKs." - @DazWilkin

  • Related