98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
package k8sutil
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	apiextclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
 | 
						|
	apiextbeta1 "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1"
 | 
						|
	apierrors "k8s.io/apimachinery/pkg/api/errors"
 | 
						|
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						|
	"k8s.io/apimachinery/pkg/runtime/serializer"
 | 
						|
	"k8s.io/client-go/kubernetes"
 | 
						|
	v1beta1 "k8s.io/client-go/kubernetes/typed/apps/v1beta1"
 | 
						|
	v1core "k8s.io/client-go/kubernetes/typed/core/v1"
 | 
						|
	"k8s.io/client-go/pkg/api"
 | 
						|
	"k8s.io/client-go/rest"
 | 
						|
	"k8s.io/client-go/tools/clientcmd"
 | 
						|
 | 
						|
	"github.com/zalando-incubator/postgres-operator/pkg/util/constants"
 | 
						|
)
 | 
						|
 | 
						|
// KubernetesClient describes getters for Kubernetes objects
 | 
						|
type KubernetesClient struct {
 | 
						|
	v1core.SecretsGetter
 | 
						|
	v1core.ServicesGetter
 | 
						|
	v1core.EndpointsGetter
 | 
						|
	v1core.PodsGetter
 | 
						|
	v1core.PersistentVolumesGetter
 | 
						|
	v1core.PersistentVolumeClaimsGetter
 | 
						|
	v1core.ConfigMapsGetter
 | 
						|
	v1beta1.StatefulSetsGetter
 | 
						|
	apiextbeta1.CustomResourceDefinitionsGetter
 | 
						|
 | 
						|
	RESTClient rest.Interface
 | 
						|
	CRDREST    rest.Interface
 | 
						|
}
 | 
						|
 | 
						|
// RestConfig creates REST config
 | 
						|
func RestConfig(kubeConfig string, outOfCluster bool) (*rest.Config, error) {
 | 
						|
	if outOfCluster {
 | 
						|
		return clientcmd.BuildConfigFromFlags("", kubeConfig)
 | 
						|
	}
 | 
						|
 | 
						|
	return rest.InClusterConfig()
 | 
						|
}
 | 
						|
 | 
						|
// ResourceAlreadyExists checks if error corresponds to Already exists error
 | 
						|
func ResourceAlreadyExists(err error) bool {
 | 
						|
	return apierrors.IsAlreadyExists(err)
 | 
						|
}
 | 
						|
 | 
						|
// ResourceNotFound checks if error corresponds to Not found error
 | 
						|
func ResourceNotFound(err error) bool {
 | 
						|
	return apierrors.IsNotFound(err)
 | 
						|
}
 | 
						|
 | 
						|
func NewFromConfig(cfg *rest.Config) (KubernetesClient, error) {
 | 
						|
	kubeClient := KubernetesClient{}
 | 
						|
 | 
						|
	client, err := kubernetes.NewForConfig(cfg)
 | 
						|
	if err != nil {
 | 
						|
		return kubeClient, fmt.Errorf("could not get clientset: %v", err)
 | 
						|
	}
 | 
						|
 | 
						|
	kubeClient.PodsGetter = client.CoreV1()
 | 
						|
	kubeClient.ServicesGetter = client.CoreV1()
 | 
						|
	kubeClient.EndpointsGetter = client.CoreV1()
 | 
						|
	kubeClient.SecretsGetter = client.CoreV1()
 | 
						|
	kubeClient.ConfigMapsGetter = client.CoreV1()
 | 
						|
	kubeClient.PersistentVolumeClaimsGetter = client.CoreV1()
 | 
						|
	kubeClient.PersistentVolumesGetter = client.CoreV1()
 | 
						|
	kubeClient.StatefulSetsGetter = client.AppsV1beta1()
 | 
						|
	kubeClient.RESTClient = client.CoreV1().RESTClient()
 | 
						|
 | 
						|
	cfg2 := *cfg
 | 
						|
	cfg2.GroupVersion = &schema.GroupVersion{
 | 
						|
		Group:   constants.CRDGroup,
 | 
						|
		Version: constants.CRDApiVersion,
 | 
						|
	}
 | 
						|
	cfg2.APIPath = constants.K8sAPIPath
 | 
						|
	cfg2.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: api.Codecs}
 | 
						|
 | 
						|
	crd, err := rest.RESTClientFor(&cfg2)
 | 
						|
	if err != nil {
 | 
						|
		return kubeClient, fmt.Errorf("could not get rest client: %v", err)
 | 
						|
	}
 | 
						|
	kubeClient.CRDREST = crd
 | 
						|
 | 
						|
	apiextClient, err := apiextclient.NewForConfig(cfg)
 | 
						|
	if err != nil {
 | 
						|
		return kubeClient, fmt.Errorf("could not create api client:%v", err)
 | 
						|
	}
 | 
						|
 | 
						|
	kubeClient.CustomResourceDefinitionsGetter = apiextClient.ApiextensionsV1beta1()
 | 
						|
 | 
						|
	return kubeClient, nil
 | 
						|
 | 
						|
}
 |