stackube/pkg/util/k8s_util.go
Harry Zhang a0de58d447 Refactor tenant client
Deal with tenantID provided case

Change-Id: Ia01028d21fe258a97175fcc8ce103cc82df37291
2017-07-20 09:57:24 +08:00

60 lines
1.6 KiB
Go

package util
import (
"fmt"
"time"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/errors"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
)
func NewClusterConfig(kubeConfig string) (*rest.Config, error) {
if kubeConfig != "" {
cfg, err := clientcmd.BuildConfigFromFlags("", kubeConfig)
if err != nil {
return nil, err
}
cfg.QPS = 100
cfg.Burst = 100
return cfg, nil
} else {
return rest.InClusterConfig()
}
}
func WaitForCRDReady(clientset apiextensionsclient.Interface, crdName string) error {
err := wait.Poll(500*time.Millisecond, 60*time.Second, func() (bool, error) {
crd, err := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Get(crdName, metav1.GetOptions{})
if err != nil {
return false, err
}
for _, cond := range crd.Status.Conditions {
switch cond.Type {
case apiextensionsv1beta1.Established:
if cond.Status == apiextensionsv1beta1.ConditionTrue {
return true, err
}
case apiextensionsv1beta1.NamesAccepted:
if cond.Status == apiextensionsv1beta1.ConditionFalse {
return false, fmt.Errorf("Name conflict when creating CRD: %v\n", cond.Reason)
}
}
}
return false, err
})
if err != nil {
deleteErr := clientset.ApiextensionsV1beta1().CustomResourceDefinitions().Delete(crdName, nil)
if deleteErr != nil {
return errors.NewAggregate([]error{err, deleteErr})
}
return err
}
return nil
}