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)
for _, c := range containers {
resolver.Add(c.Source, c.Name, c.TLSVerify)
resolver.Add(container.SourceSpec(c))
}
return resolver.Finish()

View file

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

View file

@ -32,7 +32,7 @@ func (impl *ContainerResolveJobImpl) Run(job worker.Job) error {
resolver.AuthFilePath = impl.AuthFilePath
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()

View file

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

View file

@ -44,7 +44,7 @@ func TestResolver(t *testing.T) {
resolver := container.NewResolver("amd64")
for _, r := range refs {
resolver.Add(r, "", common.ToPtr(false))
resolver.Add(container.SourceSpec{r, "", common.ToPtr(false)})
}
have, err := resolver.Finish()
@ -69,7 +69,7 @@ func TestResolver(t *testing.T) {
func TestResolverFail(t *testing.T) {
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()
assert.Error(t, err)
@ -78,7 +78,7 @@ func TestResolverFail(t *testing.T) {
registry := NewTestRegistry()
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()
assert.Error(t, err)
assert.Len(t, specs, 0)