feat: scaffold terraform provider for fission via kubernetes CRD
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"k8s.io/client-go/dynamic"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
)
|
||||
|
||||
// Client хранит клиентов Kubernetes API для работы с CRD Fission.
|
||||
type Client struct {
|
||||
DynClient dynamic.Interface
|
||||
K8sClient kubernetes.Interface
|
||||
Namespace string
|
||||
}
|
||||
|
||||
// New создает Kubernetes clients из kubeconfig/context.
|
||||
func New(kubeconfigPath, kubeContext, namespace string) (*Client, error) {
|
||||
cfg, err := buildConfig(kubeconfigPath, kubeContext)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dynClient, err := dynamic.NewForConfig(cfg)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("create dynamic client: %w", err)
|
||||
}
|
||||
|
||||
k8sClient, err := kubernetes.NewForConfig(cfg)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("create kubernetes client: %w", err)
|
||||
}
|
||||
|
||||
return &Client{
|
||||
DynClient: dynClient,
|
||||
K8sClient: k8sClient,
|
||||
Namespace: namespace,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func buildConfig(kubeconfigPath, kubeContext string) (*rest.Config, error) {
|
||||
loadingRules := &clientcmd.ClientConfigLoadingRules{}
|
||||
if kubeconfigPath != "" {
|
||||
loadingRules.ExplicitPath = kubeconfigPath
|
||||
}
|
||||
|
||||
overrides := &clientcmd.ConfigOverrides{}
|
||||
if kubeContext != "" {
|
||||
overrides.CurrentContext = kubeContext
|
||||
}
|
||||
|
||||
clientCfg := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, overrides)
|
||||
cfg, err := clientCfg.ClientConfig()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("build kube config: %w", err)
|
||||
}
|
||||
|
||||
return cfg, nil
|
||||
}
|
||||
Reference in New Issue
Block a user