106 lines
2.5 KiB
Go
106 lines
2.5 KiB
Go
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
|
|
}
|