Skip to content

Commit

Permalink
allow reference string to be passed to AddArtifact instead of name.Pa…
Browse files Browse the repository at this point in the history
…rseReference for ease of use, move reference validation within AddArtifact
  • Loading branch information
joshrwolf committed Dec 2, 2021
1 parent d27ad7c commit 5855f79
Show file tree
Hide file tree
Showing 8 changed files with 48 additions and 249 deletions.
33 changes: 11 additions & 22 deletions cmd/hauler/cli/store/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package store

import (
"context"
"fmt"

"github.com/google/go-containerregistry/pkg/name"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/spf13/cobra"

"github.com/rancherfederal/hauler/pkg/apis/hauler.cattle.io/v1alpha1"
Expand Down Expand Up @@ -94,17 +96,13 @@ func storeFile(ctx context.Context, s *store.Store, fi v1alpha1.File) error {
l := log.FromContext(ctx)

f := file.NewFile(fi.Ref)
ref, err := name.ParseReference(f.Name(fi.Ref), name.WithDefaultRegistry(""))
if err != nil {
return err
}

desc, err := s.AddArtifact(ctx, f, ref)
desc, err := s.AddArtifact(ctx, f, f.Name(fi.Ref))
if err != nil {
return err
}

l.With(log.Fields{"type": s.Identify(ctx, desc)}).Infof("added [%s] to store", ref.Name())
l.With(log.Fields{"type": s.Identify(ctx, desc)}).Infof("added [%s] to store", desc.Annotations[ocispec.AnnotationRefName])
return nil
}

Expand Down Expand Up @@ -133,17 +131,12 @@ func storeImage(ctx context.Context, s *store.Store, i v1alpha1.Image) error {
return err
}

ref, err := name.ParseReference(i.Ref)
if err != nil {
return err
}

desc, err := s.AddArtifact(ctx, oci, ref)
desc, err := s.AddArtifact(ctx, oci, i.Ref)
if err != nil {
return err
}

l.With(log.Fields{"type": s.Identify(ctx, desc)}).Infof("added [%s] to store", ref.Name())
l.With(log.Fields{"type": s.Identify(ctx, desc)}).Infof("added [%s] to store", i.Ref)
return nil
}

Expand Down Expand Up @@ -171,29 +164,25 @@ func AddChartCmd(ctx context.Context, o *AddChartOpts, s *store.Store, chartName
return storeChart(ctx, s, cfg)
}

