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