|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- package userspace
-
- import (
- "fmt"
-
- "github.com/chzyer/readline"
- "github.com/inhies/go-bytesize"
- "github.com/spf13/cobra"
- "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"
- )
-
- func init() {
- cmd := cobra.Command{
- Use: "create",
- Short: "add a new cloud storage",
- Run: func(c *cobra.Command, args []string) {
- ctx := cmd.GetCmdCtx(c)
- create(c, ctx)
- },
- }
- UserSpaceCmd.AddCommand(&cmd)
- }
-
- func create(c *cobra.Command, ctx *cmd.CommandContext) {
-
- rl, err := readline.New("> ")
- if err != nil {
- fmt.Printf("初始化命令行失败: %v\n", err)
- return
- }
- defer rl.Close()
-
- var blder UserSpaceBuilder
-
- blder.Name = cmd.ReadString(rl, "请输入存储服务名称(Name)")
-
- stgTypes := []string{"Local", "OBS", "OSS", "COS", "EFile", "S3", "PubShards"}
- idx := cmd.SelectOne(rl, "请选择存储类型(StorageType)", 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)
- case "PubShards":
- blder.AskPubShards(rl)
- }
-
- blder.AskShardStore(rl, false)
-
- blder.AskWorkingDir(rl)
-
- _, err = ctx.Client.UserSpace().Create(blder.UserSpaceCreate)
- if err != nil {
- fmt.Printf("\033[31m保存配置失败: %v\033[0m", err)
- return
- }
- fmt.Println("\033[32m配置保存成功!\033[0m")
- }
-
- type UserSpaceBuilder struct {
- api.UserSpaceCreate
- }
-
- func (b *UserSpaceBuilder) AskLocal(rl *readline.Instance) {
- b.Storage = &jcstypes.LocalType{
- Type: "Local",
- Location: jcstypes.Location{
- StorageName: cmd.ReadString(rl, "StorageName"),
- Location: cmd.ReadString(rl, "Location"),
- },
- }
- b.Credential = &jcstypes.LocalCred{
- Type: "Local",
- RootDir: cmd.ReadString(rl, "RootDir"),
- }
- }
-
- func (b *UserSpaceBuilder) AskOBS(rl *readline.Instance) {
- b.Storage = &jcstypes.OBSType{
- Type: "OBS",
- Region: cmd.ReadString(rl, "Region"),
- Endpoint: cmd.ReadString(rl, "Endpoint"),
- Bucket: cmd.ReadString(rl, "Bucket"),
- ProjectID: cmd.ReadString(rl, "ProjectID"),
- }
- b.Credential = &jcstypes.OBSCred{
- Type: "OBS",
- AK: cmd.ReadString(rl, "AccessKeyID"),
- SK: string(cmd.ReadPassword(rl, "AccessKeySecret")),
- }
-
- if cmd.ReadBool(rl, "是否支持存储服务间直传文件?") {
- b.Features = append(b.Features, &jcstypes.S2STransferFeature{
- Type: "S2STransfer",
- })
- }
- }
-
- func (b *UserSpaceBuilder) AskOSS(rl *readline.Instance) {
- b.Storage = &jcstypes.OSSType{
- Type: "OSS",
- Region: cmd.ReadString(rl, "Region"),
- Endpoint: cmd.ReadString(rl, "Endpoint"),
- Bucket: cmd.ReadString(rl, "Bucket"),
- }
- b.Credential = &jcstypes.OSSCred{
- Type: "OSS",
- AK: cmd.ReadString(rl, "AccessKeyID"),
- SK: string(cmd.ReadPassword(rl, "SecretAccessKey")),
- }
- }
-
- func (b *UserSpaceBuilder) AskCOS(rl *readline.Instance) {
- b.Storage = &jcstypes.COSType{
- Type: "COS",
- Region: cmd.ReadString(rl, "Region"),
- Endpoint: cmd.ReadString(rl, "Endpoint"),
- Bucket: cmd.ReadString(rl, "Bucket"),
- }
- b.Credential = &jcstypes.COSCred{
- Type: "COS",
- AK: cmd.ReadString(rl, "AccessKeyID"),
- SK: string(cmd.ReadPassword(rl, "SecretAccessKey")),
- }
- }
-
- func (b *UserSpaceBuilder) AskEFile(rl *readline.Instance) {
- b.Storage = &jcstypes.EFileType{
- Type: "EFile",
- ClusterID: cmd.ReadString(rl, "ClusterID"),
- }
- b.Credential = &jcstypes.EFileCred{
- Type: "EFile",
- TokenURL: cmd.ReadString(rl, "TokenURL"),
- APIURL: cmd.ReadString(rl, "APIURL"),
- TokenExpire: cmd.ReadIntRanged(rl, "TokenExpire", 60, 3600),
- User: cmd.ReadString(rl, "User"),
- Password: string(cmd.ReadPassword(rl, "Password")),
- OrgID: cmd.ReadString(rl, "OrgID"),
- }
-
- if cmd.ReadBool(rl, "是否提供能进行EC计算的接口?") {
- b.Features = append(b.Features, &jcstypes.ECMultiplierFeature{
- Type: "ECMultiplier",
- })
- }
- }
-
- func (b *UserSpaceBuilder) AskS3(rl *readline.Instance) {
- b.Storage = &jcstypes.S3Type{
- Type: "S3",
- Region: cmd.ReadString(rl, "Region"),
- Endpoint: cmd.ReadString(rl, "Endpoint"),
- Bucket: cmd.ReadString(rl, "Bucket"),
- }
- b.Credential = &jcstypes.S3Cred{
- Type: "S3",
- AK: cmd.ReadString(rl, "AccessKeyID"),
- SK: string(cmd.ReadPassword(rl, "SecretAccessKey")),
- }
-
- if cmd.ReadBool(rl, "是否支持分段上传?") {
- b.Features = append(b.Features, &jcstypes.MultipartUploadFeature{
- Type: "MultipartUpload",
- })
- }
- }
-
- func (u *UserSpaceBuilder) AskPubShards(rl *readline.Instance) {
- u.Storage = &jcstypes.PubShardsType{
- PubShardsID: jcstypes.PubShardsID(cmd.ReadString(rl, "共享分片存储ID")),
- Password: string(cmd.ReadPassword(rl, "共享分片存储密码")),
- }
- }
-
- func (b *UserSpaceBuilder) AskShardStore(rl *readline.Instance, must bool) {
- if !must && !cmd.ReadBool(rl, "是否开启分片存储功能?") {
- return
- }
-
- var size bytesize.ByteSize
- cmd.ReadStringValue(rl, "分片存储最大容量", &size)
- b.ShardStore = &jcstypes.ShardStoreUserConfig{
- MaxSize: int64(size),
- }
- }
-
- func (b *UserSpaceBuilder) AskWorkingDir(rl *readline.Instance) {
- b.WorkingDir = cmd.ReadStringDef(rl, "工作目录", "jcs")
- }
|