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 }