Start working on tests for auto discovery
This commit is contained in:
@ -6,28 +6,64 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/TwinProduction/gatus/k8stest"
|
||||
"k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
|
||||
"k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
)
|
||||
|
||||
// KubernetesClientApi is a minimal interface for interacting with Kubernetes
|
||||
// Created mostly to make mocking the Kubernetes client easier
|
||||
type KubernetesClientApi interface {
|
||||
GetServices(namespace string) ([]v1.Service, error)
|
||||
}
|
||||
|
||||
// KubernetesClient is a working implementation of KubernetesClientApi
|
||||
type KubernetesClient struct {
|
||||
client *kubernetes.Clientset
|
||||
}
|
||||
|
||||
// GetServices returns a list of services for a given namespace
|
||||
func (k *KubernetesClient) GetServices(namespace string) ([]v1.Service, error) {
|
||||
services, err := k.client.CoreV1().Services(namespace).List(metav1.ListOptions{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return services.Items, nil
|
||||
}
|
||||
|
||||
// NewKubernetesClient creates a KubernetesClient
|
||||
func NewKubernetesClient(client *kubernetes.Clientset) *KubernetesClient {
|
||||
return &KubernetesClient{
|
||||
client: client,
|
||||
}
|
||||
}
|
||||
|
||||
// NewClient creates a Kubernetes client for the given ClusterMode
|
||||
func NewClient(clusterMode ClusterMode) (*kubernetes.Clientset, error) {
|
||||
func NewClient(clusterMode ClusterMode) (KubernetesClientApi, error) {
|
||||
var kubeConfig *rest.Config
|
||||
var err error
|
||||
switch clusterMode {
|
||||
case ClusterModeIn:
|
||||
kubeConfig, err = getInClusterConfig()
|
||||
kubeConfig, err = rest.InClusterConfig()
|
||||
case ClusterModeOut:
|
||||
kubeConfig, err = getOutClusterConfig()
|
||||
case ClusterModeMock:
|
||||
return k8stest.GetMockedKubernetesClient(), nil
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid cluster mode, try '%s' or '%s'", ClusterModeIn, ClusterModeOut)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to get cluster config for mode '%s': %s", clusterMode, err.Error())
|
||||
}
|
||||
return kubernetes.NewForConfig(kubeConfig)
|
||||
client, err := kubernetes.NewForConfig(kubeConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return NewKubernetesClient(client), nil
|
||||
}
|
||||
|
||||
func homeDir() string {
|
||||
@ -47,7 +83,3 @@ func getOutClusterConfig() (*rest.Config, error) {
|
||||
flag.Parse()
|
||||
return clientcmd.BuildConfigFromFlags("", *kubeConfig)
|
||||
}
|
||||
|
||||
func getInClusterConfig() (*rest.Config, error) {
|
||||
return rest.InClusterConfig()
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ type NamespaceConfig struct {
|
||||
type ClusterMode string
|
||||
|
||||
const (
|
||||
ClusterModeIn ClusterMode = "in"
|
||||
ClusterModeOut ClusterMode = "out"
|
||||
ClusterModeIn ClusterMode = "in"
|
||||
ClusterModeOut ClusterMode = "out"
|
||||
ClusterModeMock ClusterMode = "mock"
|
||||
)
|
||||
|
14
k8s/k8s.go
14
k8s/k8s.go
@ -1,16 +1,10 @@
|
||||
package k8s
|
||||
|
||||
import (
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/api/core/v1"
|
||||
)
|
||||
|
||||
// GetKubernetesServices return List of Services from given namespace
|
||||
func GetKubernetesServices(client *kubernetes.Clientset, ns string) ([]corev1.Service, error) {
|
||||
services, err := client.CoreV1().Services(ns).List(metav1.ListOptions{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return services.Items, nil
|
||||
// GetKubernetesServices return a list of Services from the given namespace
|
||||
func GetKubernetesServices(client KubernetesClientApi, namespace string) ([]v1.Service, error) {
|
||||
return client.GetServices(namespace)
|
||||
}
|
||||
|
Reference in New Issue
Block a user