Skip to content

Commit 3de6dc0

Browse files
authored
Merge pull request #11128 from afbjorklund/image-save
Add API for saving an image to a local path
2 parents b0f6923 + bbe9fb1 commit 3de6dc0

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

pkg/minikube/cruntime/containerd.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,16 @@ func (r *Containerd) PullImage(name string) error {
274274
return pullCRIImage(r.Runner, name)
275275
}
276276

277+
// SaveImage save an image from this runtime
278+
func (r *Containerd) SaveImage(name string, path string) error {
279+
klog.Infof("Saving image %s: %s", name, path)
280+
c := exec.Command("sudo", "ctr", "-n=k8s.io", "images", "export", path, name)
281+
if _, err := r.Runner.RunCmd(c); err != nil {
282+
return errors.Wrapf(err, "ctr images export")
283+
}
284+
return nil
285+
}
286+
277287
// RemoveImage removes a image
278288
func (r *Containerd) RemoveImage(name string) error {
279289
return removeCRIImage(r.Runner, name)

pkg/minikube/cruntime/crio.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,16 @@ func (r *CRIO) PullImage(name string) error {
193193
return pullCRIImage(r.Runner, name)
194194
}
195195

196+
// SaveImage saves an image from this runtime
197+
func (r *CRIO) SaveImage(name string, path string) error {
198+
klog.Infof("Saving image %s: %s", name, path)
199+
c := exec.Command("sudo", "podman", "save", name, "-o", path)
200+
if _, err := r.Runner.RunCmd(c); err != nil {
201+
return errors.Wrap(err, "crio save image")
202+
}
203+
return nil
204+
}
205+
196206
// RemoveImage removes a image
197207
func (r *CRIO) RemoveImage(name string) error {
198208
return removeCRIImage(r.Runner, name)

pkg/minikube/cruntime/cruntime.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ type Manager interface {
9999
PullImage(string) error
100100
// Build an image idempotently into the runtime on a host
101101
BuildImage(string, string, string, bool, []string, []string) error
102+
// Save an image from the runtime on a host
103+
SaveImage(string, string) error
102104

103105
// ImageExists takes image name and image sha checks if an it exists
104106
ImageExists(string, string) bool

pkg/minikube/cruntime/docker.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,16 @@ func (r *Docker) PullImage(name string) error {
205205
return nil
206206
}
207207

208+
// SaveImage saves an image from this runtime
209+
func (r *Docker) SaveImage(name string, path string) error {
210+
klog.Infof("Saving image %s: %s", name, path)
211+
c := exec.Command("docker", "save", name, "-o", path)
212+
if _, err := r.Runner.RunCmd(c); err != nil {
213+
return errors.Wrap(err, "saveimage docker.")
214+
}
215+
return nil
216+
}
217+
208218
// RemoveImage removes a image
209219
func (r *Docker) RemoveImage(name string) error {
210220
klog.Infof("Removing image: %s", name)

0 commit comments

Comments
 (0)