feat: scaffold terraform provider for fission via kubernetes CRD

This commit is contained in:
Naeel
2026-04-14 21:55:50 +03:00
parent 2e775e73a4
commit a8c28c751e
11 changed files with 659 additions and 0 deletions
@@ -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
}