Skip to content

Commit

Permalink
Added automatic uninstallation function
Browse files Browse the repository at this point in the history
Signed-off-by: peng9808 <[email protected]>
  • Loading branch information
peng9808 committed Jul 11, 2024
1 parent 3ede1ed commit 5c983a7
Show file tree
Hide file tree
Showing 19 changed files with 558 additions and 11 deletions.
4 changes: 3 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
FROM centos:7

RUN yum upgrade nss -y
RUN yum install -y epel-release && \
yum-config-manager --enable epel && \
yum --disablerepo=base upgrade nss -y

COPY ./vendor/github.com/hwameistor/hwameistor/deploy/crds /hwameistorcrds
COPY ./vendor/github.com/hwameistor/datastore/deploy/crds /hwameistorcrds
Expand Down
108 changes: 107 additions & 1 deletion controllers/cluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,17 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.LocalStorage.Disable {
err = localstorage.NewMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
return ctrl.Result{}, err
}
lscsicontroller.NewMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
return ctrl.Result{}, err
}
}

if !newInstance.Spec.LocalStorage.Disable {
newInstance, err = localstorage.NewMaintainer(r.Client, newInstance).Ensure()
if err != nil {
Expand Down Expand Up @@ -202,6 +213,10 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
if err != nil {
return ctrl.Result{}, err
}
err = admissioncontroller.NewAdmissionControllerServiceMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
return ctrl.Result{}, err
}
}

