stackube/pkg/util/k8s_util.go
Pengfei Ni b9bf13f065 Add stackube proxy
- Adds stackube proxy which listens on endpoints, services and
  namespaces, creates load balancer rules for clusterIP service
- Switch to govendor for managing vendors
- Add hack scripts for verifying govet and gofmt

Change-Id: I8594c16d294f46ae0d3dec6dae6fa491e7891b8b
Implements: blueprint stackube-proxy
2017-07-20 16:21:59 +08:00

70 lines
1.8 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"
)
const (
defaultQPS = 100
defaultBurst = 100
)
// NewClusterConfig builds a kubernetes cluster config.
func NewClusterConfig(kubeConfig string) (*rest.Config, error) {
var cfg *rest.Config
var err error
if kubeConfig != "" {
cfg, err = clientcmd.BuildConfigFromFlags("", kubeConfig)
} else {
cfg, err = rest.InClusterConfig()
}
if err != nil {
return nil, err
}
// Setup default QPS and burst.
cfg.QPS = defaultQPS
cfg.Burst = defaultBurst
return cfg, nil
}
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
}