Files
omnex/control-plane/api/internal/k8s/client.go
T
Nuxgrid fb10d25ee2
ci-api / test (push) Successful in 22m30s
ci-web / test (push) Successful in 13m15s
chore: update
2026-08-01 23:33:11 +02:00

57 lines
1.5 KiB
Go

package k8s
import (
"fmt"
"github.com/omnex/control-plane/api/internal/config"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
metricsclient "k8s.io/metrics/pkg/client/clientset/versioned"
)
func restConfig(cfg *config.Config) (*rest.Config, error) {
if cfg.Kubeconfig != "" {
return clientcmd.BuildConfigFromFlags("", cfg.Kubeconfig)
}
return rest.InClusterConfig()
}
// NewRESTConfig expose la config REST brute — nécessaire pour les appels qui
// ne passent pas par le Clientset généré (ex: exec dans un pod via
// remotecommand, utilisé pour la migration pg_dump/restore).
func NewRESTConfig(cfg *config.Config) (*rest.Config, error) {
return restConfig(cfg)
}
func NewClient(cfg *config.Config) (*kubernetes.Clientset, error) {
k8sCfg, err := restConfig(cfg)
if err != nil {
return nil, fmt.Errorf("k8s config: %w", err)
}
client, err := kubernetes.NewForConfig(k8sCfg)
if err != nil {
return nil, fmt.Errorf("k8s clientset: %w", err)
}
return client, nil
}
// NewMetricsClient crée un client pour l'API metrics.k8s.io (metrics-server),
// utilisée pour lire l'usage CPU/mémoire en direct des pods.
func NewMetricsClient(cfg *config.Config) (*metricsclient.Clientset, error) {
k8sCfg, err := restConfig(cfg)
if err != nil {
return nil, fmt.Errorf("k8s config: %w", err)
}
client, err := metricsclient.NewForConfig(k8sCfg)
if err != nil {
return nil, fmt.Errorf("metrics clientset: %w", err)
}
return client, nil
}