diff --git a/pkg/ctl/cluster/cluster.go b/pkg/ctl/cluster/cluster.go index 6d5bbf929..17f4cad81 100644 --- a/pkg/ctl/cluster/cluster.go +++ b/pkg/ctl/cluster/cluster.go @@ -15,6 +15,7 @@ func Command(flagGrouping *cmdutils.FlagGrouping) *cobra.Command { cmdutils.AddVerbCmd(flagGrouping, resourceCmd, createClusterCmd) cmdutils.AddVerbCmd(flagGrouping, resourceCmd, listClustersCmd) cmdutils.AddVerbCmd(flagGrouping, resourceCmd, getClusterDataCmd) + cmdutils.AddVerbCmd(flagGrouping, resourceCmd, deleteClusterCmd) return resourceCmd } diff --git a/pkg/ctl/cluster/delete.go b/pkg/ctl/cluster/delete.go new file mode 100644 index 000000000..dc003728a --- /dev/null +++ b/pkg/ctl/cluster/delete.go @@ -0,0 +1,62 @@ +package cluster + +import ( + "github.com/streamnative/pulsarctl/pkg/cmdutils" + "github.com/streamnative/pulsarctl/pkg/pulsar" +) + +func deleteClusterCmd(vc *cmdutils.VerbCmd) { + desc := pulsar.LongDescription{} + desc.CommandUsedFor = "This command is used for deleting an existing cluster." + desc.CommandPermission = "This command requires super-user permissions." + + var examples []pulsar.Example + delete := pulsar.Example{ + Desc: "deleting the cluster named ", + Command: "pulsarctl clusters delete ", + } + examples = append(examples, delete) + desc.CommandExamples = examples + + var out []pulsar.Output + successOut := pulsar.Output{ + Desc: "normal output", + Out: "Cluster delete successfully.", + } + out = append(out, successOut) + + failOut := pulsar.Output{ + Desc: "output of doesn't specified a cluster name", + Out: "[✖] only one argument is allowed to be used as a name", + } + out = append(out, failOut) + + clusterNotExist := pulsar.Output{ + Desc: "output of cluster doesn't exist", + Out: "[✖] code: 404 reason: Cluster does not exist", + } + out = append(out, clusterNotExist) + + desc.CommandOutput = out + + vc.SetDescription( + "delete", + "Delete an existing cluster", + desc.ToString(), + "delete") + + vc.SetRunFuncWithNameArg(func() error { + return doDeleteCluster(vc) + }) +} + +func doDeleteCluster(vc *cmdutils.VerbCmd) error { + clusterName := vc.NameArg + + admin := cmdutils.NewPulsarClient() + err := admin.Clusters().Delete(clusterName) + if err == nil { + vc.Command.Printf("Cluster %s delete successfully", clusterName) + } + return err +} diff --git a/pkg/ctl/cluster/delete_test.go b/pkg/ctl/cluster/delete_test.go new file mode 100644 index 000000000..8d13236ef --- /dev/null +++ b/pkg/ctl/cluster/delete_test.go @@ -0,0 +1,29 @@ +package cluster + +import ( + "github.com/stretchr/testify/assert" + "strings" + "testing" +) + +func TestDeleteClusterCmd(t *testing.T) { + args := []string{"add", "test"} + _, err := TestClusterCommands(createClusterCmd, args) + assert.Nil(t, err) + + args = []string{"list"} + out, err := TestClusterCommands(listClustersCmd, args) + assert.Nil(t, err) + clusters := out.String() + assert.True(t, strings.Contains(clusters, "test")) + + args = []string{"delete", "test"} + _, err = TestClusterCommands(deleteClusterCmd, args) + assert.Nil(t, err) + + args = []string{"list"} + out, err = TestClusterCommands(listClustersCmd, args) + assert.Nil(t, err) + clusters = out.String() + assert.False(t, strings.Contains(clusters, "test")) +} diff --git a/pkg/ctl/cluster/get.go b/pkg/ctl/cluster/get.go index 0a4fb6f7f..ea5dea32e 100644 --- a/pkg/ctl/cluster/get.go +++ b/pkg/ctl/cluster/get.go @@ -10,7 +10,7 @@ import ( func getClusterDataCmd(vc *cmdutils.VerbCmd) { desc := pulsar.LongDescription{} desc.CommandUsedFor = "This command is used for getting the cluster data of the specified cluster." - desc.CommandPermission = "This command requires super-user permissions." + desc.CommandPermission = "This command requires super-user permission." var examples []pulsar.Example get := pulsar.Example{ @@ -36,7 +36,7 @@ func getClusterDataCmd(vc *cmdutils.VerbCmd) { failOut := pulsar.Output{ Desc: "output of doesn't specified a cluster name", - Out: "only one argument is allowed to be used as a name", + Out: "[✖] only one argument is allowed to be used as a name", } out = append(out, failOut)