container: create a SourceSpec for the resolve parameters

Create a struct to conveniently hold the source parameters for a
container resolve request and use it in the Add() function of the
resolver.
This commit is contained in:
Achilleas Koutsou 2023-04-27 20:41:03 +02:00 committed by Simon de Vlieger
parent 30dc8cb87a
commit 00d473c802
5 changed files with 17 additions and 11 deletions

View file

@ -248,7 +248,7 @@ func resolveContainers(containers []blueprint.Container, archName string) ([]con
resolver := container.NewResolver(archName) resolver := container.NewResolver(archName)
for _, c := range containers { for _, c := range containers {
resolver.Add(c.Source, c.Name, c.TLSVerify) resolver.Add(container.SourceSpec(c))
} }
return resolver.Finish() return resolver.Finish()

View file

@ -72,7 +72,7 @@ func resolveContainers(bp blueprint.Blueprint, archName string) ([]container.Spe
resolver := container.NewResolver(archName) resolver := container.NewResolver(archName)
for _, c := range bp.Containers { for _, c := range bp.Containers {
resolver.Add(c.Source, c.Name, c.TLSVerify) resolver.Add(container.SourceSpec(c))
} }
return resolver.Finish() return resolver.Finish()

View file

@ -32,7 +32,7 @@ func (impl *ContainerResolveJobImpl) Run(job worker.Job) error {
resolver.AuthFilePath = impl.AuthFilePath resolver.AuthFilePath = impl.AuthFilePath
for _, s := range args.Specs { for _, s := range args.Specs {
resolver.Add(s.Source, s.Name, s.TLSVerify) resolver.Add(container.SourceSpec{s.Source, s.Name, s.TLSVerify})
} }
specs, err := resolver.Finish() specs, err := resolver.Finish()

View file

@ -21,6 +21,12 @@ type Resolver struct {
AuthFilePath string AuthFilePath string
} }
type SourceSpec struct {
Source string
Name string
TLSVerify *bool
}
func NewResolver(arch string) Resolver { func NewResolver(arch string) Resolver {
return Resolver{ return Resolver{
ctx: context.Background(), ctx: context.Background(),
@ -29,8 +35,8 @@ func NewResolver(arch string) Resolver {
} }
} }
func (r *Resolver) Add(source, name string, TLSVerify *bool) { func (r *Resolver) Add(spec SourceSpec) {
client, err := NewClient(source) client, err := NewClient(spec.Source)
r.jobs += 1 r.jobs += 1
if err != nil { if err != nil {
@ -38,16 +44,16 @@ func (r *Resolver) Add(source, name string, TLSVerify *bool) {
return return
} }
client.SetTLSVerify(TLSVerify) client.SetTLSVerify(spec.TLSVerify)
client.SetArchitectureChoice(r.Arch) client.SetArchitectureChoice(r.Arch)
if r.AuthFilePath != "" { if r.AuthFilePath != "" {
client.SetAuthFilePath(r.AuthFilePath) client.SetAuthFilePath(r.AuthFilePath)
} }
go func() { go func() {
spec, err := client.Resolve(r.ctx, name) spec, err := client.Resolve(r.ctx, spec.Name)
if err != nil { if err != nil {
err = fmt.Errorf("'%s': %w", source, err) err = fmt.Errorf("'%s': %w", spec.Source, err)
} }
r.queue <- resolveResult{spec: spec, err: err} r.queue <- resolveResult{spec: spec, err: err}
}() }()

View file

@ -44,7 +44,7 @@ func TestResolver(t *testing.T) {
resolver := container.NewResolver("amd64") resolver := container.NewResolver("amd64")
for _, r := range refs { for _, r := range refs {
resolver.Add(r, "", common.ToPtr(false)) resolver.Add(container.SourceSpec{r, "", common.ToPtr(false)})
} }
have, err := resolver.Finish() have, err := resolver.Finish()
@ -69,7 +69,7 @@ func TestResolver(t *testing.T) {
func TestResolverFail(t *testing.T) { func TestResolverFail(t *testing.T) {
resolver := container.NewResolver("amd64") resolver := container.NewResolver("amd64")
resolver.Add("invalid-reference@${IMAGE_DIGEST}", "", common.ToPtr(false)) resolver.Add(container.SourceSpec{"invalid-reference@${IMAGE_DIGEST}", "", common.ToPtr(false)})
specs, err := resolver.Finish() specs, err := resolver.Finish()
assert.Error(t, err) assert.Error(t, err)
@ -78,7 +78,7 @@ func TestResolverFail(t *testing.T) {
registry := NewTestRegistry() registry := NewTestRegistry()
defer registry.Close() defer registry.Close()
resolver.Add(registry.GetRef("repo"), "", common.ToPtr(false)) resolver.Add(container.SourceSpec{registry.GetRef("repo"), "", common.ToPtr(false)})
specs, err = resolver.Finish() specs, err = resolver.Finish()
assert.Error(t, err) assert.Error(t, err)
assert.Len(t, specs, 0) assert.Len(t, specs, 0)