gke-deploy/services/remote.go (26 lines of code) (raw):
package services
import (
"context"
"fmt"
"github.com/google/go-containerregistry/pkg/authn"
"github.com/google/go-containerregistry/pkg/name"
v1 "github.com/google/go-containerregistry/pkg/v1"
"github.com/google/go-containerregistry/pkg/v1/remote"
"golang.org/x/oauth2/google"
)
// Remote implements the RemoteService interface.
type Remote struct{}
// NewRemote returns a new Remote object.
func NewRemote(ctx context.Context) (*Remote, error) {
return &Remote{}, nil
}
// Image gets a remote image from a reference.
func (*Remote) Image(ctx context.Context, ref name.Reference) (v1.Image, error) {
img, err := remote.Image(ref, remote.WithAuthFromKeychain(authn.DefaultKeychain))
if err != nil {
client, err := google.DefaultClient(ctx, "https://www.googleapis.com/auth/cloud-platform")
if err != nil {
fmt.Printf("Error fetching digest: %v\n", err)
return nil, err
}
return remote.Image(ref, remote.WithTransport(client.Transport))
}
return img, nil
}