From 66454be7ceefa3b1434b23f3494c66a19b8cb484 Mon Sep 17 00:00:00 2001 From: Ondra Machacek Date: Mon, 19 Oct 2020 15:10:04 +0200 Subject: [PATCH] Use specific client set for operations This PR add usage of specific client set for specific operation. We now use client set built from kubeconfig parameter only for creation and watching of the experiment of the pod. And we use client set built from litmuskubeconfig for watching/updating chaosengine pod, which may run on different cluster. Signed-off-by: Ondra Machacek --- pkg/utils/builders.go | 2 +- pkg/utils/types.go | 55 ++++++++++++++++++++++++-------- pkg/utils/watchChaosContainer.go | 2 +- 3 files changed, 44 insertions(+), 15 deletions(-) diff --git a/pkg/utils/builders.go b/pkg/utils/builders.go index 6f9a9869..53f4bdde 100644 --- a/pkg/utils/builders.go +++ b/pkg/utils/builders.go @@ -116,7 +116,7 @@ func BuildingAndLaunchJob(experiment *ExperimentDetails, clients ClientSets) err // launchJob spawn a kubernetes Job using the job Object received. func (experiment *ExperimentDetails) launchJob(job *batchv1.Job, clients ClientSets) error { - _, err := clients.KubeClient.BatchV1().Jobs(experiment.Namespace).Create(job) + _, err := clients.KubeClientExperiment.BatchV1().Jobs(experiment.Namespace).Create(job) if err != nil { return err } diff --git a/pkg/utils/types.go b/pkg/utils/types.go index 94a8d309..ca1a7407 100644 --- a/pkg/utils/types.go +++ b/pkg/utils/types.go @@ -66,8 +66,10 @@ type VolumeOpts struct { // ClientSets is a collection of clientSets needed type ClientSets struct { - KubeClient *kubernetes.Clientset - LitmusClient *clientV1alpha1.Clientset + KubeClient *kubernetes.Clientset + LitmusClient *clientV1alpha1.Clientset + KubeClientExperiment *kubernetes.Clientset + LitmusClientExperiment *clientV1alpha1.Clientset } // Recorder is collection of resources needed to record events for chaos-runner @@ -95,20 +97,33 @@ const ( // GenerateClientSetFromKubeConfig will generation both ClientSets (k8s, and Litmus) func (clientSets *ClientSets) GenerateClientSetFromKubeConfig() error { - config, err := getKubeConfig() + configExperiment, configLitmus, err := getKubeConfig() if err != nil { return err } - k8sClientSet, err := k8s.GenerateK8sClientSet(config) + + k8sClientSetLitmus, err := k8s.GenerateK8sClientSet(configLitmus) if err != nil { return err } - litmusClientSet, err := litmus.GenerateLitmusClientSet(config) + litmusClientSetLitmus, err := litmus.GenerateLitmusClientSet(configLitmus) + if err != nil { + return err + } + + k8sClientSetExperiment, err := k8s.GenerateK8sClientSet(configExperiment) if err != nil { return err } - clientSets.KubeClient = k8sClientSet - clientSets.LitmusClient = litmusClientSet + litmusClientSetExperiment, err := litmus.GenerateLitmusClientSet(configExperiment) + if err != nil { + return err + } + + clientSets.KubeClient = k8sClientSetLitmus + clientSets.LitmusClient = litmusClientSetLitmus + clientSets.KubeClientExperiment = k8sClientSetExperiment + clientSets.LitmusClientExperiment = litmusClientSetExperiment return nil } @@ -116,19 +131,33 @@ func (clientSets *ClientSets) GenerateClientSetFromKubeConfig() error { // Generate // getKubeConfig setup the config for access cluster resource -func getKubeConfig() (*rest.Config, error) { +func getKubeConfig() (*rest.Config, *rest.Config, error) { kubeconfig := flag.String("kubeconfig", "", "absolute path to the kubeconfig file") + litmuskubeconfig := flag.String("litmuskubeconfig", "", "absolute path to the kubeconfig file") flag.Parse() + // Use in-cluster config if kubeconfig path is specified + if *litmuskubeconfig == "" { + configLitmus, err := rest.InClusterConfig() + if err != nil { + return nil, configLitmus, err + } + } + configLitmus, err := clientcmd.BuildConfigFromFlags("", *litmuskubeconfig) + if err != nil { + return nil, configLitmus, err + } + // Use in-cluster config if kubeconfig path is specified if *kubeconfig == "" { - config, err := rest.InClusterConfig() + configExperiment, err := rest.InClusterConfig() if err != nil { - return config, err + return configExperiment, configLitmus, err } } - config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) + configExperiment, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) if err != nil { - return config, err + return configExperiment, configLitmus, err } - return config, err + + return configExperiment, configLitmus, err } diff --git a/pkg/utils/watchChaosContainer.go b/pkg/utils/watchChaosContainer.go index 761cbb47..91759375 100644 --- a/pkg/utils/watchChaosContainer.go +++ b/pkg/utils/watchChaosContainer.go @@ -11,7 +11,7 @@ import ( // GetChaosPod gets the chaos experiment pod object launched by the runner func GetChaosPod(expDetails *ExperimentDetails, clients ClientSets) (*corev1.Pod, error) { - chaosPodList, err := clients.KubeClient.CoreV1().Pods(expDetails.Namespace).List(metav1.ListOptions{LabelSelector: "job-name=" + expDetails.JobName}) + chaosPodList, err := clients.KubeClientExperiment.CoreV1().Pods(expDetails.Namespace).List(metav1.ListOptions{LabelSelector: "job-name=" + expDetails.JobName}) if err != nil || len(chaosPodList.Items) == 0 { return nil, errors.Errorf("Unable to get the chaos pod, error: %v", err) } else if len(chaosPodList.Items) > 1 {