Files
hauler/pkg/content/image/image.go
Josh Wolf 372af894b3 refactor to baseline on pluggable oci collection/distribution (#41)
refactor to baseline on pluggable oci collection/distribution

Co-authored-by: Josh Wolf <josh@joshwolf.dev>
2021-10-29 15:55:20 -06:00

59 lines
1.2 KiB
Go

package image
import (
"context"
"github.com/google/go-containerregistry/pkg/name"
"github.com/google/go-containerregistry/pkg/v1/remote"
"github.com/rancherfederal/hauler/pkg/apis/hauler.cattle.io/v1alpha1"
"github.com/rancherfederal/hauler/pkg/log"
"github.com/rancherfederal/hauler/pkg/store"
)
type Image struct {
cfg v1alpha1.Image
}
func NewImage(cfg v1alpha1.Image) Image {
return Image{
cfg: cfg,
}
}
func (i Image) Ref(opts ...name.Option) (name.Reference, error) {
return name.ParseReference(i.cfg.Ref, opts...)
}
// Repo returns the repository component of the image
func (i Image) Repo() string {
ref, _ := name.ParseReference(i.cfg.Ref)
return ref.Context().RepositoryStr()
}
func (i Image) Copy(ctx context.Context, registry string) error {
l := log.FromContext(ctx)
srcRef, err := name.ParseReference(i.cfg.Ref)
if err != nil {
return err
}
img, err := remote.Image(srcRef)
if err != nil {
return err
}
dstRef, err := store.RelocateReference(srcRef, registry)
if err != nil {
return err
}
l.Infof("Copying image to: '%s'", dstRef.Name())
if err := remote.Write(dstRef, img, remote.WithContext(ctx)); err != nil {
return err
}
return nil
}