diff --git a/pkg/controller/controller_utils.go b/pkg/controller/controller_utils.go index ab94ee16696..394407b28b5 100644 --- a/pkg/controller/controller_utils.go +++ b/pkg/controller/controller_utils.go @@ -27,6 +27,7 @@ import ( apps "k8s.io/api/apps/v1" "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -595,7 +596,7 @@ func (r RealPodControl) DeletePod(namespace string, podID string, object runtime return fmt.Errorf("object does not have ObjectMeta, %v", err) } glog.V(2).Infof("Controller %v deleting pod %v/%v", accessor.GetName(), namespace, podID) - if err := r.KubeClient.CoreV1().Pods(namespace).Delete(podID, nil); err != nil { + if err := r.KubeClient.CoreV1().Pods(namespace).Delete(podID, nil); err != nil && !apierrors.IsNotFound(err) { r.Recorder.Eventf(object, v1.EventTypeWarning, FailedDeletePodReason, "Error deleting: %v", err) return fmt.Errorf("unable to delete pods: %v", err) } else { diff --git a/pkg/controller/controller_utils_test.go b/pkg/controller/controller_utils_test.go index 857b8b46fef..999efadb68b 100644 --- a/pkg/controller/controller_utils_test.go +++ b/pkg/controller/controller_utils_test.go @@ -314,6 +314,19 @@ func TestCreatePods(t *testing.T) { "Body: %s", fakeHandler.RequestBody) } +func TestDeletePodsAllowsMissing(t *testing.T) { + fakeClient := fake.NewSimpleClientset() + podControl := RealPodControl{ + KubeClient: fakeClient, + Recorder: &record.FakeRecorder{}, + } + + controllerSpec := newReplicationController(1) + + err := podControl.DeletePod("namespace-name", "podName", controllerSpec) + assert.NoError(t, err, "unexpected error: %v", err) +} + func TestActivePodFiltering(t *testing.T) { // This rc is not needed by the test, only the newPodList to give the pods labels/a namespace. rc := newReplicationController(0)