func storeChart(ctx context.Context, s *store.Store, ch v1alpha1.Chart) error {
func storeChart(ctx context.Context, s *store.Store, cfg v1alpha1.Chart) error {
l := log.FromContext(ctx)

oci, err := chart.NewChart(ch.Name, ch.RepoURL, ch.Version)
oci, err := chart.NewChart(cfg.Name, cfg.RepoURL, cfg.Version)
if err != nil {
return err
}

tag := ch.Version
tag := cfg.Version
if tag == "" {
tag = name.DefaultTag
}

ref, err := name.ParseReference(ch.Name, name.WithDefaultRegistry(""), name.WithDefaultTag(tag))
if err != nil {
return err
}

ref := fmt.Sprintf("%s:%s", cfg.Name, tag)
desc, err := s.AddArtifact(ctx, oci, ref)
if err != nil {
return err
}

l.With(log.Fields{"type": s.Identify(ctx, desc)}).Infof("added [%s] to store", ref.Name())
l.With(log.Fields{"type": s.Identify(ctx, desc)}).Infof("added [%s] to store", ref)
return nil
}
3 changes: 1 addition & 2 deletions pkg/artifact/oci.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package artifact

import (
"github.com/google/go-containerregistry/pkg/name"
"github.com/google/go-containerregistry/pkg/v1"
)

Expand All @@ -20,5 +19,5 @@ type OCI interface {

type Collection interface {
// Contents returns the list of contents in the collection
Contents() (map[name.Reference]OCI, error)
Contents() (map[string]OCI, error)
}
27 changes: 6 additions & 21 deletions pkg/collection/chart/chart.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ type tchart struct {
config v1alpha1.ThickChart

computed bool
contents map[gname.Reference]artifact.OCI
contents map[string]artifact.OCI
}

func NewChart(cfg v1alpha1.ThickChart) (artifact.Collection, error) {
Expand All @@ -29,11 +29,11 @@ func NewChart(cfg v1alpha1.ThickChart) (artifact.Collection, error) {
return &tchart{
chart: o,
config: cfg,
contents: make(map[gname.Reference]artifact.OCI),
contents: make(map[string]artifact.OCI),
}, nil
}

func (c *tchart) Contents() (map[gname.Reference]artifact.OCI, error) {
func (c *tchart) Contents() (map[string]artifact.OCI, error) {
if err := c.compute(); err != nil {
return nil, err
}
Expand Down Expand Up @@ -70,12 +70,7 @@ func (c *tchart) chartContents() error {
tag = gname.DefaultTag
}

ref, err := gname.ParseReference(c.config.Name, gname.WithDefaultRegistry(""), gname.WithDefaultTag(tag))
if err != nil {
return err
}

c.contents[ref] = oci
c.contents[c.config.Name] = oci
return nil
}

Expand All @@ -91,32 +86,22 @@ func (c *tchart) dependentImages() error {
}

for _, img := range imgs.Spec.Images {
ref, err := gname.ParseReference(img.Ref)
if err != nil {
return err
}

i, err := image.NewImage(img.Ref)
if err != nil {
return err
}
c.contents[ref] = i
c.contents[img.Ref] = i
}
return nil
}

func (c *tchart) extraImages() error {
for _, img := range c.config.ExtraImages {
ref, err := gname.ParseReference(img.Reference)
if err != nil {
return err
}

i, err := image.NewImage(img.Reference)
if err != nil {
return err
}
c.contents[ref] = i
c.contents[img.Reference] = i
}
return nil
}
28 changes: 6 additions & 22 deletions pkg/collection/k3s/k3s.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ import (
"path"
"strings"

"github.com/google/go-containerregistry/pkg/name"

"github.com/rancherfederal/hauler/internal/getter"
"github.com/rancherfederal/hauler/pkg/artifact"
"github.com/rancherfederal/hauler/pkg/content/file"
Expand All @@ -38,19 +36,19 @@ type k3s struct {
arch string

computed bool
contents map[name.Reference]artifact.OCI
contents map[string]artifact.OCI
channels map[string]string
client *getter.Client
}

func NewK3s(version string) (artifact.Collection, error) {
return &k3s{
version: version,
contents: make(map[name.Reference]artifact.OCI),
contents: make(map[string]artifact.OCI),
}, nil
}

func (k *k3s) Contents() (map[name.Reference]artifact.OCI, error) {
func (k *k3s) Contents() (map[string]artifact.OCI, error) {
if err := k.compute(); err != nil {
return nil, err
}
Expand Down Expand Up @@ -98,25 +96,15 @@ func (k *k3s) executable() error {

f := file.NewFile(fref)

ref, err := name.ParseReference("k3s", name.WithDefaultTag(k.dnsCompliantVersion()), name.WithDefaultRegistry(""))
if err != nil {
return err
}

ref := fmt.Sprintf("k3s:%s", k.dnsCompliantVersion())
k.contents[ref] = f
return nil
}

func (k *k3s) bootstrap() error {
namedBootstrapUrl := fmt.Sprintf("%s?filename=%s", bootstrapUrl, "k3s-init.sh")
f := file.NewFile(namedBootstrapUrl)

ref, err := name.ParseReference("k3s-init.sh", name.WithDefaultRegistry(""), name.WithDefaultTag("latest"))
if err != nil {
return err
}

k.contents[ref] = f
k.contents["k3s-init.sh"] = f
return nil
}

Expand All @@ -132,16 +120,12 @@ func (k *k3s) images() error {
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
reference := scanner.Text()
ref, err := name.ParseReference(reference)
if err != nil {
return err
}
o, err := image.NewImage(reference)
if err != nil {
return err
}

k.contents[ref] = o
k.contents[reference] = o
}
return nil
}
Expand Down
72 changes: 0 additions & 72 deletions pkg/content/chart/chart_test.go
Original file line number Diff line number Diff line change
@@ -1,73 +1 @@
package chart_test

import (
"context"
"os"
"path"
"testing"

"github.com/google/go-containerregistry/pkg/name"

"github.com/rancherfederal/hauler/pkg/apis/hauler.cattle.io/v1alpha1"
"github.com/rancherfederal/hauler/pkg/content/chart"
"github.com/rancherfederal/hauler/pkg/log"
"github.com/rancherfederal/hauler/pkg/store"
)

func TestChart_Copy(t *testing.T) {
ctx := context.Background()
l := log.NewLogger(os.Stdout)
ctx = l.WithContext(ctx)

tmpdir, err := os.MkdirTemp("", "hauler")
if err != nil {
t.Error(err)
}
defer os.Remove(tmpdir)

s, err := store.NewStore(tmpdir)
if err != nil {
t.Error(err)
}

type args struct {
ctx context.Context
registry string
}
tests := []struct {
name string
cfg v1alpha1.Chart
args args
wantErr bool
}{
// TODO: This test isn't self-contained
{
name: "should work with unversioned chart",
cfg: v1alpha1.Chart{
Name: "loki",
RepoURL: "https://grafana.github.io/helm-charts",
},
args: args{
ctx: ctx,
registry: "",
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c, err := chart.NewChart(tt.cfg.Name, tt.cfg.RepoURL, tt.cfg.Version)
if err != nil {
t.Fatal(err)
}
ref, err := name.ParseReference(path.Join("hauler", tt.cfg.Name))
if err != nil {
t.Fatal(err)
}

if _, err := s.AddArtifact(ctx, c, ref); (err != nil) != tt.wantErr {
t.Error(err)
}
})
}
}
Loading

0 comments on commit 5855f79

Please sign in to comment.