@@ -61,8 +61,8 @@ func CacheImagesForBootstrapper(imageRepository string, version string, clusterB
61
61
return nil
62
62
}
63
63
64
- // LoadImages loads previously cached images into the container runtime
65
- func LoadImages (cc * config.ClusterConfig , runner command.Runner , images []string , cacheDir string ) error {
64
+ // LoadCachedImages loads previously cached images into the container runtime
65
+ func LoadCachedImages (cc * config.ClusterConfig , runner command.Runner , images []string , cacheDir string ) error {
66
66
cr , err := cruntime .New (cruntime.Config {Type : cc .KubernetesConfig .ContainerRuntime , Runner : runner })
67
67
if err != nil {
68
68
return errors .Wrap (err , "runtime" )
@@ -73,6 +73,7 @@ func LoadImages(cc *config.ClusterConfig, runner command.Runner, images []string
73
73
klog .Infof ("Images are preloaded, skipping loading" )
74
74
return nil
75
75
}
76
+
76
77
klog .Infof ("LoadImages start: %s" , images )
77
78
start := time .Now ()
78
79
@@ -102,7 +103,7 @@ func LoadImages(cc *config.ClusterConfig, runner command.Runner, images []string
102
103
return nil
103
104
}
104
105
klog .Infof ("%q needs transfer: %v" , image , err )
105
- return transferAndLoadImage (runner , cc .KubernetesConfig , image , cacheDir )
106
+ return transferAndLoadCachedImage (runner , cc .KubernetesConfig , image , cacheDir )
106
107
})
107
108
}
108
109
if err := g .Wait (); err != nil {
@@ -157,6 +158,22 @@ func needsTransfer(imgClient *client.Client, imgName string, cr cruntime.Manager
157
158
return nil
158
159
}
159
160
161
+ // LoadLocalImages loads images into the container runtime
162
+ func LoadLocalImages (cc * config.ClusterConfig , runner command.Runner , images []string ) error {
163
+ var g errgroup.Group
164
+ for _ , image := range images {
165
+ image := image
166
+ g .Go (func () error {
167
+ return transferAndLoadImage (runner , cc .KubernetesConfig , image )
168
+ })
169
+ }
170
+ if err := g .Wait (); err != nil {
171
+ return errors .Wrap (err , "loading images" )
172
+ }
173
+ klog .Infoln ("Successfully loaded all images" )
174
+ return nil
175
+ }
176
+
160
177
// CacheAndLoadImages caches and loads images to all profiles
161
178
func CacheAndLoadImages (images []string , profiles []* config.Profile ) error {
162
179
if len (images ) == 0 {
@@ -168,6 +185,11 @@ func CacheAndLoadImages(images []string, profiles []*config.Profile) error {
168
185
return errors .Wrap (err , "save to dir" )
169
186
}
170
187
188
+ return DoLoadImages (images , profiles , constants .ImageCacheDir )
189
+ }
190
+
191
+ // DoLoadImages loads images to all profiles
192
+ func DoLoadImages (images []string , profiles []* config.Profile , cacheDir string ) error {
171
193
api , err := NewAPIClient ()
172
194
if err != nil {
173
195
return errors .Wrap (err , "api" )
@@ -209,7 +231,13 @@ func CacheAndLoadImages(images []string, profiles []*config.Profile) error {
209
231
if err != nil {
210
232
return err
211
233
}
212
- err = LoadImages (c , cr , images , constants .ImageCacheDir )
234
+ if cacheDir != "" {
235
+ // loading image names, from cache
236
+ err = LoadCachedImages (c , cr , images , cacheDir )
237
+ } else {
238
+ // loading image files
239
+ err = LoadLocalImages (c , cr , images )
240
+ }
213
241
if err != nil {
214
242
failed = append (failed , m )
215
243
klog .Warningf ("Failed to load cached images for profile %s. make sure the profile is running. %v" , pName , err )
@@ -226,15 +254,20 @@ func CacheAndLoadImages(images []string, profiles []*config.Profile) error {
226
254
return nil
227
255
}
228
256
229
- // transferAndLoadImage transfers and loads a single image from the cache
230
- func transferAndLoadImage (cr command.Runner , k8s config.KubernetesConfig , imgName string , cacheDir string ) error {
257
+ // transferAndLoadCachedImage transfers and loads a single image from the cache
258
+ func transferAndLoadCachedImage (cr command.Runner , k8s config.KubernetesConfig , imgName string , cacheDir string ) error {
259
+ src := filepath .Join (cacheDir , imgName )
260
+ src = localpath .SanitizeCacheDir (src )
261
+ return transferAndLoadImage (cr , k8s , src )
262
+ }
263
+
264
+ // transferAndLoadImage transfers and loads a single image
265
+ func transferAndLoadImage (cr command.Runner , k8s config.KubernetesConfig , src string ) error {
231
266
r , err := cruntime .New (cruntime.Config {Type : k8s .ContainerRuntime , Runner : cr })
232
267
if err != nil {
233
268
return errors .Wrap (err , "runtime" )
234
269
}
235
- src := filepath .Join (cacheDir , imgName )
236
- src = localpath .SanitizeCacheDir (src )
237
- klog .Infof ("Loading image from cache: %s" , src )
270
+ klog .Infof ("Loading image from: %s" , src )
238
271
filename := filepath .Base (src )
239
272
if _ , err := os .Stat (src ); err != nil {
240
273
return err
0 commit comments