@@ -58,14 +58,41 @@ func RegisterFlags(flagset *flag.FlagSet) *Flags {
58
58
return & flags
59
59
}
60
60
61
+ // Option can be passed to NewResolver to configure the resolver.
62
+ type Option struct {
63
+ apply func (r * Resolver )
64
+ }
65
+
61
66
// Resolver performs substitutions and resolves/pushes images
62
67
type Resolver struct {
63
68
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
+ }
64
84
}
65
85
66
86
// 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
69
96
}
70
97
71
98
// 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
238
265
var ref name.Reference
239
266
if r .flags .ImgChroot != "" {
240
267
n := path .Join (r .flags .ImgChroot , stampedName )
241
- t , err := name . NewTag (n , name .WeakValidation )
268
+ t , err := r . parseTag (n , name .WeakValidation )
242
269
if err != nil {
243
270
return "" , fmt .Errorf ("unable to create a docker tag from stamped name %q: %v" , n , err )
244
271
}
245
272
ref = t
246
273
} else {
247
- t , err := name . NewTag (stampedName , name .WeakValidation )
274
+ t , err := r . parseTag (stampedName , name .WeakValidation )
248
275
if err != nil {
249
276
return "" , fmt .Errorf ("unable to create a docker tag from stamped name %q: %v" , stampedName , err )
250
277
}
0 commit comments