From 394aad9d6b0424837440d5ce067e008b97f51cb6 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Thu, 29 Dec 2016 16:53:09 +0800 Subject: [PATCH] rkt: add image ref to ImageService interfaces --- pkg/kubelet/rkt/image.go | 24 +++++++++++++++--------- pkg/kubelet/rkt/rkt.go | 11 ++++------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/pkg/kubelet/rkt/image.go b/pkg/kubelet/rkt/image.go index b16f53bcc05..4814ac03bae 100644 --- a/pkg/kubelet/rkt/image.go +++ b/pkg/kubelet/rkt/image.go @@ -45,18 +45,18 @@ import ( // // http://issue.k8s.io/7203 // -func (r *Runtime) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secret) error { +func (r *Runtime) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secret) (string, error) { img := image.Image // TODO(yifan): The credential operation is a copy from dockertools package, // Need to resolve the code duplication. repoToPull, _, _, err := parsers.ParseImageName(img) if err != nil { - return err + return "", err } keyring, err := credentialprovider.MakeDockerKeyring(pullSecrets, r.dockerKeyring) if err != nil { - return err + return "", err } creds, ok := keyring.Lookup(repoToPull) @@ -66,7 +66,7 @@ func (r *Runtime) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secr userConfigDir, err := ioutil.TempDir("", "rktnetes-user-config-dir-") if err != nil { - return fmt.Errorf("rkt: Cannot create a temporary user-config directory: %v", err) + return "", fmt.Errorf("rkt: Cannot create a temporary user-config directory: %v", err) } defer os.RemoveAll(userConfigDir) @@ -74,7 +74,7 @@ func (r *Runtime) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secr config.UserConfigDir = userConfigDir if err := r.writeDockerAuthConfig(img, creds, userConfigDir); err != nil { - return err + return "", err } // Today, `--no-store` will fetch the remote image regardless of whether the content of the image @@ -82,14 +82,20 @@ func (r *Runtime) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secr // the image pull policy is 'always'. The issue is tracked in https://github.com/coreos/rkt/issues/2937. if _, err := r.cli.RunCommand(&config, "fetch", "--no-store", dockerPrefix+img); err != nil { glog.Errorf("Failed to fetch: %v", err) - return err + return "", err } - return nil + return r.getImageID(img) } -func (r *Runtime) IsImagePresent(image kubecontainer.ImageSpec) (bool, error) { +func (r *Runtime) IsImagePresent(image kubecontainer.ImageSpec) (string, error) { images, err := r.listImages(image.Image, false) - return len(images) > 0, err + if err != nil { + return "", err + } + if len(images) == 0 { + return "", nil + } + return images[0].Id, nil } // ListImages lists all the available appc images on the machine by invoking 'rkt image list'. diff --git a/pkg/kubelet/rkt/rkt.go b/pkg/kubelet/rkt/rkt.go index ce797fed97d..3e9c89fde5d 100644 --- a/pkg/kubelet/rkt/rkt.go +++ b/pkg/kubelet/rkt/rkt.go @@ -782,8 +782,9 @@ func (r *Runtime) newAppcRuntimeApp(pod *v1.Pod, podIP string, c v1.Container, r if requiresPrivileged && !securitycontext.HasPrivilegedRequest(&c) { return fmt.Errorf("cannot make %q: running a custom stage1 requires a privileged security context", format.Pod(pod)) } - if err, _ := r.imagePuller.EnsureImageExists(pod, &c, pullSecrets); err != nil { - return nil + imageRef, _, err := r.imagePuller.EnsureImageExists(pod, &c, pullSecrets) + if err != nil { + return err } imgManifest, err := r.getImageManifest(c.Image) if err != nil { @@ -794,11 +795,7 @@ func (r *Runtime) newAppcRuntimeApp(pod *v1.Pod, podIP string, c v1.Container, r imgManifest.App = new(appctypes.App) } - imageID, err := r.getImageID(c.Image) - if err != nil { - return err - } - hash, err := appctypes.NewHash(imageID) + hash, err := appctypes.NewHash(imageRef) if err != nil { return err }