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.

delete.go 2.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package userspace
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "github.com/chzyer/readline"
  7. "github.com/spf13/cobra"
  8. cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
  9. clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types"
  10. "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd"
  11. )
  12. func init() {
  13. cmd := cobra.Command{
  14. Use: "delete",
  15. Short: "delete a cloud storage",
  16. Run: func(c *cobra.Command, args []string) {
  17. ctx := cmd.GetCmdCtx(c)
  18. delete(c, ctx)
  19. },
  20. }
  21. UserSpaceCmd.AddCommand(&cmd)
  22. }
  23. func delete(c *cobra.Command, ctx *cmd.CommandContext) {
  24. rl, err := readline.New("> ")
  25. if err != nil {
  26. fmt.Printf("\033[31m初始化命令行失败: %v\033[0m\n", err)
  27. return
  28. }
  29. defer rl.Close()
  30. fmt.Printf("\033[1;36m请选择删除依据: \033[0m\n")
  31. options := []string{"ID", "Name"}
  32. for i, option := range options {
  33. fmt.Printf("\033[33m%d. %s\033[0m\n", i+1, option)
  34. }
  35. rl.SetPrompt("\033[36m> \033[0m")
  36. line, err := rl.Readline()
  37. if err != nil {
  38. return
  39. }
  40. var userSpace clitypes.UserSpace
  41. trimmed := strings.TrimSpace(line)
  42. switch trimmed {
  43. case "1":
  44. rl.SetPrompt("\033[36m请输入云存储ID(ID): \033[0m")
  45. idInput, err := rl.Readline()
  46. if err != nil || idInput == "" {
  47. return
  48. }
  49. id, err := strconv.ParseInt(strings.TrimSpace(idInput), 10, 64)
  50. if err != nil {
  51. fmt.Printf("\033[31mID 格式错误: %v\033[0m\n", err)
  52. return
  53. }
  54. resp, err := ctx.Client.UserSpace().Get(cliapi.UserSpaceGet{
  55. UserSpaceID: clitypes.UserSpaceID(id),
  56. })
  57. if err != nil {
  58. fmt.Printf("\033[31m保存配置失败: %v\033[0m", err)
  59. return
  60. }
  61. userSpace = resp.UserSpace
  62. case "2":
  63. rl.SetPrompt("\033[36m请输入云存储名称(Name): \033[0m")
  64. nameInput, err := rl.Readline()
  65. if err != nil || nameInput == "" {
  66. fmt.Println("\033[31m输入已取消\033[0m")
  67. return
  68. }
  69. name := strings.TrimSpace(nameInput)
  70. resp, err := ctx.Client.UserSpace().GetByName(cliapi.UserSpaceGetByName{
  71. Name: name,
  72. })
  73. if err != nil {
  74. fmt.Printf("\033[31m保存配置失败: %v\033[0m", err)
  75. return
  76. }
  77. userSpace = resp.UserSpace
  78. default:
  79. fmt.Printf("\033[31m错误: 无效选项 '%s',请输入序号!\033[0m\n", line)
  80. }
  81. fmt.Println("\n\033[1;36m找到云存储:\033[0m")
  82. fmt.Printf("\033[1;36mID:%d 名称:%s 类型:%s\033[0m\n", userSpace.UserSpaceID, userSpace.Name, userSpace.Storage.GetStorageType())
  83. rl.SetPrompt("\033[31m确认删除?(y/n): \033[0m")
  84. confirm, err := rl.Readline()
  85. if err != nil || strings.ToLower(strings.TrimSpace(confirm)) != "y" {
  86. return
  87. }
  88. _, err = ctx.Client.UserSpace().Delete(cliapi.UserSpaceDelete{
  89. UserSpaceID: userSpace.UserSpaceID,
  90. })
  91. if err != nil {
  92. fmt.Printf("\033[31m删除失败: %v\033[0m\n", err)
  93. return
  94. }
  95. fmt.Printf("\n\033[32m删除成功: %s\033[0m\n", userSpace.Name)
  96. }

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