From 0b4edc2e3dbd3775335e3e7acfeda796697e25c0 Mon Sep 17 00:00:00 2001 From: peng9808 Date: Mon, 1 Jul 2024 13:50:14 +0800 Subject: [PATCH] Signed-off-by: peng9808 Inject dataload-init into the Admission module,Fixed the issue that changing the loop variable does not take effect Signed-off-by: peng9808 --- controllers/cluster_controller.go | 7 +++ helm/operator/.relok8s-images.yaml | 2 +- helm/operator/values.yaml | 3 + .../admission_controller.go | 55 +++++++++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) diff --git a/controllers/cluster_controller.go b/controllers/cluster_controller.go index a6d082b5..8d97159b 100644 --- a/controllers/cluster_controller.go +++ b/controllers/cluster_controller.go @@ -197,6 +197,13 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct } } + if newInstance.Spec.AdmissionController.Disable { + err = admissioncontroller.NewAdmissionControllerMaintainer(r.Client, newInstance).Uninstall() + if err != nil { + return ctrl.Result{}, err + } + } + if !newInstance.Spec.AdmissionController.Disable { newInstance, err = admissioncontroller.NewAdmissionControllerMaintainer(r.Client, newInstance).Ensure() if err != nil { diff --git a/helm/operator/.relok8s-images.yaml b/helm/operator/.relok8s-images.yaml index 66f1dc1b..8e5ef916 100644 --- a/helm/operator/.relok8s-images.yaml +++ b/helm/operator/.relok8s-images.yaml @@ -33,5 +33,5 @@ - "{{ .global.hwameistorImageRegistry }}/{{ .drbdFocal.imageRepository }}:{{ .ha.drbdVersion }}" - "{{ .global.hwameistorImageRegistry }}/{{ .dataLoadManager.imageRepository }}:{{ .dataLoadManager.tag }}" - "{{ .global.hwameistorImageRegistry }}/{{ .dataSetManager.imageRepository }}:{{ .dataSetManager.tag }}" - +- "{{ .global.hwameistorImageRegistry }}/{{ .dataLoadInit.imageRepository }}:{{ .dataLoadInit.tag }}" # - "{{ .global.hwameistorImageRegistry }}/{{ .ha.imageRepoOwner }}/drbd9-jammy:v9.1.11" diff --git a/helm/operator/values.yaml b/helm/operator/values.yaml index 9baea02e..1d3978a6 100644 --- a/helm/operator/values.yaml +++ b/helm/operator/values.yaml @@ -179,6 +179,9 @@ dataSetManager: imageRepository: hwameistor/dataset-manager tag: v0.0.1 +dataLoadInit: + imageRepository: hwameistor/dataload-init + tag: v0.0.1 #datasetDefaultPoolClass: NVMe > SSD > HDD diff --git a/pkg/install/admissioncontroller/admission_controller.go b/pkg/install/admissioncontroller/admission_controller.go index 46e537d6..f4ae8e2f 100644 --- a/pkg/install/admissioncontroller/admission_controller.go +++ b/pkg/install/admissioncontroller/admission_controller.go @@ -3,6 +3,7 @@ package admissioncontroller import ( "context" "errors" + "fmt" "reflect" "time" @@ -133,6 +134,10 @@ func setAdmissionControllerContainers(clusterInstance *hwameistoriov1alpha1.Clus } imageSpec := clusterInstance.Spec.AdmissionController.Controller.Image container.Image = imageSpec.Registry + "/" + imageSpec.Repository + ":" + imageSpec.Tag + + dataLoadManager := clusterInstance.Spec.DataLoadManager.DataLoadManagerContainer.Image + dataloadImageValue := dataLoadManager.Registry + "/" + "hwameistor/dataload-init" + ":" + dataLoadManager.Tag + container.Env = append(container.Env, []corev1.EnvVar{ { Name: "WEBHOOK_NAMESPACE", @@ -142,6 +147,10 @@ func setAdmissionControllerContainers(clusterInstance *hwameistoriov1alpha1.Clus Name: "FAILURE_POLICY", Value: clusterInstance.Spec.AdmissionController.FailurePolicy, }, + { + Name: "DATALOADER_IMAGE", + Value: dataloadImageValue, + }, }...) } admissionController.Spec.Template.Spec.Containers[i] = container @@ -169,6 +178,22 @@ func needOrNotToUpdateAdmissionController(cluster *hwameistoriov1alpha1.Cluster, admissionControllerToUpdate.Spec.Template.Spec.Containers[i] = container needToUpdate = true } + for k, envVar := range container.Env { + if envVar.Name == "FAILURE_POLICY" { + if envVar.Value != cluster.Spec.AdmissionController.FailurePolicy { + admissionControllerToUpdate.Spec.Template.Spec.Containers[i].Env[k].Value = cluster.Spec.AdmissionController.FailurePolicy + needToUpdate = true + } + } + if envVar.Name == "DATALOADER_IMAGE" { + dataLoadManager := cluster.Spec.DataLoadManager.DataLoadManagerContainer.Image + dataloadImageValue := dataLoadManager.Registry + "/" + "hwameistor/dataload-init" + ":" + dataLoadManager.Tag + if envVar.Value != dataloadImageValue { + admissionControllerToUpdate.Spec.Template.Spec.Containers[i].Env[k].Value = dataloadImageValue + needToUpdate = true + } + } + } } } @@ -273,6 +298,36 @@ func (m *AdmissionControllerMaintainer) Ensure() (*hwameistoriov1alpha1.Cluster, return newClusterInstance, nil } +func (m *AdmissionControllerMaintainer) Uninstall() error { + key := types.NamespacedName{ + Namespace: admissionController.Namespace, + Name: admissionController.Name, + } + var gottenAdmissionController appsv1.Deployment + if err := m.Client.Get(context.TODO(), key, &gottenAdmissionController); err != nil { + if apierrors.IsNotFound(err) { + log.WithError(err) + return nil + } else { + log.Errorf("Get AdmissionController err: %v", err) + return err + } + } else { + for _, reference := range gottenAdmissionController.OwnerReferences { + if reference.Name == m.ClusterInstance.Name { + if err = m.Client.Delete(context.TODO(), &gottenAdmissionController); err != nil { + return err + } else { + return nil + } + } + } + } + err := fmt.Errorf("Admission Owner is not %s", m.ClusterInstance.Name) + log.WithError(err) + return nil +} + // ensure hwameistor-admission-ca is generated before the admission controller running func (m *AdmissionControllerMaintainer) ensureAdmissionCA() error { // skip generation if the ca already exists