You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

create.go 2.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package pubshards
  2. import (
  3. "fmt"
  4. "github.com/chzyer/readline"
  5. "github.com/spf13/cobra"
  6. cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
  7. jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types"
  8. "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd"
  9. "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd/userspace"
  10. )
  11. func init() {
  12. var opt createOption
  13. c := &cobra.Command{
  14. Use: "create",
  15. Short: "create a new pubshards",
  16. Args: cobra.NoArgs,
  17. RunE: func(c *cobra.Command, args []string) error {
  18. ctx := cmd.GetCmdCtx(c)
  19. return create(c, ctx, opt, args)
  20. },
  21. }
  22. PubShardsCmd.AddCommand(c)
  23. }
  24. type createOption struct {
  25. }
  26. func create(c *cobra.Command, ctx *cmd.CommandContext, opt createOption, args []string) error {
  27. rl, err := readline.New("> ")
  28. if err != nil {
  29. return err
  30. }
  31. defer rl.Close()
  32. var blder userspace.UserSpaceBuilder
  33. name := cmd.ReadString(rl, "请输入共享分片存储名称")
  34. stgTypes := []string{"Local", "OBS", "OSS", "COS", "EFile", "S3"}
  35. idx := cmd.SelectOne(rl, "请选择共享分片存储的存储服务类型", stgTypes)
  36. switch stgTypes[idx] {
  37. case "Local":
  38. blder.AskLocal(rl)
  39. case "OBS":
  40. blder.AskOBS(rl)
  41. case "OSS":
  42. blder.AskOSS(rl)
  43. case "COS":
  44. blder.AskCOS(rl)
  45. case "EFile":
  46. blder.AskEFile(rl)
  47. case "S3":
  48. blder.AskS3(rl)
  49. }
  50. blder.AskShardStore(rl, true)
  51. blder.AskWorkingDir(rl)
  52. hubID := cmd.ReadInt(rl, "请输入管理共享分片存储的工作组件ID")
  53. var pwd string
  54. for {
  55. pwd = string(cmd.ReadPassword(rl, "请输入共享分片存储的密码"))
  56. pwd2 := string(cmd.ReadPassword(rl, "请再次输入共享分片存储的密码"))
  57. if pwd == pwd2 {
  58. break
  59. }
  60. fmt.Println("两次输入的密码不一致,请重新输入")
  61. }
  62. resp, err := ctx.Client.PubShards().Create(cliapi.PubShardsCreate{
  63. Name: name,
  64. Storage: blder.Storage,
  65. Credential: blder.Credential,
  66. ShardStore: *blder.ShardStore,
  67. Features: blder.Features,
  68. WorkingDir: blder.WorkingDir,
  69. Password: pwd,
  70. MasterHub: jcstypes.HubID(hubID),
  71. })
  72. if err != nil {
  73. return err
  74. }
  75. fmt.Printf("创建共享分片存储成功, ID为: %v\n可将此ID和密码分发给其他人以加入共享分片存储\n", resp.PubShards.PubShardsID)
  76. if !cmd.ReadBool(rl, "是否要现在加入共享分片存储") {
  77. return nil
  78. }
  79. usName := cmd.ReadString(rl, "请输入新用户空间的名称")
  80. _, err = ctx.Client.PubShards().Join(cliapi.PubShardsJoin{
  81. Name: usName,
  82. PubShardsID: resp.PubShards.PubShardsID,
  83. Password: pwd,
  84. })
  85. if err != nil {
  86. return err
  87. }
  88. return nil
  89. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。