Skip to content

Commit 2ec17fb

Browse files
[Cherry pick for 1.2.2] (#59)
* (fix) Added name of the runner Pod in ChaosEngine Events (#56) Signed-off-by: Rahul M Chheda <rahul.chheda@mayadata.io> * (feat) Added support for AdminMode (#45) * (feat) Added support for AdminMode - Replaced EngineDetails.AppNamespace to EngineDetails.EngineNamespace - Added logic to check for resources in chaosEngine namespace - Only job will be created in AppNamespace (experiment.Namespace) - Synced the experiment.Namespace = engineDetails.EngineNamespace, when AdminMode is true - Added OS ENV as ENGINE_NAMESPACE passed from operator, into engineDetails struct * Sycned experiment.Namespace and engineDetails.EngineNamespace Signed-off-by: Rahul M Chheda <rahul.chheda@mayadata.io> * refcator(chaos_ns): Rename Engine_NAMESPACE to CHAOS_NAMESPACE (#57) Signed-off-by: shubhamchaudhary <shubham.chaudhary@mayadata.io> Co-authored-by: Shubham Chaudhary <shubham.chaudhary@mayadata.io>
1 parent ae26521 commit 2ec17fb

7 files changed

Lines changed: 47 additions & 27 deletions

File tree

bin/runner.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func main() {
1818
}
1919
// Fetching all the ENV's needed
2020
utils.GetOsEnv(&engineDetails)
21-
klog.V(0).Infoln("Experiments List: ", engineDetails.Experiments, " ", "Engine Name: ", engineDetails.Name, " ", "appLabels : ", engineDetails.AppLabel, " ", "appNamespace: ", engineDetails.AppNamespace, " ", "appKind: ", engineDetails.AppKind, " ", "Service Account Name: ", engineDetails.SvcAccount)
21+
klog.V(0).Infoln("Experiments List: ", engineDetails.Experiments, " ", "Engine Name: ", engineDetails.Name, " ", "appLabels : ", engineDetails.AppLabel, " ", "appKind: ", engineDetails.AppKind, " ", "Service Account Name: ", engineDetails.SvcAccount, "Engine Namespace: ", engineDetails.EngineNamespace)
2222

2323
recorder, err := utils.NewEventRecorder(clients, engineDetails)
2424
if err != nil {
@@ -31,10 +31,12 @@ func main() {
3131
if engineDetails.ClientUUID != "" {
3232
analytics.TriggerAnalytics(engineDetails.Experiments[i], engineDetails.ClientUUID)
3333
}
34+
3435
experiment := utils.NewExperimentDetails(&engineDetails, i)
3536

3637
if err := experiment.SetValueFromChaosResources(&engineDetails, clients); err != nil {
3738
klog.V(0).Infof("Unable to set values from Chaos Resources due to error: %v", err)
39+
recorder.ExperimentSkipped(engineDetails.Experiments[i], utils.ExperimentNotFoundErrorReason)
3840
}
3941

4042
if err := experiment.SetENV(engineDetails, clients); err != nil {
@@ -50,12 +52,6 @@ func main() {
5052

5153
klog.V(0).Infof("Preparing to run Chaos Experiment: %v", experiment.Name)
5254

53-
if err := experiment.HandleChaosExperimentExistence(engineDetails, clients); err != nil {
54-
klog.V(0).Infof("Unable to get ChaosExperiment Name: %v, in namespace: %v, due to error: %v", experiment.Name, experiment.Namespace, err)
55-
recorder.ExperimentSkipped(engineDetails.Experiments[i], utils.ExperimentNotFoundErrorReason)
56-
break
57-
}
58-
5955
if err := experiment.PatchResources(engineDetails, clients); err != nil {
6056
klog.V(0).Infof("Unable to patch Chaos Resources required for Chaos Experiment: %v, due to error: %v", experiment.Name, err)
6157
}

pkg/utils/experimentHelpers.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package utils
22

33
import (
4+
"os"
5+
46
"github.com/pkg/errors"
57
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
68
"k8s.io/klog"
@@ -33,7 +35,7 @@ func (expDetails *ExperimentDetails) SetENV(engineDetails EngineDetails, clients
3335
return err
3436
}
3537
// Store ENV in a map
36-
ENVList := map[string]string{"CHAOSENGINE": engineDetails.Name, "APP_LABEL": engineDetails.AppLabel, "APP_NAMESPACE": engineDetails.AppNamespace, "APP_KIND": engineDetails.AppKind, "AUXILIARY_APPINFO": engineDetails.AuxiliaryAppInfo, "CHAOS_UID": engineDetails.UID}
38+
ENVList := map[string]string{"CHAOSENGINE": engineDetails.Name, "APP_LABEL": engineDetails.AppLabel, "CHAOS_NAMESPACE": engineDetails.EngineNamespace, "APP_NAMESPACE": os.Getenv("APP_NAMESPACE"), "APP_KIND": engineDetails.AppKind, "AUXILIARY_APPINFO": engineDetails.AuxiliaryAppInfo, "CHAOS_UID": engineDetails.UID}
3739
// Adding some addition ENV's from spec.AppInfo of ChaosEngine
3840
for key, value := range ENVList {
3941
expDetails.Env[key] = value
@@ -49,8 +51,8 @@ func NewExperimentDetails(engineDetails *EngineDetails, i int) *ExperimentDetail
4951

5052
// Initial set to values from EngineDetails Struct
5153
experimentDetails.Name = engineDetails.Experiments[i]
52-
experimentDetails.Namespace = engineDetails.AppNamespace
5354
experimentDetails.SvcAccount = engineDetails.SvcAccount
55+
experimentDetails.Namespace = os.Getenv("CHAOS_NAMESPACE")
5456

5557
// Generation of Random String for appending it into Job Name
5658
randomString := RandomString()
@@ -65,7 +67,7 @@ func (expDetails *ExperimentDetails) HandleChaosExperimentExistence(engineDetail
6567
_, err := clients.LitmusClient.LitmuschaosV1alpha1().ChaosExperiments(expDetails.Namespace).Get(expDetails.Name, metav1.GetOptions{})
6668
if err != nil {
6769
if err := engineDetails.ExperimentNotFoundPatchEngine(expDetails, clients); err != nil {
68-
return errors.Wrapf(err, "Unable to patch Chaos Engine Name: %v, in namespace: %v, due to error: %v", engineDetails.Name, engineDetails.AppNamespace, err)
70+
return errors.Wrapf(err, "Unable to patch Chaos Engine Name: %v, in namespace: %v, due to error: %v", engineDetails.Name, engineDetails.EngineNamespace, err)
6971
}
7072
return errors.Wrapf(err, "Unable to list Chaos Experiment Name: %v,in Namespace: %v, due to error: %v", expDetails.Name, expDetails.Namespace, err)
7173
}
@@ -142,9 +144,15 @@ func (expDetails *ExperimentDetails) SetArgs(clients ClientSets) error {
142144

143145
// SetValueFromChaosResources fetchs required values from various Chaos Resources
144146
func (expDetails *ExperimentDetails) SetValueFromChaosResources(engineDetails *EngineDetails, clients ClientSets) error {
147+
if err := expDetails.SetValueFromChaosEngine(engineDetails, clients); err != nil {
148+
return errors.Wrapf(err, "Unable to set value from Chaos Engine due to error: %v", err)
149+
}
150+
145151
if err := engineDetails.SetValueFromChaosRunner(clients); err != nil {
146152
return errors.Wrapf(err, "Unable to set value from Chaos Runner due to error: %v", err)
147-
153+
}
154+
if err := expDetails.HandleChaosExperimentExistence(*engineDetails, clients); err != nil {
155+
return errors.Wrapf(err, "Unable to get ChaosExperiment Name: %v, in namespace: %v, due to error: %v", expDetails.Name, expDetails.Namespace, err)
148156
}
149157
if err := expDetails.SetValueFromChaosExperiment(clients, engineDetails); err != nil {
150158
return errors.Wrapf(err, "Unable to set value from Chaos Experiment due to error: %v", err)
@@ -155,9 +163,9 @@ func (expDetails *ExperimentDetails) SetValueFromChaosResources(engineDetails *E
155163
// SetValueFromChaosRunner fetch the engineUID from ChaosRunner
156164
func (engine *EngineDetails) SetValueFromChaosRunner(clients ClientSets) error {
157165
runnerName := engine.Name + "-runner"
158-
runnerSpec, err := clients.KubeClient.CoreV1().Pods(engine.AppNamespace).Get(runnerName, metav1.GetOptions{})
166+
runnerSpec, err := clients.KubeClient.CoreV1().Pods(engine.EngineNamespace).Get(runnerName, metav1.GetOptions{})
159167
if err != nil {
160-
return errors.Wrapf(err, "Unable to get runner pod in namespace: %v", engine.AppNamespace)
168+
return errors.Wrapf(err, "Unable to get runner pod in namespace: %v", engine.EngineNamespace)
161169
}
162170
chaosUID := runnerSpec.Labels["chaosUID"]
163171
if chaosUID != "" {
@@ -167,3 +175,13 @@ func (engine *EngineDetails) SetValueFromChaosRunner(clients ClientSets) error {
167175
}
168176
return nil
169177
}
178+
179+
func (expDetails *ExperimentDetails) SetValueFromChaosEngine(engine *EngineDetails, clients ClientSets) error {
180+
181+
chaosEngine, err := engine.GetChaosEngine(clients)
182+
if err != nil {
183+
return errors.Wrapf(err, "Unable to get chaosEngine in namespace: %s", engine.EngineNamespace)
184+
}
185+
expDetails.Namespace = chaosEngine.Namespace
186+
return nil
187+
}

pkg/utils/getOSenv.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,16 @@ func GetOsEnv(engineDetails *EngineDetails) {
1010
experimentList := os.Getenv("EXPERIMENT_LIST")
1111
engineDetails.Name = os.Getenv("CHAOSENGINE")
1212
engineDetails.AppLabel = os.Getenv("APP_LABEL")
13-
engineDetails.AppNamespace = os.Getenv("APP_NAMESPACE")
13+
engineDetails.EngineNamespace = os.Getenv("CHAOS_NAMESPACE")
1414
engineDetails.AppKind = os.Getenv("APP_KIND")
1515
engineDetails.SvcAccount = os.Getenv("CHAOS_SVC_ACC")
1616
engineDetails.ClientUUID = os.Getenv("CLIENT_UUID")
1717
engineDetails.Experiments = strings.Split(experimentList, ",")
1818
engineDetails.AuxiliaryAppInfo = os.Getenv("AUXILIARY_APPINFO")
19+
20+
//TODO: Use engineDetails.AdminMode, to change behaviour of chaos-runner
21+
// engineDetails.AdminMode = false
22+
// if os.Getenv("ADMIN_MODE") == "true" {
23+
// engineDetails.AdminMode = true
24+
// }
1925
}

pkg/utils/initialPatchEngine.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ func (expStatus *ExperimentStatus) InitialPatchEngine(engineDetails EngineDetail
1818
return errors.Wrapf(err, "Unable to get ChaosEngine, due to error: %v", err)
1919
}
2020
expEngine.Status.Experiments = append(expEngine.Status.Experiments, v1alpha1.ExperimentStatuses(*expStatus))
21-
_, updateErr := clients.LitmusClient.LitmuschaosV1alpha1().ChaosEngines(engineDetails.AppNamespace).Update(expEngine)
21+
_, updateErr := clients.LitmusClient.LitmuschaosV1alpha1().ChaosEngines(engineDetails.EngineNamespace).Update(expEngine)
2222
if updateErr != nil {
23-
return errors.Wrapf(err, "Unable to update ChaosEngine in namespace: %v, due to error: %v", engineDetails.AppNamespace, err)
23+
return errors.Wrapf(err, "Unable to update ChaosEngine in namespace: %v, due to error: %v", engineDetails.EngineNamespace, err)
2424
}
2525
}
2626
return nil

pkg/utils/recorder.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ import (
1111
litmuschaosScheme "github.com/litmuschaos/chaos-operator/pkg/client/clientset/versioned/scheme"
1212
)
1313

14-
func generateEventRecorder(kubeClient *kubernetes.Clientset) (record.EventRecorder, error) {
14+
func generateEventRecorder(kubeClient *kubernetes.Clientset, componentName string) (record.EventRecorder, error) {
1515
err := litmuschaosScheme.AddToScheme(scheme.Scheme)
1616
if err != nil {
1717
return nil, err
1818
}
1919
eventBroadcaster := record.NewBroadcaster()
2020
eventBroadcaster.StartRecordingToSink(&typedcorev1.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")})
21-
recorder := eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: "chaos-runner"})
21+
recorder := eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: componentName})
2222
return recorder, nil
2323
}
2424

@@ -28,7 +28,7 @@ func NewEventRecorder(clients ClientSets, engineDetails EngineDetails) (*Recorde
2828
if err != nil {
2929
return &Recorder{}, err
3030
}
31-
eventBroadCaster, err := generateEventRecorder(clients.KubeClient)
31+
eventBroadCaster, err := generateEventRecorder(clients.KubeClient, engineDetails.Name+"-runner")
3232
if err != nil {
3333
return &Recorder{}, err
3434
}

pkg/utils/types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ type EngineDetails struct {
2424
AppLabel string
2525
SvcAccount string
2626
AppKind string
27-
AppNamespace string
2827
ClientUUID string
2928
AuxiliaryAppInfo string
3029
UID string
30+
EngineNamespace string
3131
}
3232

3333
// ExperimentDetails is for collecting all the experiment-related details

pkg/utils/watchJob.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ func GetJobStatus(experimentDetails *ExperimentDetails, clients ClientSets) (int
3737

3838
// GetChaosEngine returns chaosEngine Object
3939
func (engineDetails EngineDetails) GetChaosEngine(clients ClientSets) (*v1alpha1.ChaosEngine, error) {
40-
expEngine, err := clients.LitmusClient.LitmuschaosV1alpha1().ChaosEngines(engineDetails.AppNamespace).Get(engineDetails.Name, metav1.GetOptions{})
40+
expEngine, err := clients.LitmusClient.LitmuschaosV1alpha1().ChaosEngines(engineDetails.EngineNamespace).Get(engineDetails.Name, metav1.GetOptions{})
4141
if err != nil {
4242

43-
return nil, errors.Wrapf(err, "Unable to get ChaosEngine Name: %v, in namespace: %v, due to error: %v", engineDetails.Name, engineDetails.AppNamespace, err)
43+
return nil, errors.Wrapf(err, "Unable to get ChaosEngine Name: %v, in namespace: %v, due to error: %v", engineDetails.Name, engineDetails.EngineNamespace, err)
4444
}
4545
return expEngine, nil
4646
}
@@ -57,7 +57,7 @@ func (expStatus *ExperimentStatus) PatchChaosEngineStatus(engineDetails EngineDe
5757
return errors.Wrapf(err, "Unable to find the status for JobName: %v in ChaosEngine: %v", expStatus.Name, expEngine.Name)
5858
}
5959
expEngine.Status.Experiments[jobIndex] = v1alpha1.ExperimentStatuses(*expStatus)
60-
if _, err := clients.LitmusClient.LitmuschaosV1alpha1().ChaosEngines(engineDetails.AppNamespace).Update(expEngine); err != nil {
60+
if _, err := clients.LitmusClient.LitmuschaosV1alpha1().ChaosEngines(engineDetails.EngineNamespace).Update(expEngine); err != nil {
6161
return err
6262
}
6363
return nil
@@ -78,7 +78,7 @@ func (engineDetails EngineDetails) WatchJobForCompletion(experiment *ExperimentD
7878
var expStatus ExperimentStatus
7979
expStatus.AwaitedExperimentStatus(experiment)
8080
if err := expStatus.PatchChaosEngineStatus(engineDetails, clients); err != nil {
81-
return errors.Wrapf(err, "Unable to patch ChaosEngine in namespace: %v, due to error: %v", engineDetails.AppNamespace, err)
81+
return errors.Wrapf(err, "Unable to patch ChaosEngine in namespace: %v, due to error: %v", engineDetails.EngineNamespace, err)
8282
}
8383
time.Sleep(5 * time.Second)
8484

@@ -96,9 +96,9 @@ func GetResultName(engineName string, experimentName string) string {
9696
func (experimentDetails *ExperimentDetails) GetChaosResult(engineDetails EngineDetails, clients ClientSets) (*v1alpha1.ChaosResult, error) {
9797

9898
resultName := GetResultName(engineDetails.Name, experimentDetails.Name)
99-
expResult, err := clients.LitmusClient.LitmuschaosV1alpha1().ChaosResults(engineDetails.AppNamespace).Get(resultName, metav1.GetOptions{})
99+
expResult, err := clients.LitmusClient.LitmuschaosV1alpha1().ChaosResults(engineDetails.EngineNamespace).Get(resultName, metav1.GetOptions{})
100100
if err != nil {
101-
return nil, errors.Wrapf(err, "Unable to get ChaosResult Name: %v in namespace: %v, due to error: %v", resultName, engineDetails.AppNamespace, err)
101+
return nil, errors.Wrapf(err, "Unable to get ChaosResult Name: %v in namespace: %v, due to error: %v", resultName, engineDetails.EngineNamespace, err)
102102
}
103103
return expResult, nil
104104
}
@@ -133,7 +133,7 @@ func (engineDetails EngineDetails) DeleteJobAccordingToJobCleanUpPolicy(experime
133133
klog.V(0).Infoln("Will delete the job as jobCleanPolicy is set to : " + expEngine.Spec.JobCleanUpPolicy)
134134

135135
deletePolicy := metav1.DeletePropagationForeground
136-
deleteJob := clients.KubeClient.BatchV1().Jobs(engineDetails.AppNamespace).Delete(experiment.JobName, &metav1.DeleteOptions{
136+
deleteJob := clients.KubeClient.BatchV1().Jobs(experiment.Namespace).Delete(experiment.JobName, &metav1.DeleteOptions{
137137
PropagationPolicy: &deletePolicy,
138138
})
139139
if deleteJob != nil {

0 commit comments

Comments
 (0)