From 67a5bf8454bb839ee80a4245e9e09fc8f700fa84 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Sat, 31 Dec 2016 08:36:55 +0800 Subject: [PATCH] Rename imageservice.IsImagePresent to GetImageRef --- pkg/kubelet/container/runtime.go | 5 +++-- pkg/kubelet/container/testing/fake_runtime.go | 4 ++-- pkg/kubelet/container/testing/runtime_mock.go | 2 +- pkg/kubelet/dockertools/docker.go | 6 +++--- pkg/kubelet/dockertools/docker_manager.go | 7 ++++--- pkg/kubelet/dockertools/docker_test.go | 4 ++-- pkg/kubelet/dockertools/fake_docker_client.go | 2 +- pkg/kubelet/images/image_manager.go | 16 ++++++++-------- pkg/kubelet/images/image_manager_test.go | 12 ++++++------ pkg/kubelet/kuberuntime/kuberuntime_image.go | 5 +++-- .../kuberuntime/kuberuntime_image_test.go | 4 ++-- pkg/kubelet/rkt/image.go | 2 +- 12 files changed, 36 insertions(+), 33 deletions(-) diff --git a/pkg/kubelet/container/runtime.go b/pkg/kubelet/container/runtime.go index e6d15813300..47d3d88dce4 100644 --- a/pkg/kubelet/container/runtime.go +++ b/pkg/kubelet/container/runtime.go @@ -148,8 +148,9 @@ type ImageService interface { // PullImage pulls an image from the network to local storage using the supplied // secrets if necessary. It returns a reference (digest or ID) to the pulled image. PullImage(image ImageSpec, pullSecrets []v1.Secret) (string, error) - // IsImagePresent checks whether the container image is already in the local storage. - IsImagePresent(image ImageSpec) (string, error) + // GetImageRef gets the reference (digest or ID) of the image which has already been in + // the local storage. It returns ("", nil) if the image isn't in the local storage. + GetImageRef(image ImageSpec) (string, error) // Gets all images currently on the machine. ListImages() ([]Image, error) // Removes the specified image. diff --git a/pkg/kubelet/container/testing/fake_runtime.go b/pkg/kubelet/container/testing/fake_runtime.go index f931b360daf..c19404f7f78 100644 --- a/pkg/kubelet/container/testing/fake_runtime.go +++ b/pkg/kubelet/container/testing/fake_runtime.go @@ -356,11 +356,11 @@ func (f *FakeRuntime) PullImage(image ImageSpec, pullSecrets []v1.Secret) (strin return image.Image, f.Err } -func (f *FakeRuntime) IsImagePresent(image ImageSpec) (string, error) { +func (f *FakeRuntime) GetImageRef(image ImageSpec) (string, error) { f.Lock() defer f.Unlock() - f.CalledFunctions = append(f.CalledFunctions, "IsImagePresent") + f.CalledFunctions = append(f.CalledFunctions, "GetImageRef") for _, i := range f.ImageList { if i.ID == image.Image { return i.ID, nil diff --git a/pkg/kubelet/container/testing/runtime_mock.go b/pkg/kubelet/container/testing/runtime_mock.go index b98c23be911..aff6dedcdd7 100644 --- a/pkg/kubelet/container/testing/runtime_mock.go +++ b/pkg/kubelet/container/testing/runtime_mock.go @@ -110,7 +110,7 @@ func (r *Mock) PullImage(image ImageSpec, pullSecrets []v1.Secret) (string, erro return image.Image, args.Error(0) } -func (r *Mock) IsImagePresent(image ImageSpec) (string, error) { +func (r *Mock) GetImageRef(image ImageSpec) (string, error) { args := r.Called(image) return args.Get(0).(string), args.Error(1) } diff --git a/pkg/kubelet/dockertools/docker.go b/pkg/kubelet/dockertools/docker.go index 095b90f6723..f774cd34d00 100644 --- a/pkg/kubelet/dockertools/docker.go +++ b/pkg/kubelet/dockertools/docker.go @@ -94,7 +94,7 @@ func SetContainerNamePrefix(prefix string) { // DockerPuller is an abstract interface for testability. It abstracts image pull operations. type DockerPuller interface { Pull(image string, secrets []v1.Secret) error - IsImagePresent(image string) (string, error) + GetImageRef(image string) (string, error) } // dockerPuller is the default implementation of DockerPuller. @@ -241,7 +241,7 @@ func (p dockerPuller) Pull(image string, secrets []v1.Secret) error { err := p.client.PullImage(image, dockertypes.AuthConfig{}, opts) if err == nil { // Sometimes PullImage failed with no error returned. - imageRef, ierr := p.IsImagePresent(image) + imageRef, ierr := p.GetImageRef(image) if ierr != nil { glog.Warningf("Failed to inspect image %s: %v", image, ierr) } @@ -277,7 +277,7 @@ func (p dockerPuller) Pull(image string, secrets []v1.Secret) error { return utilerrors.NewAggregate(pullErrs) } -func (p dockerPuller) IsImagePresent(image string) (string, error) { +func (p dockerPuller) GetImageRef(image string) (string, error) { resp, err := p.client.InspectImageByRef(image) if err == nil { if resp == nil { diff --git a/pkg/kubelet/dockertools/docker_manager.go b/pkg/kubelet/dockertools/docker_manager.go index d14d8fb47af..cb8211fc72e 100644 --- a/pkg/kubelet/dockertools/docker_manager.go +++ b/pkg/kubelet/dockertools/docker_manager.go @@ -992,9 +992,10 @@ func (dm *DockerManager) PullImage(image kubecontainer.ImageSpec, secrets []v1.S return GetImageRef(dm.client, image.Image) } -// IsImagePresent checks whether the container image is already in the local storage. -func (dm *DockerManager) IsImagePresent(image kubecontainer.ImageSpec) (string, error) { - return dm.dockerPuller.IsImagePresent(image.Image) +// GetImageRef gets the reference (digest or ID) of the image which has already been in +// the local storage. It returns ("", nil) if the image isn't in the local storage. +func (dm *DockerManager) GetImageRef(image kubecontainer.ImageSpec) (string, error) { + return dm.dockerPuller.GetImageRef(image.Image) } // Removes the specified image. diff --git a/pkg/kubelet/dockertools/docker_test.go b/pkg/kubelet/dockertools/docker_test.go index 7af13252226..28da5977794 100644 --- a/pkg/kubelet/dockertools/docker_test.go +++ b/pkg/kubelet/dockertools/docker_test.go @@ -705,12 +705,12 @@ func (f *imageTrackingDockerClient) InspectImageByRef(name string) (image *docke return } -func TestIsImagePresent(t *testing.T) { +func TestGetImageRef(t *testing.T) { cl := &imageTrackingDockerClient{NewFakeDockerClient(), ""} puller := &dockerPuller{ client: cl, } - _, _ = puller.IsImagePresent("abc:123") + _, _ = puller.GetImageRef("abc:123") if cl.imageName != "abc:123" { t.Errorf("expected inspection of image abc:123, instead inspected image %v", cl.imageName) } diff --git a/pkg/kubelet/dockertools/fake_docker_client.go b/pkg/kubelet/dockertools/fake_docker_client.go index a50145e9db4..d5e612a18e2 100644 --- a/pkg/kubelet/dockertools/fake_docker_client.go +++ b/pkg/kubelet/dockertools/fake_docker_client.go @@ -596,7 +596,7 @@ func (f *FakeDockerPuller) Pull(image string, secrets []v1.Secret) (err error) { return err } -func (f *FakeDockerPuller) IsImagePresent(name string) (string, error) { +func (f *FakeDockerPuller) GetImageRef(name string) (string, error) { f.Lock() defer f.Unlock() if f.HasImages == nil { diff --git a/pkg/kubelet/images/image_manager.go b/pkg/kubelet/images/image_manager.go index 9cbbbd5a80f..4c62b0d8c45 100644 --- a/pkg/kubelet/images/image_manager.go +++ b/pkg/kubelet/images/image_manager.go @@ -99,7 +99,7 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p } spec := kubecontainer.ImageSpec{Image: image} - imageRef, err := m.imageService.IsImagePresent(spec) + imageRef, err := m.imageService.GetImageRef(spec) if err != nil { msg := fmt.Sprintf("Failed to inspect image %q: %v", container.Image, err) m.logIt(ref, v1.EventTypeWarning, events.FailedToInspectImage, logPrefix, msg, glog.Warning) @@ -128,20 +128,20 @@ func (m *imageManager) EnsureImageExists(pod *v1.Pod, container *v1.Container, p m.logIt(ref, v1.EventTypeNormal, events.PullingImage, logPrefix, fmt.Sprintf("pulling image %q", container.Image), glog.Info) pullChan := make(chan pullResult) m.puller.pullImage(spec, pullSecrets, pullChan) - imageRefWithErr := <-pullChan - if imageRefWithErr.err != nil { - m.logIt(ref, v1.EventTypeWarning, events.FailedToPullImage, logPrefix, fmt.Sprintf("Failed to pull image %q: %v", container.Image, imageRefWithErr.err), glog.Warning) + imagePullResult := <-pullChan + if imagePullResult.err != nil { + m.logIt(ref, v1.EventTypeWarning, events.FailedToPullImage, logPrefix, fmt.Sprintf("Failed to pull image %q: %v", container.Image, imagePullResult.err), glog.Warning) m.backOff.Next(backOffKey, m.backOff.Clock.Now()) - if imageRefWithErr.err == RegistryUnavailable { + if imagePullResult.err == RegistryUnavailable { msg := fmt.Sprintf("image pull failed for %s because the registry is unavailable.", container.Image) - return "", msg, imageRefWithErr.err + return "", msg, imagePullResult.err } - return "", imageRefWithErr.err.Error(), ErrImagePull + return "", imagePullResult.err.Error(), ErrImagePull } m.logIt(ref, v1.EventTypeNormal, events.PulledImage, logPrefix, fmt.Sprintf("Successfully pulled image %q", container.Image), glog.Info) m.backOff.GC() - return imageRefWithErr.imageRef, "", nil + return imagePullResult.imageRef, "", nil } // applyDefaultImageTag parses a docker image string, if it doesn't contain any tag or digest, diff --git a/pkg/kubelet/images/image_manager_test.go b/pkg/kubelet/images/image_manager_test.go index 356be242b25..86ea4577ca9 100644 --- a/pkg/kubelet/images/image_manager_test.go +++ b/pkg/kubelet/images/image_manager_test.go @@ -44,7 +44,7 @@ func pullerTestCases() []pullerTestCase { { // pull missing image containerImage: "missing_image", policy: v1.PullIfNotPresent, - calledFunctions: []string{"IsImagePresent", "PullImage"}, + calledFunctions: []string{"GetImageRef", "PullImage"}, inspectErr: nil, pullerErr: nil, expectedErr: []error{nil}}, @@ -52,35 +52,35 @@ func pullerTestCases() []pullerTestCase { { // image present, don't pull containerImage: "present_image", policy: v1.PullIfNotPresent, - calledFunctions: []string{"IsImagePresent"}, + calledFunctions: []string{"GetImageRef"}, inspectErr: nil, pullerErr: nil, expectedErr: []error{nil, nil, nil}}, // image present, pull it {containerImage: "present_image", policy: v1.PullAlways, - calledFunctions: []string{"IsImagePresent", "PullImage"}, + calledFunctions: []string{"GetImageRef", "PullImage"}, inspectErr: nil, pullerErr: nil, expectedErr: []error{nil, nil, nil}}, // missing image, error PullNever {containerImage: "missing_image", policy: v1.PullNever, - calledFunctions: []string{"IsImagePresent"}, + calledFunctions: []string{"GetImageRef"}, inspectErr: nil, pullerErr: nil, expectedErr: []error{ErrImageNeverPull, ErrImageNeverPull, ErrImageNeverPull}}, // missing image, unable to inspect {containerImage: "missing_image", policy: v1.PullIfNotPresent, - calledFunctions: []string{"IsImagePresent"}, + calledFunctions: []string{"GetImageRef"}, inspectErr: errors.New("unknown inspectError"), pullerErr: nil, expectedErr: []error{ErrImageInspect, ErrImageInspect, ErrImageInspect}}, // missing image, unable to fetch {containerImage: "typo_image", policy: v1.PullIfNotPresent, - calledFunctions: []string{"IsImagePresent", "PullImage"}, + calledFunctions: []string{"GetImageRef", "PullImage"}, inspectErr: nil, pullerErr: errors.New("404"), expectedErr: []error{ErrImagePull, ErrImagePull, ErrImagePullBackOff, ErrImagePull, ErrImagePullBackOff, ErrImagePullBackOff}}, diff --git a/pkg/kubelet/kuberuntime/kuberuntime_image.go b/pkg/kubelet/kuberuntime/kuberuntime_image.go index 34b711170df..51f29dffdd1 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_image.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_image.go @@ -78,8 +78,9 @@ func (m *kubeGenericRuntimeManager) PullImage(image kubecontainer.ImageSpec, pul return "", utilerrors.NewAggregate(pullErrs) } -// IsImagePresent checks whether the container image is already in the local storage. -func (m *kubeGenericRuntimeManager) IsImagePresent(image kubecontainer.ImageSpec) (string, error) { +// GetImageRef gets the reference (digest or ID) of the image which has already been in +// the local storage. It returns ("", nil) if the image isn't in the local storage. +func (m *kubeGenericRuntimeManager) GetImageRef(image kubecontainer.ImageSpec) (string, error) { status, err := m.imageService.ImageStatus(&runtimeapi.ImageSpec{Image: &image.Image}) if err != nil { glog.Errorf("ImageStatus for image %q failed: %v", image, err) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_image_test.go b/pkg/kubelet/kuberuntime/kuberuntime_image_test.go index 01e6129c6e5..b758caeb248 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_image_test.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_image_test.go @@ -56,13 +56,13 @@ func TestListImages(t *testing.T) { assert.Equal(t, expected.List(), actual.List()) } -func TestIsImagePresent(t *testing.T) { +func TestGetImageRef(t *testing.T) { _, fakeImageService, fakeManager, err := createTestRuntimeManager() assert.NoError(t, err) image := "busybox" fakeImageService.SetFakeImages([]string{image}) - imageRef, err := fakeManager.IsImagePresent(kubecontainer.ImageSpec{Image: image}) + imageRef, err := fakeManager.GetImageRef(kubecontainer.ImageSpec{Image: image}) assert.NoError(t, err) assert.Equal(t, image, imageRef) } diff --git a/pkg/kubelet/rkt/image.go b/pkg/kubelet/rkt/image.go index 4814ac03bae..3a1687b4294 100644 --- a/pkg/kubelet/rkt/image.go +++ b/pkg/kubelet/rkt/image.go @@ -87,7 +87,7 @@ func (r *Runtime) PullImage(image kubecontainer.ImageSpec, pullSecrets []v1.Secr return r.getImageID(img) } -func (r *Runtime) IsImagePresent(image kubecontainer.ImageSpec) (string, error) { +func (r *Runtime) GetImageRef(image kubecontainer.ImageSpec) (string, error) { images, err := r.listImages(image.Image, false) if err != nil { return "", err