in example/ecr-copy/main.go [35:85]
func main() {
ctx := namespaces.NamespaceFromEnv(context.Background())
if len(os.Args) < 3 {
log.G(ctx).Fatal("Must provide source and destination as arguments")
} else if len(os.Args) > 3 {
log.G(ctx).Fatal("Must provide only the source and destination as arguments")
}
sourceRef := os.Args[1]
destRef := os.Args[2]
enableDebug := defaultEnableDebug
parseEnvInt(ctx, "ECR_COPY_DEBUG", &enableDebug)
if enableDebug == 1 {
log.L.Logger.SetLevel(logrus.TraceLevel)
}
client, err := containerd.New("/run/containerd/containerd.sock")
if err != nil {
log.G(ctx).WithError(err).Fatal("Failed to connect to containerd")
}
defer client.Close()
resolver, err := ecr.NewResolver()
if err != nil {
log.G(ctx).WithError(err).Fatal("Failed to create resolver")
}
log.G(ctx).WithField("sourceRef", sourceRef).Info("Pulling from Amazon ECR")
img, err := client.Fetch(
ctx,
sourceRef,
containerd.WithResolver(resolver),
)
if err != nil {
log.G(ctx).WithError(err).WithField("sourceRef", sourceRef).Fatal("Failed to pull")
}
log.G(ctx).WithField("img", img.Name).Info("Pulled successfully!")
log.G(ctx).WithField("sourceRef", sourceRef).WithField("destRef", destRef).Info("Pushing to Amazon ECR")
desc := img.Target
err = client.Push(ctx, destRef, desc,
containerd.WithResolver(resolver),
)
if err != nil {
log.G(ctx).WithError(err).WithField("destRef", destRef).Fatal("Failed to push")
}
log.G(ctx).WithField("destRef", destRef).Info("Pushed successfully!")
}