From dc706c0f081aa7f36f91f2de6b9fa4e7d2e57bcd Mon Sep 17 00:00:00 2001
From: icefed <zlwangel@gmail.com>
Date: Fri, 23 Aug 2019 11:54:34 +0800
Subject: [PATCH] Fix #27, some reasons cause "already exists" error

---
 provisioner.go | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/provisioner.go b/provisioner.go
index f40041e3..24c9ccf8 100644
--- a/provisioner.go
+++ b/provisioner.go
@@ -15,6 +15,7 @@ import (
 
 	pvController "github.com/kubernetes-incubator/external-storage/lib/controller"
 	"k8s.io/api/core/v1"
+	k8serror "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	clientset "k8s.io/client-go/kubernetes"
 )
@@ -357,13 +358,13 @@ func (p *LocalPathProvisioner) createHelperPod(action ActionType, cmdsForPath []
 		},
 	}
 
-	pod, err := p.kubeClient.CoreV1().Pods(p.namespace).Create(helperPod)
-	if err != nil {
+	_, err = p.kubeClient.CoreV1().Pods(p.namespace).Create(helperPod)
+	if err != nil && !k8serror.IsAlreadyExists(err) {
 		return err
 	}
 
 	defer func() {
-		e := p.kubeClient.CoreV1().Pods(p.namespace).Delete(pod.Name, &metav1.DeleteOptions{})
+		e := p.kubeClient.CoreV1().Pods(p.namespace).Delete(helperPod.Name, &metav1.DeleteOptions{})
 		if e != nil {
 			logrus.Errorf("unable to delete the helper pod: %v", e)
 		}
@@ -371,7 +372,7 @@ func (p *LocalPathProvisioner) createHelperPod(action ActionType, cmdsForPath []
 
 	completed := false
 	for i := 0; i < CmdTimeoutCounts; i++ {
-		if pod, err := p.kubeClient.CoreV1().Pods(p.namespace).Get(pod.Name, metav1.GetOptions{}); err != nil {
+		if pod, err := p.kubeClient.CoreV1().Pods(p.namespace).Get(helperPod.Name, metav1.GetOptions{}); err != nil {
 			return err
 		} else if pod.Status.Phase == v1.PodSucceeded {
 			completed = true
-- 
GitLab