From af46c695531a8dfffca42dae75f02e20ab55c393 Mon Sep 17 00:00:00 2001 From: jiangyaoguo Date: Sat, 19 Sep 2015 00:09:16 +0800 Subject: [PATCH] Distinguish image registry unavailable and pull failure --- pkg/kubelet/container/image_puller.go | 7 ++++++- pkg/kubelet/container/runtime.go | 3 +++ pkg/kubelet/dockertools/docker.go | 2 +- pkg/kubelet/dockertools/docker_test.go | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pkg/kubelet/container/image_puller.go b/pkg/kubelet/container/image_puller.go index 3a5e5de9195..7138eac1ccc 100644 --- a/pkg/kubelet/container/image_puller.go +++ b/pkg/kubelet/container/image_puller.go @@ -105,7 +105,12 @@ func (puller *imagePuller) PullImage(pod *api.Pod, container *api.Container, pul if err = puller.runtime.PullImage(spec, pullSecrets); err != nil { puller.logIt(ref, "Failed", logPrefix, fmt.Sprintf("Failed to pull image %q: %v", container.Image, err), glog.Warning) puller.backOff.Next(backOffKey, puller.backOff.Clock.Now()) - return ErrImagePull, err.Error() + if err == RegistryUnavailable { + msg := fmt.Sprintf("image pull failed for %s because the registry is temporarily unavailable.", container.Image) + return err, msg + } else { + return ErrImagePull, err.Error() + } } puller.logIt(ref, "Pulled", logPrefix, fmt.Sprintf("Successfully pulled image %q", container.Image), glog.Info) puller.backOff.GC() diff --git a/pkg/kubelet/container/runtime.go b/pkg/kubelet/container/runtime.go index 2213a3a3da4..81dce470b44 100644 --- a/pkg/kubelet/container/runtime.go +++ b/pkg/kubelet/container/runtime.go @@ -45,6 +45,9 @@ var ( // Required Image is absent on host and PullPolicy is NeverPullImage ErrImageNeverPull = errors.New("ErrImageNeverPull") + + // Get http error when pulling image from registry + RegistryUnavailable = errors.New("RegistryUnavailable") ) var ErrRunContainer = errors.New("RunContainerError") diff --git a/pkg/kubelet/dockertools/docker.go b/pkg/kubelet/dockertools/docker.go index e2632a4fa3e..db19e6741e5 100644 --- a/pkg/kubelet/dockertools/docker.go +++ b/pkg/kubelet/dockertools/docker.go @@ -130,7 +130,7 @@ func filterHTTPError(err error, image string) error { jerr.Code == http.StatusServiceUnavailable || jerr.Code == http.StatusGatewayTimeout) { glog.V(2).Infof("Pulling image %q failed: %v", image, err) - return fmt.Errorf("image pull failed for %s because the registry is temporarily unavailable.", image) + return kubecontainer.RegistryUnavailable } else { return err } diff --git a/pkg/kubelet/dockertools/docker_test.go b/pkg/kubelet/dockertools/docker_test.go index 1593566e6b0..a5baedc4928 100644 --- a/pkg/kubelet/dockertools/docker_test.go +++ b/pkg/kubelet/dockertools/docker_test.go @@ -257,7 +257,7 @@ func TestPullWithJSONError(t *testing.T) { "Bad gateway": { "ubuntu", &jsonmessage.JSONError{Code: 502, Message: "\n\n \n \n \n

Oops, there was an error!

\n

We have been contacted of this error, feel free to check out status.docker.com\n to see if there is a bigger issue.

\n\n \n"}, - "because the registry is temporarily unavailable", + kubecontainer.RegistryUnavailable.Error(), }, } for i, test := range tests {