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