rkt: add image ref to ImageService interfaces

This commit is contained in:
Pengfei Ni 2016-12-29 16:53:09 +08:00
parent 9d52b761cc
commit 394aad9d6b
2 changed files with 19 additions and 16 deletions

View File

@ -45,18 +45,18 @@ import (
// //
// http://issue.k8s.io/7203 // 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 img := image.Image
// TODO(yifan): The credential operation is a copy from dockertools package, // TODO(yifan): The credential operation is a copy from dockertools package,
// Need to resolve the code duplication. // Need to resolve the code duplication.
repoToPull, _, _, err := parsers.ParseImageName(img) repoToPull, _, _, err := parsers.ParseImageName(img)
if err != nil { if err != nil {
return err return "", err
} }
keyring, err := credentialprovider.MakeDockerKeyring(pullSecrets, r.dockerKeyring) keyring, err := credentialprovider.MakeDockerKeyring(pullSecrets, r.dockerKeyring)
if err != nil { if err != nil {
return err return "", err
} }
creds, ok := keyring.Lookup(repoToPull) 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-") userConfigDir, err := ioutil.TempDir("", "rktnetes-user-config-dir-")
if err != nil { 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) defer os.RemoveAll(userConfigDir)
@ -74,7 +74,7 @@ func (r *Runtime) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secr
config.UserConfigDir = userConfigDir config.UserConfigDir = userConfigDir
if err := r.writeDockerAuthConfig(img, creds, userConfigDir); err != nil { 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 // 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. // 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 { if _, err := r.cli.RunCommand(&config, "fetch", "--no-store", dockerPrefix+img); err != nil {
glog.Errorf("Failed to fetch: %v", err) 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) 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'. // ListImages lists all the available appc images on the machine by invoking 'rkt image list'.

View File

@ -782,8 +782,9 @@ func (r *Runtime) newAppcRuntimeApp(pod *v1.Pod, podIP string, c v1.Container, r
if requiresPrivileged && !securitycontext.HasPrivilegedRequest(&c) { if requiresPrivileged && !securitycontext.HasPrivilegedRequest(&c) {
return fmt.Errorf("cannot make %q: running a custom stage1 requires a privileged security context", format.Pod(pod)) 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 { imageRef, _, err := r.imagePuller.EnsureImageExists(pod, &c, pullSecrets)
return nil if err != nil {
return err
} }
imgManifest, err := r.getImageManifest(c.Image) imgManifest, err := r.getImageManifest(c.Image)
if err != nil { 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) imgManifest.App = new(appctypes.App)
} }
imageID, err := r.getImageID(c.Image) hash, err := appctypes.NewHash(imageRef)
if err != nil {
return err
}
hash, err := appctypes.NewHash(imageID)
if err != nil { if err != nil {
return err return err
} }