mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 18:15:51 +00:00
155 lines
4.0 KiB
Go
155 lines
4.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"github.com/cubefs/cubefs/proto"
|
|
"github.com/cubefs/cubefs/sdk/master"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
const (
|
|
cmdVersionUse = "version [COMMAND]"
|
|
cmdVersionShort = "Manage cluster volumes versions"
|
|
cmdVersionCreateShort = "create volume version"
|
|
cmdVersionDelShort = "del volume version"
|
|
cmdVersionListShort = "list volume version"
|
|
cmdVersionSetStrategyShort = "set volume version strategy"
|
|
)
|
|
|
|
func newVersionCmd(client *master.MasterClient) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: cmdVersionUse,
|
|
Short: cmdVersionShort,
|
|
Args: cobra.MinimumNArgs(0),
|
|
Aliases: []string{"version"},
|
|
}
|
|
cmd.AddCommand(
|
|
newVersionCreateCmd(client),
|
|
newVersionDelCmd(client),
|
|
newVersionListCmd(client),
|
|
newVersionStrategyCmd(client),
|
|
)
|
|
return cmd
|
|
}
|
|
|
|
func newVersionCreateCmd(client *master.MasterClient) *cobra.Command {
|
|
var optKeyword string
|
|
cmd := &cobra.Command{
|
|
Use: CliFlagVersionCreate,
|
|
Short: cmdVersionCreateShort,
|
|
Aliases: []string{"create"},
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) == 0 {
|
|
stdout("need volume name\n")
|
|
return
|
|
}
|
|
var verList *proto.VolVersionInfoList
|
|
volumeName := args[0]
|
|
var err error
|
|
defer func() {
|
|
errout(err)
|
|
}()
|
|
if _, err = client.AdminAPI().CreateVersion(volumeName); err != nil {
|
|
return
|
|
}
|
|
stdout("create command be received by master and it's a asynchronous command,now try get the latest list\n")
|
|
if verList, err = client.AdminAPI().GetVerList(volumeName); err != nil {
|
|
return
|
|
}
|
|
stdout("%v\n\n", volumeVersionTableHeader)
|
|
for id, ver := range verList.VerList {
|
|
if id == len(verList.VerList)-1 {
|
|
break
|
|
}
|
|
stdout("%v\n", formatVerInfoTableRow(ver))
|
|
}
|
|
},
|
|
}
|
|
cmd.Flags().StringVar(&optKeyword, "keyword", "", "Specify keyword of volume name to filter")
|
|
return cmd
|
|
}
|
|
|
|
func newVersionListCmd(client *master.MasterClient) *cobra.Command {
|
|
var optKeyword string
|
|
cmd := &cobra.Command{
|
|
Use: CliFlagVersionList,
|
|
Short: cmdVersionListShort,
|
|
Aliases: []string{"create"},
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) == 0 {
|
|
stdout("need volume name\n")
|
|
return
|
|
}
|
|
var (
|
|
volumeName = args[0]
|
|
verList *proto.VolVersionInfoList
|
|
err error
|
|
)
|
|
defer func() {
|
|
errout(err)
|
|
}()
|
|
if verList, err = client.AdminAPI().GetVerList(volumeName); err != nil {
|
|
return
|
|
}
|
|
stdout("%v\n", volumeVersionTableHeader)
|
|
for id, ver := range verList.VerList {
|
|
if id == len(verList.VerList)-1 {
|
|
break
|
|
}
|
|
stdout("%v\n", formatVerInfoTableRow(ver))
|
|
}
|
|
},
|
|
}
|
|
cmd.Flags().StringVar(&optKeyword, "keyword", "", "Specify keyword of volume name to filter")
|
|
return cmd
|
|
}
|
|
|
|
func newVersionDelCmd(client *master.MasterClient) *cobra.Command {
|
|
var optKeyword string
|
|
cmd := &cobra.Command{
|
|
Use: CliFlagVersionDel,
|
|
Short: cmdVersionDelShort,
|
|
Aliases: []string{"create"},
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) <= 1 {
|
|
stdout("USAGE:./cfs-cli version verDel volName verSeq\n")
|
|
return
|
|
}
|
|
|
|
var err error
|
|
defer func() {
|
|
errout(err)
|
|
}()
|
|
if err = client.AdminAPI().DeleteVersion(args[0], args[1]); err != nil {
|
|
return
|
|
}
|
|
},
|
|
}
|
|
cmd.Flags().StringVar(&optKeyword, "keyword", "", "Specify keyword of volume name to filter")
|
|
return cmd
|
|
}
|
|
|
|
func newVersionStrategyCmd(client *master.MasterClient) *cobra.Command {
|
|
var optKeyword string
|
|
cmd := &cobra.Command{
|
|
Use: CliFlagVersionSetStrategy,
|
|
Short: cmdVersionSetStrategyShort,
|
|
Aliases: []string{"create"},
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
if len(args) <= 3 {
|
|
stdout("USAGE:./cfs-cli version verSetStrategy volName periodic count enable isForce\n")
|
|
return
|
|
}
|
|
|
|
var err error
|
|
defer func() {
|
|
errout(err)
|
|
}()
|
|
if err = client.AdminAPI().SetStrategy(args[0], args[1], args[2], args[3], args[4]); err != nil {
|
|
return
|
|
}
|
|
},
|
|
}
|
|
cmd.Flags().StringVar(&optKeyword, "keyword", "", "Specify keyword of volume name to filter")
|
|
return cmd
|
|
}
|