Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.

Commit fee80eb

Browse files
authored
Merge pull request #698 from gonzojive/patch-1
Add ParseTagOption to k8s/go/pkg/resolver
2 parents 6323c19 + 979aacd commit fee80eb

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

k8s/go/pkg/resolver/resolver.go

+31-4
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,41 @@ func RegisterFlags(flagset *flag.FlagSet) *Flags {
5858
return &flags
5959
}
6060

61+
// Option can be passed to NewResolver to configure the resolver.
62+
type Option struct {
63+
apply func(r *Resolver)
64+
}
65+
6166
// Resolver performs substitutions and resolves/pushes images
6267
type Resolver struct {
6368
flags *Flags
69+
70+
// parseTag is called instead of name.NewTag, which allows overriding how image
71+
// tags are parsed.
72+
parseTag func(name string, opts ...name.Option) (name.Tag, error)
73+
}
74+
75+
// ParseTagOption specifies a function to be used instead of name.NewTag to parse image tags.
76+
//
77+
// This option allows specifying different name.Option values in the call to name.Tag. For
78+
// example, the default logic for detecting whether a registry name is insecure can be
79+
// overridden.
80+
func ParseTagOption(f func(name string, opts ...name.Option) (name.Tag, error)) Option {
81+
return Option{
82+
func(r *Resolver) { r.parseTag = f },
83+
}
6484
}
6585

6686
// NewResolver takes some Flags and returns a Resolver
67-
func NewResolver(flags *Flags) *Resolver {
68-
return &Resolver{flags: flags}
87+
func NewResolver(flags *Flags, option ...Option) *Resolver {
88+
r := &Resolver{
89+
flags: flags,
90+
parseTag: name.NewTag,
91+
}
92+
for _, o := range option {
93+
o.apply(r)
94+
}
95+
return r
6996
}
7097

7198
// Resolve will parse the files pointed by the flags and return a resolvedTemplate and error as applicable
@@ -238,13 +265,13 @@ func (r *Resolver) publishSingle(spec imageSpec, stamper *compat.Stamper) (strin
238265
var ref name.Reference
239266
if r.flags.ImgChroot != "" {
240267
n := path.Join(r.flags.ImgChroot, stampedName)
241-
t, err := name.NewTag(n, name.WeakValidation)
268+
t, err := r.parseTag(n, name.WeakValidation)
242269
if err != nil {
243270
return "", fmt.Errorf("unable to create a docker tag from stamped name %q: %v", n, err)
244271
}
245272
ref = t
246273
} else {
247-
t, err := name.NewTag(stampedName, name.WeakValidation)
274+
t, err := r.parseTag(stampedName, name.WeakValidation)
248275
if err != nil {
249276
return "", fmt.Errorf("unable to create a docker tag from stamped name %q: %v", stampedName, err)
250277
}

0 commit comments

Comments
 (0)