package pubshards import ( "fmt" "github.com/chzyer/readline" "github.com/spf13/cobra" cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1" jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types" "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd" "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd/userspace" ) func init() { var opt createOption c := &cobra.Command{ Use: "create", Short: "create a new pubshards", Args: cobra.NoArgs, RunE: func(c *cobra.Command, args []string) error { ctx := cmd.GetCmdCtx(c) return create(c, ctx, opt, args) }, } PubShardsCmd.AddCommand(c) } type createOption struct { } func create(c *cobra.Command, ctx *cmd.CommandContext, opt createOption, args []string) error { rl, err := readline.New("> ") if err != nil { return err } defer rl.Close() var blder userspace.UserSpaceBuilder name := cmd.ReadString(rl, "请输入共享分片存储名称") stgTypes := []string{"Local", "OBS", "OSS", "COS", "EFile", "S3"} idx := cmd.SelectOne(rl, "请选择共享分片存储的存储服务类型", stgTypes) switch stgTypes[idx] { case "Local": blder.AskLocal(rl) case "OBS": blder.AskOBS(rl) case "OSS": blder.AskOSS(rl) case "COS": blder.AskCOS(rl) case "EFile": blder.AskEFile(rl) case "S3": blder.AskS3(rl) } blder.AskShardStore(rl, true) blder.AskWorkingDir(rl) hubID := cmd.ReadInt(rl, "请输入管理共享分片存储的工作组件ID") var pwd string for { pwd = string(cmd.ReadPassword(rl, "请输入共享分片存储的密码")) pwd2 := string(cmd.ReadPassword(rl, "请再次输入共享分片存储的密码")) if pwd == pwd2 { break } fmt.Println("两次输入的密码不一致,请重新输入") } resp, err := ctx.Client.PubShards().Create(cliapi.PubShardsCreate{ Name: name, Storage: blder.Storage, Credential: blder.Credential, ShardStore: *blder.ShardStore, Features: blder.Features, WorkingDir: blder.WorkingDir, Password: pwd, MasterHub: jcstypes.HubID(hubID), }) if err != nil { return err } fmt.Printf("创建共享分片存储成功, ID为: %v\n可将此ID和密码分发给其他人以加入共享分片存储\n", resp.PubShards.PubShardsID) if !cmd.ReadBool(rl, "是否要现在加入共享分片存储") { return nil } usName := cmd.ReadString(rl, "请输入新用户空间的名称") _, err = ctx.Client.PubShards().Join(cliapi.PubShardsJoin{ Name: usName, PubShardsID: resp.PubShards.PubShardsID, Password: pwd, }) if err != nil { return err } return nil }