From 11d31dda140cb57acc94f5a11855f19187b8e440 Mon Sep 17 00:00:00 2001 From: Predrag Rogic Date: Mon, 16 Aug 2021 23:12:38 +0100 Subject: [PATCH] early check if image exists at all --- pkg/minikube/cruntime/containerd.go | 10 +++++++--- pkg/minikube/cruntime/crio.go | 4 ++-- pkg/minikube/cruntime/cruntime.go | 2 +- pkg/minikube/cruntime/docker.go | 4 ++-- pkg/minikube/machine/cache_images.go | 4 ++++ 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go index 13b0834e9bf2..cb61f3b98089 100644 --- a/pkg/minikube/cruntime/containerd.go +++ b/pkg/minikube/cruntime/containerd.go @@ -248,10 +248,14 @@ func (r *Containerd) Disable() error { return r.Init.ForceStop("containerd") } -// ImageExists checks if an image exists, expected input format +// ImageExists checks if image exists based on image name and optionally image sha func (r *Containerd) ImageExists(name string, sha string) bool { - c := exec.Command("/bin/bash", "-c", fmt.Sprintf("sudo ctr -n=k8s.io images check | grep %s | grep %s", name, sha)) - if _, err := r.Runner.RunCmd(c); err != nil { + c := exec.Command("/bin/bash", "-c", fmt.Sprintf("sudo ctr -n=k8s.io images check | grep %s", name)) + rr, err := r.Runner.RunCmd(c) + if err != nil { + return false + } + if sha != "" && !strings.Contains(rr.Output(), sha) { return false } return true diff --git a/pkg/minikube/cruntime/crio.go b/pkg/minikube/cruntime/crio.go index ddb61ceb438e..820ade8e1640 100644 --- a/pkg/minikube/cruntime/crio.go +++ b/pkg/minikube/cruntime/crio.go @@ -162,7 +162,7 @@ func (r *CRIO) Disable() error { return r.Init.ForceStop("crio") } -// ImageExists checks if an image exists +// ImageExists checks if image exists based on image name and optionally image sha func (r *CRIO) ImageExists(name string, sha string) bool { // expected output looks like [NAME@sha256:SHA] c := exec.Command("sudo", "podman", "image", "inspect", "--format", "{{.Id}}", name) @@ -170,7 +170,7 @@ func (r *CRIO) ImageExists(name string, sha string) bool { if err != nil { return false } - if !strings.Contains(rr.Output(), sha) { + if sha != "" && !strings.Contains(rr.Output(), sha) { return false } return true diff --git a/pkg/minikube/cruntime/cruntime.go b/pkg/minikube/cruntime/cruntime.go index 2388abc8aca0..1ad073a7aad5 100644 --- a/pkg/minikube/cruntime/cruntime.go +++ b/pkg/minikube/cruntime/cruntime.go @@ -106,7 +106,7 @@ type Manager interface { // Tag an image TagImage(string, string) error - // ImageExists takes image name and image sha checks if an it exists + // ImageExists takes image name and optionally image sha to check if an image exists ImageExists(string, string) bool // ListImages returns a list of images managed by this container runtime ListImages(ListImagesOptions) ([]string, error) diff --git a/pkg/minikube/cruntime/docker.go b/pkg/minikube/cruntime/docker.go index d805201da000..aace65297aa7 100644 --- a/pkg/minikube/cruntime/docker.go +++ b/pkg/minikube/cruntime/docker.go @@ -165,7 +165,7 @@ func (r *Docker) Disable() error { return r.Init.Mask("docker.service") } -// ImageExists checks if an image exists +// ImageExists checks if image exists based on image name and optionally image sha func (r *Docker) ImageExists(name string, sha string) bool { // expected output looks like [SHA_ALGO:SHA] c := exec.Command("docker", "image", "inspect", "--format", "{{.Id}}", name) @@ -173,7 +173,7 @@ func (r *Docker) ImageExists(name string, sha string) bool { if err != nil { return false } - if !strings.Contains(rr.Output(), sha) { + if sha != "" && !strings.Contains(rr.Output(), sha) { return false } return true diff --git a/pkg/minikube/machine/cache_images.go b/pkg/minikube/machine/cache_images.go index de3edefc4e7b..ce9178977652 100644 --- a/pkg/minikube/machine/cache_images.go +++ b/pkg/minikube/machine/cache_images.go @@ -461,6 +461,10 @@ func transferAndSaveImage(cr command.Runner, k8s config.KubernetesConfig, dst st return errors.Wrap(err, "runtime") } + if !r.ImageExists(imgName, "") { + return errors.Errorf("image %s not found", imgName) + } + klog.Infof("Saving image to: %s", dst) filename := filepath.Base(dst)