get rid of race condition

This commit is contained in:
Murat Kabilov 2017-01-23 13:01:32 +01:00
parent 57fa51b6c5
commit 77db11e084
1 changed files with 21 additions and 7 deletions

View File

@ -5,8 +5,11 @@ import (
"log" "log"
"time" "time"
"net/http"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/api"
apierrors "k8s.io/client-go/pkg/api/errors"
"k8s.io/client-go/pkg/api/unversioned" "k8s.io/client-go/pkg/api/unversioned"
"k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/pkg/api/v1"
"k8s.io/client-go/pkg/apis/extensions/v1beta1" "k8s.io/client-go/pkg/apis/extensions/v1beta1"
@ -100,12 +103,19 @@ func newKubernetesSpiloClient(c *rest.Config) (*rest.RESTClient, error) {
return rest.RESTClientFor(c) return rest.RESTClientFor(c)
} }
func EnsureSpiloThirdPartyResource(client *kubernetes.Clientset) error { //TODO: Move to separate package
_, err := client.ExtensionsV1beta1().ThirdPartyResources().Get(fmt.Sprintf("spilo.%s", VENDOR)) func IsKubernetesResourceNotFoundError(err error) bool {
if err == nil { se, ok := err.(*apierrors.StatusError)
return err if !ok {
} return false
}
if se.Status().Code == http.StatusNotFound && se.Status().Reason == unversioned.StatusReasonNotFound {
return true
}
return false
}
func EnsureSpiloThirdPartyResource(client *kubernetes.Clientset) error {
// The resource doesn't exist, so we create it. // The resource doesn't exist, so we create it.
tpr := v1beta1.ThirdPartyResource{ tpr := v1beta1.ThirdPartyResource{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
@ -117,7 +127,11 @@ func EnsureSpiloThirdPartyResource(client *kubernetes.Clientset) error {
}, },
} }
_, err = client.ExtensionsV1beta1().ThirdPartyResources().Create(&tpr) _, err := client.ExtensionsV1beta1().ThirdPartyResources().Create(&tpr)
return err if IsKubernetesResourceNotFoundError(err) {
return err
}
return nil
} }