@@ -34,7 +34,8 @@ import (
3434// NewMirrorOptions creates the options for mirroring a release.
3535func NewMirrorOptions (streams genericclioptions.IOStreams ) * MirrorOptions {
3636 return & MirrorOptions {
37- IOStreams : streams ,
37+ IOStreams : streams ,
38+ ParallelOptions : imagemanifest.ParallelOptions {MaxPerRegistry : 6 },
3839 }
3940}
4041
@@ -153,7 +154,7 @@ func (o *MirrorOptions) Run() error {
153154
154155 var recreateRequired bool
155156 var hasPrefix bool
156- var targetFn func (name string ) imagereference. DockerImageReference
157+ var targetFn func (name string ) mirror. MirrorReference
157158 var dst string
158159 if len (o .ToImageStream ) > 0 {
159160 dst = imagereference.DockerImageReference {
@@ -167,13 +168,13 @@ func (o *MirrorOptions) Run() error {
167168
168169 if strings .Contains (dst , "${component}" ) {
169170 format := strings .Replace (dst , "${component}" , replaceComponentMarker , - 1 )
170- dstRef , err := imagereference . Parse (format )
171+ dstRef , err := mirror . ParseMirrorReference (format )
171172 if err != nil {
172173 return fmt .Errorf ("--to must be a valid image reference: %v" , err )
173174 }
174- targetFn = func (name string ) imagereference. DockerImageReference {
175+ targetFn = func (name string ) mirror. MirrorReference {
175176 value := strings .Replace (dst , "${component}" , name , - 1 )
176- ref , err := imagereference . Parse (value )
177+ ref , err := mirror . ParseMirrorReference (value )
177178 if err != nil {
178179 klog .Fatalf ("requested component %q could not be injected into %s: %v" , name , dst , err )
179180 }
@@ -183,22 +184,25 @@ func (o *MirrorOptions) Run() error {
183184 recreateRequired = replaceCount > 1 || (replaceCount == 1 && ! strings .Contains (dstRef .Tag , replaceComponentMarker ))
184185
185186 } else {
186- ref , err := imagereference . Parse (dst )
187+ ref , err := mirror . ParseMirrorReference (dst )
187188 if err != nil {
188189 return fmt .Errorf ("--to must be a valid image repository: %v" , err )
189190 }
190191 if len (ref .ID ) > 0 || len (ref .Tag ) > 0 {
191192 return fmt .Errorf ("--to must be to an image repository and may not contain a tag or digest" )
192193 }
193- targetFn = func (name string ) imagereference. DockerImageReference {
194+ targetFn = func (name string ) mirror. MirrorReference {
194195 copied := ref
195196 copied .Tag = name
196197 return copied
197198 }
198199 hasPrefix = true
199200 }
200201
201- o .TargetFn = targetFn
202+ o .TargetFn = func (name string ) imagereference.DockerImageReference {
203+ ref := targetFn (name )
204+ return ref .DockerImageReference
205+ }
202206
203207 if recreateRequired {
204208 return fmt .Errorf ("when mirroring to multiple repositories, use the new release command with --from-release and --mirror" )
@@ -255,10 +259,11 @@ func (o *MirrorOptions) Run() error {
255259 Name : o .ToRelease ,
256260 })
257261 } else if ! o .SkipRelease {
262+ dstRef := targetFn ("release" )
258263 mappings = append (mappings , mirror.Mapping {
259- Type : mirror .DestinationRegistry ,
260264 Source : srcRef ,
261- Destination : targetFn ("release" ),
265+ Type : dstRef .Type (),
266+ Destination : dstRef .Combined (),
262267 Name : "release" ,
263268 })
264269 }
@@ -278,10 +283,11 @@ func (o *MirrorOptions) Run() error {
278283 return fmt .Errorf ("image-references should only contain pointers to images by digest: %s" , tag .From .Name )
279284 }
280285
286+ dstMirrorRef := targetFn (tag .Name )
281287 mappings = append (mappings , mirror.Mapping {
282- Type : mirror .DestinationRegistry ,
283288 Source : from ,
284- Destination : targetFn (tag .Name ),
289+ Type : dstMirrorRef .Type (),
290+ Destination : dstMirrorRef .Combined (),
285291 Name : tag .Name ,
286292 })
287293 klog .V (2 ).Infof ("Mapping %#v" , mappings [len (mappings )- 1 ])
0 commit comments