if !newInstance.Spec.AdmissionController.Disable {
Expand All @@ -228,6 +243,13 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.Scheduler.Disable {
if err := scheduler.NewSchedulerConfigMapMaintainer(r.Client, newInstance).Uninstall(); err != nil {
log.Errorf("Uninstall Scheduler err: %v", err)
return ctrl.Result{}, err
}
}

if !newInstance.Spec.Scheduler.Disable {
if err := scheduler.NewSchedulerConfigMapMaintainer(r.Client, newInstance).Ensure(); err != nil {
log.Errorf("Ensure Scheduler ConfigMap err: %v", err)
Expand Down Expand Up @@ -269,6 +291,13 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.Auditor.Disable {
err = auditor.NewAuditorMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
return ctrl.Result{}, err
}
}

if !newInstance.Spec.Auditor.Disable {
newInstance, err = auditor.NewAuditorMaintainer(r.Client, newInstance).Ensure()
if err != nil {
Expand All @@ -288,6 +317,13 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.FailoverAssistant.Disable {
err = failoverassistant.NewFailoverAssistantMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
return ctrl.Result{}, err
}
}

if !newInstance.Spec.FailoverAssistant.Disable {
newInstance, err = failoverassistant.NewFailoverAssistantMaintainer(r.Client, newInstance).Ensure()
if err != nil {
Expand All @@ -307,6 +343,14 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.PVCAutoResizer.Disable {
err = pvcautoresizer.NewPVCAutoResizerMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
log.Errorf("Uninstall failover-assistant err: %v", err)
return ctrl.Result{}, err
}
}

if !newInstance.Spec.PVCAutoResizer.Disable {
newInstance, err = pvcautoresizer.NewPVCAutoResizerMaintainer(r.Client, newInstance).Ensure()
if err != nil {
Expand All @@ -326,6 +370,14 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.LocalDiskActionController.Disable {
err = localdiskactioncontroller.NewActionControllerMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
log.Errorf("Uninstall LocalDiskActionController err: %v", err)
return ctrl.Result{}, err
}
}

if !newInstance.Spec.LocalDiskActionController.Disable {
newInstance, err = localdiskactioncontroller.NewActionControllerMaintainer(r.Client, newInstance).Ensure()
if err != nil {
Expand All @@ -345,6 +397,17 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.ApiServer.Disable {
err = apiserver.NewApiServerMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
return ctrl.Result{}, err
}
err = apiserver.NewApiServerServiceMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
return ctrl.Result{}, err
}
}

if !newInstance.Spec.ApiServer.Disable {
newInstance, err = apiserver.NewApiServerMaintainer(r.Client, newInstance).Ensure()
if err != nil {
Expand All @@ -369,6 +432,19 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.Exporter.Disable {
err = exporter.NewExporterMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
log.Errorf("Uninstall Exporter Collector err: %v", err)
return ctrl.Result{}, err
}
err = exporter.NewExporterServiceMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
log.Errorf("Uninstall Exporter Service err: %v", err)
return ctrl.Result{}, err
}
}

if !newInstance.Spec.Exporter.Disable {
newInstance, err = exporter.NewExporterMaintainer(r.Client, newInstance).Ensure()
if err != nil {
Expand All @@ -393,6 +469,20 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.UI.Disable {
err = ui.NewUIMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
log.Errorf("Uninstall UI Collector err: %v", err)
return ctrl.Result{}, err
}

err = ui.NewUIServiceMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
log.Errorf("Uninstall UI Service err: %v", err)
return ctrl.Result{}, err
}
}

if !newInstance.Spec.UI.Disable {
newInstance, err = ui.NewUIMaintainer(r.Client, newInstance).Ensure()
if err != nil {
Expand Down Expand Up @@ -420,10 +510,26 @@ func (r *ClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
}

if newInstance.Spec.DataLoadManager.Disable {
err = dataloadmanager.NewMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
log.Errorf("Uninstall DataLoadManager err: %v", err)
return ctrl.Result{}, err
}
}

if !newInstance.Spec.DataLoadManager.Disable {
newInstance, err = dataloadmanager.NewMaintainer(r.Client, newInstance).Ensure()
if err != nil {
log.Errorf("Ensure DataLoadManager err: %v", err)
log.Errorf("Uninstall DataLoadManager err: %v", err)
return ctrl.Result{}, err
}
}

if newInstance.Spec.DataSetManager.Disable {
err = datasetmanager.NewMaintainer(r.Client, newInstance).Uninstall()
if err != nil {
log.Errorf("Uninstall DataSetManager err: %v", err)
return ctrl.Result{}, err
}
}
Expand Down
7 changes: 3 additions & 4 deletions pkg/install/admissioncontroller/admission_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package admissioncontroller
import (
"context"
"errors"
"fmt"
"reflect"
"time"

Expand Down Expand Up @@ -300,7 +299,7 @@ func (m *AdmissionControllerMaintainer) Ensure() (*hwameistoriov1alpha1.Cluster,

func (m *AdmissionControllerMaintainer) Uninstall() error {
key := types.NamespacedName{
Namespace: admissionController.Namespace,
Namespace: m.ClusterInstance.Spec.TargetNamespace,
Name: admissionController.Name,
}
var gottenAdmissionController appsv1.Deployment
Expand All @@ -323,8 +322,8 @@ func (m *AdmissionControllerMaintainer) Uninstall() error {
}
}
}
err := fmt.Errorf("Admission Owner is not %s", m.ClusterInstance.Name)
log.WithError(err)

log.Errorf("AdmissionController Owner is not %s, can't delete. ", m.ClusterInstance.Name)
return nil
}

Expand Down
24 changes: 23 additions & 1 deletion pkg/install/admissioncontroller/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package admissioncontroller

import (
"context"

hwameistoriov1alpha1 "github.com/hwameistor/hwameistor-operator/api/v1alpha1"
log "github.com/sirupsen/logrus"
corev1 "k8s.io/api/core/v1"
Expand Down Expand Up @@ -70,3 +69,26 @@ func (m *AdmissionControllerServiceMaintainer) Ensure() error {

return nil
}

func (m *AdmissionControllerServiceMaintainer) Uninstall() error {
key := types.NamespacedName{
Namespace: m.ClusterInstance.Spec.TargetNamespace,
Name: admissionController.Name,
}
var gottenService corev1.Service
if err := m.Client.Get(context.TODO(), key, &gottenService); err != nil {
if errors.IsNotFound(err) {
log.WithError(err)
return nil
} else {
log.Errorf("Get AdmissionController Service err: %v", err)
return err
}
} else {
if err = m.Client.Delete(context.TODO(), &gottenService); err != nil {
return err
}
}

return nil
}
28 changes: 28 additions & 0 deletions pkg/install/apiserver/apiserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,34 @@ func (m *ApiServerMaintainer) Ensure() (*hwameistoriov1alpha1.Cluster, error) {
return newClusterInstance, nil
}

func (m *ApiServerMaintainer) Uninstall() error {
key := types.NamespacedName{
Namespace: m.ClusterInstance.Spec.TargetNamespace,
Name: apiServer.Name,
}
var gotten appsv1.Deployment
if err := m.Client.Get(context.TODO(), key, &gotten); err != nil {
if apierrors.IsNotFound(err) {
return nil
} else {
log.Errorf("get ApiServer err: %v", err)
return err
}
} else {
for _, reference := range gotten.OwnerReferences {
if reference.Name == m.ClusterInstance.Name {
if err = m.Client.Delete(context.TODO(), &gotten); err != nil {
return err
} else {
return nil
}
}
}
}
log.Errorf("ApiServer Owner is not %s", m.ClusterInstance.Name)
return nil
}

func FulfillApiServerSpec(clusterInstance *hwameistoriov1alpha1.Cluster) *hwameistoriov1alpha1.Cluster {
if clusterInstance.Spec.ApiServer == nil {
clusterInstance.Spec.ApiServer = &hwameistoriov1alpha1.ApiServerSpec{}
Expand Down
23 changes: 22 additions & 1 deletion pkg/install/apiserver/apiserver_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package apiserver

import (
"context"

hwameistoriov1alpha1 "github.com/hwameistor/hwameistor-operator/api/v1alpha1"
log "github.com/sirupsen/logrus"
corev1 "k8s.io/api/core/v1"
Expand Down Expand Up @@ -73,3 +72,25 @@ func (m *ApiServerServiceMaintainer) Ensure() error {

return nil
}

func (m *ApiServerServiceMaintainer) Uninstall() error {
key := types.NamespacedName{
Namespace: m.ClusterInstance.Spec.TargetNamespace,
Name: apiServerService.Name,
}
var gotten corev1.Service
if err := m.Client.Get(context.TODO(), key, &gotten); err != nil {
if errors.IsNotFound(err) {
return nil
} else {
log.Errorf("get ApiServer err: %v", err)
return err
}
} else {
if err = m.Client.Delete(context.TODO(), &gotten); err != nil {
return err
}
}

return nil
}
29 changes: 29 additions & 0 deletions pkg/install/auditor/auditor.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,3 +204,32 @@ func (m *AuditorMaintainer) Ensure() (*hwameistoriov1alpha1.Cluster, error) {
}
return newClusterInstance, nil
}

func (m *AuditorMaintainer) Uninstall() error {

key := types.NamespacedName{
Namespace: m.ClusterInstance.Spec.TargetNamespace,
Name: auditorTemplate.Name,
}
var gotten appsv1.Deployment
if err := m.Client.Get(context.TODO(), key, &gotten); err != nil {
if apierrors.IsNotFound(err) {
return nil
} else {
log.Errorf("Get hwameistor-auditor err: %v", err)
return err
}
} else {
for _, reference := range gotten.OwnerReferences {
if reference.Name == m.ClusterInstance.Name {
if err = m.Client.Delete(context.TODO(), &gotten); err != nil {
return err
} else {
return nil
}
}
}
}
log.Errorf("hwameistor-auditor Owner is not %s,can't delete ", m.ClusterInstance.Name)
return nil
}
Loading

0 comments on commit 5c983a7

Please sign in to comment.