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 {