mirror of
https://github.com/kubevela/kubevela.git
synced 2026-05-04 00:17:19 +00:00
check clusters parameter of addon will uninstall from clusters
Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>
This commit is contained in:
2
go.mod
2
go.mod
@@ -255,6 +255,7 @@ require (
|
||||
github.com/prometheus/common v0.32.1 // indirect
|
||||
github.com/prometheus/procfs v0.7.3 // indirect
|
||||
github.com/protocolbuffers/txtpbfmt v0.0.0-20220428173112-74888fd59c2b // indirect
|
||||
github.com/r3labs/diff/v3 v3.0.0 // indirect
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/rubenv/sql-migrate v0.0.0-20210614095031-55d5740dbbcc // indirect
|
||||
github.com/russross/blackfriday v1.6.0 // indirect
|
||||
@@ -267,6 +268,7 @@ require (
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.0 // indirect
|
||||
github.com/tjfoc/gmsm v1.3.2 // indirect
|
||||
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
|
||||
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
||||
github.com/xdg-go/scram v1.0.2 // indirect
|
||||
github.com/xdg-go/stringprep v1.0.2 // indirect
|
||||
|
||||
4
go.sum
4
go.sum
@@ -1779,6 +1779,8 @@ github.com/quasilyte/go-ruleguard/dsl v0.3.10/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQ
|
||||
github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc=
|
||||
github.com/quasilyte/go-ruleguard/rules v0.0.0-20210428214800-545e0d2e0bf7/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50=
|
||||
github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0=
|
||||
github.com/r3labs/diff/v3 v3.0.0 h1:ZhPwNxn9gW5WLPBV9GCYaVbMdLOSmJ0DeKdCiSbOLUI=
|
||||
github.com/r3labs/diff/v3 v3.0.0/go.mod h1:wCkTySAiDnZao1sZrVTDIzuzgLZ+cNPGn3LC8DlIg5g=
|
||||
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
|
||||
github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc=
|
||||
@@ -1989,6 +1991,8 @@ github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmF
|
||||
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
|
||||
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
|
||||
github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
|
||||
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
|
||||
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
|
||||
github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
|
||||
github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
|
||||
github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
|
||||
|
||||
@@ -70,18 +70,16 @@ const (
|
||||
|
||||
var enabledAddonColor = color.New(color.Bold, color.FgGreen)
|
||||
|
||||
var forceDisable bool
|
||||
var addonVersion string
|
||||
|
||||
var addonClusters string
|
||||
|
||||
var verboseStatus bool
|
||||
|
||||
var skipValidate bool
|
||||
|
||||
var overrideDefs bool
|
||||
|
||||
var dryRun bool
|
||||
var (
|
||||
forceDisable bool
|
||||
addonVersion string
|
||||
addonClusters string
|
||||
verboseStatus bool
|
||||
skipValidate bool
|
||||
overrideDefs bool
|
||||
dryRun bool
|
||||
skipCheckUninstallFromClusters bool
|
||||
)
|
||||
|
||||
// NewAddonCommand create `addon` command
|
||||
func NewAddonCommand(c common.Args, order string, ioStreams cmdutil.IOStreams) *cobra.Command {
|
||||
@@ -189,6 +187,11 @@ func NewAddonEnableCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Com
|
||||
return errors.Wrapf(err, "directory %s is invalid", addonOrDir)
|
||||
}
|
||||
name = filepath.Base(abs)
|
||||
if !skipCheckUninstallFromClusters {
|
||||
if err := checkUninstallFromClusters(ctx, k8sClient, name, addonArgs); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
err = enableAddonByLocal(ctx, name, addonOrDir, k8sClient, dc, config, addonArgs)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -197,7 +200,11 @@ func NewAddonEnableCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Com
|
||||
if filepath.IsAbs(addonOrDir) || strings.HasPrefix(addonOrDir, ".") || strings.HasSuffix(addonOrDir, "/") {
|
||||
return fmt.Errorf("addon directory %s not found in local", addonOrDir)
|
||||
}
|
||||
|
||||
if !skipCheckUninstallFromClusters {
|
||||
if err := checkUninstallFromClusters(ctx, k8sClient, name, addonArgs); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
err = enableAddon(ctx, k8sClient, dc, config, name, addonVersion, addonArgs)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -217,6 +224,7 @@ func NewAddonEnableCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Com
|
||||
cmd.Flags().BoolVarP(&skipValidate, "skip-version-validating", "s", false, "skip validating system version requirement")
|
||||
cmd.Flags().BoolVarP(&overrideDefs, "override-definitions", "", false, "override existing definitions if conflict with those contained in this addon")
|
||||
cmd.Flags().BoolVarP(&dryRun, FlagDryRun, "", false, "render all yaml files out without real execute it")
|
||||
cmd.Flags().BoolVarP(&skipCheckUninstallFromClusters, "skip-check-uninstall-clusters", "", false, "skip check 'clusters' parameters whether uninstall addon from clusters")
|
||||
return cmd
|
||||
}
|
||||
|
||||
@@ -1201,3 +1209,51 @@ func splitSpecifyRegistry(name string) (string, string, error) {
|
||||
return "", "", fmt.Errorf("invalid addon name, you should specify name only <addonName> or with registry as prefix <registryName>/<addonName>")
|
||||
}
|
||||
}
|
||||
|
||||
func checkUninstallFromClusters(ctx context.Context, k8sClient client.Client, addonName string, args map[string]interface{}) error {
|
||||
status, err := pkgaddon.GetAddonStatus(ctx, k8sClient, addonName)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to check addon is enabled err: %w", err)
|
||||
}
|
||||
if status.AddonPhase == statusDisabled {
|
||||
return nil
|
||||
}
|
||||
if _, ok := args["clusters"]; !ok {
|
||||
return nil
|
||||
}
|
||||
cList, ok := args["clusters"].([]interface{})
|
||||
if !ok {
|
||||
return fmt.Errorf("clusters parameter must be a list of string")
|
||||
}
|
||||
|
||||
clusters := map[string]struct{}{}
|
||||
for _, c := range cList {
|
||||
clusterName := c.(string)
|
||||
clusters[clusterName] = struct{}{}
|
||||
}
|
||||
var disableClusters, installedClusters []string
|
||||
for c := range status.Clusters {
|
||||
if _, ok := clusters[c]; !ok {
|
||||
disableClusters = append(disableClusters, c)
|
||||
}
|
||||
installedClusters = append(installedClusters, c)
|
||||
}
|
||||
fmt.Println(color.New(color.FgRed).Sprintf("Previously, the addon was installed on clusters %s, but this operation will disable the addon from clusters: %s \n", generateClustersInfo(installedClusters), generateClustersInfo(disableClusters)))
|
||||
input := NewUserInput()
|
||||
if !input.AskBool("Do you want continue?", &UserInputOptions{AssumeYes: false}) {
|
||||
return fmt.Errorf("operation abort")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func generateClustersInfo(clusters []string) string {
|
||||
ret := "["
|
||||
for i, cluster := range clusters {
|
||||
ret += cluster
|
||||
if i < len(clusters)-1 {
|
||||
ret += ","
|
||||
}
|
||||
}
|
||||
ret += "]"
|
||||
return ret
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user