57 lines
1.5 KiB
Go
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
|
|
}
|