This is an automated email from the ASF dual-hosted git repository.

zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git


The following commit(s) were added to refs/heads/master by this push:
     new 8aa1e91a [operator] Fix uninstalling panic
8aa1e91a is described below

commit 8aa1e91a92d932599a78eaf9feb581196e34dc47
Author: mfordjody <[email protected]>
AuthorDate: Tue Dec 24 13:45:01 2024 +0800

    [operator] Fix uninstalling panic
---
 operator/cmd/cluster/uninstall.go     |  2 +-
 operator/pkg/install/installer.go     | 35 ++++++++++++++++++++++++++++++++++-
 operator/pkg/uninstall/uninstaller.go |  7 ++++++-
 3 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/operator/cmd/cluster/uninstall.go 
b/operator/cmd/cluster/uninstall.go
index c799d9ba..2c85e5e0 100644
--- a/operator/cmd/cluster/uninstall.go
+++ b/operator/cmd/cluster/uninstall.go
@@ -65,7 +65,7 @@ func UninstallCmd(ctx cli.Context) *cobra.Command {
        return uicmd
 }
 
-func Uninstall(cmd *cobra.Command, ctx cli.Context, rootArgs *RootArgs, uiArgs 
*uninstallArgs) error {
+func Uninstall(cmd *cobra.Command, _ cli.Context, rootArgs *RootArgs, uiArgs 
*uninstallArgs) error {
        cl := clog.NewConsoleLogger(cmd.OutOrStdout(), cmd.ErrOrStderr(), 
installerScope)
        var kubeClient kube.CLIClient
        var err error
diff --git a/operator/pkg/install/installer.go 
b/operator/pkg/install/installer.go
index 782d8c71..b6e542b3 100644
--- a/operator/pkg/install/installer.go
+++ b/operator/pkg/install/installer.go
@@ -5,6 +5,8 @@ import (
        "fmt"
        "github.com/apache/dubbo-kubernetes/operator/pkg/component"
        "github.com/apache/dubbo-kubernetes/operator/pkg/manifest"
+       "github.com/apache/dubbo-kubernetes/operator/pkg/uninstall"
+       "github.com/apache/dubbo-kubernetes/operator/pkg/util"
        "github.com/apache/dubbo-kubernetes/operator/pkg/util/clog"
        "github.com/apache/dubbo-kubernetes/operator/pkg/util/dmultierr"
        "github.com/apache/dubbo-kubernetes/operator/pkg/util/progress"
@@ -74,6 +76,11 @@ func (i Installer) install(manifests []manifest.ManifestSet) 
error {
        if err := errors.ErrorOrNil(); err != nil {
                return err
        }
+
+       if err := i.prune(manifests); err != nil {
+               return fmt.Errorf("pruning: %v", err)
+       }
+       i.ProgressInfo.SetState(progress.StateComplete)
        return nil
 }
 
@@ -123,17 +130,43 @@ func (i Installer) prune(manifests 
[]manifest.ManifestSet) error {
        if i.DryRun {
                return nil
        }
+
        i.ProgressInfo.SetState(progress.StatePruning)
+
        excluded := map[component.Name]sets.String{}
        for _, c := range component.AllComponents {
                excluded[c.UserFacingName] = sets.New[string]()
        }
+
        for _, mfs := range manifests {
                for _, m := range mfs.Manifests {
                        excluded[mfs.Components].Insert(m.Hash())
                }
        }
-       return nil
+
+       var errs util.Errors
+       resources := uninstall.PrunedResourcesSchemas()
+       for _, gvk := range resources {
+               dc, err := i.Kube.DynamicClientFor(gvk, nil, "")
+               if err != nil {
+                       return err
+               }
+               objs, err := dc.List(context.Background(), metav1.ListOptions{})
+               if objs == nil {
+                       continue
+               }
+               for _, excluded := range excluded {
+                       for _, obj := range objs.Items {
+                               if excluded.Contains(manifest.ObjectHash(&obj)) 
{
+                                       continue
+                               }
+                               if err := uninstall.DeleteResource(i.Kube, 
i.DryRun, i.Logger, &obj); err != nil {
+                                       errs = append(errs, err)
+                               }
+                       }
+               }
+       }
+       return errs.ToErrors()
 }
 
 var componentDependencies = map[component.Name][]component.Name{
diff --git a/operator/pkg/uninstall/uninstaller.go 
b/operator/pkg/uninstall/uninstaller.go
index e420bb7f..dae48994 100644
--- a/operator/pkg/uninstall/uninstaller.go
+++ b/operator/pkg/uninstall/uninstaller.go
@@ -17,9 +17,9 @@ import (
 
 var (
        ClusterResources    = []schema.GroupVersionKind{}
+       ClusterCPResources  = []schema.GroupVersionKind{}
        AllClusterResources = append(ClusterResources,
                gvk.CustomResourceDefinition.K8s())
-       ClusterCPResources []schema.GroupVersionKind
 )
 
 func GetPrunedResources(clt kube.CLIClient, dopName, dopNamespace string, 
includeClusterResources bool) ([]*unstructured.UnstructuredList, error) {
@@ -58,6 +58,10 @@ func NamespacedResources() []schema.GroupVersionKind {
        return res
 }
 
+func PrunedResourcesSchemas() []schema.GroupVersionKind {
+       return append(NamespacedResources(), ClusterResources...)
+}
+
 func DeleteObjectsList(c kube.CLIClient, dryRun bool, log clog.Logger, 
objectsList []*unstructured.UnstructuredList) error {
        var errs util.Errors
        for _, ul := range objectsList {
@@ -76,6 +80,7 @@ func DeleteResource(clt kube.CLIClient, dryRun bool, log 
clog.Logger, obj *unstr
                log.LogAndPrintf("Not pruning object %s because of dry run.", 
name)
                return nil
        }
+
        c, err := clt.DynamicClientFor(obj.GroupVersionKind(), obj, "")
        if err != nil {
                return err

Reply via email to