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.

ls.go 2.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package userspace
  2. import (
  3. "fmt"
  4. "strconv"
  5. "github.com/jedib0t/go-pretty/v6/table"
  6. "github.com/spf13/cobra"
  7. cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
  8. clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types"
  9. "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd"
  10. )
  11. func init() {
  12. var opt lsOpt
  13. cmd := cobra.Command{
  14. Use: "ls",
  15. Args: cobra.MaximumNArgs(1),
  16. Run: func(c *cobra.Command, args []string) {
  17. ctx := cmd.GetCmdCtx(c)
  18. ls(c, ctx, opt, args)
  19. },
  20. }
  21. cmd.Flags().BoolVarP(&opt.ByID, "id", "", false, "按id查询")
  22. cmd.Flags().BoolVarP(&opt.ShowPassword, "password", "p", false, "显示密码信息,请在安全环境下使用")
  23. UserSpaceCmd.AddCommand(&cmd)
  24. }
  25. type lsOpt struct {
  26. ByID bool
  27. ShowPassword bool
  28. }
  29. func ls(c *cobra.Command, ctx *cmd.CommandContext, opt lsOpt, args []string) {
  30. // 仅ls无参数
  31. if len(args) == 0 {
  32. resp, err := ctx.Client.UserSpaceGetAll()
  33. if err != nil {
  34. cmd.ErrorExitln(err.Error())
  35. return
  36. }
  37. fmt.Printf("total: %d\n", len(resp.UserSpaces))
  38. tb := table.NewWriter()
  39. tb.AppendHeader(table.Row{"ID", "Name", "StorageType"})
  40. for _, userSpace := range resp.UserSpaces {
  41. tb.AppendRow(table.Row{userSpace.UserSpaceID, userSpace.Name, userSpace.Storage.GetStorageType()})
  42. }
  43. fmt.Println(tb.Render())
  44. return
  45. }
  46. searchKey := args[0]
  47. var userSpace *clitypes.UserSpace
  48. if opt.ByID {
  49. id, err := strconv.Atoi(searchKey)
  50. if err != nil {
  51. cmd.ErrorExitln("ID必须是数字")
  52. return
  53. }
  54. result, err := ctx.Client.UserSpaceGet(cliapi.UserSpaceGet{
  55. UserSpaceID: clitypes.UserSpaceID(id),
  56. })
  57. if err != nil {
  58. cmd.ErrorExitln(err.Error())
  59. return
  60. }
  61. userSpace = &result.UserSpace
  62. } else {
  63. result, err := ctx.Client.UserSpaceGetByName(cliapi.UserSpaceGetByName{
  64. Name: searchKey,
  65. })
  66. if err != nil {
  67. cmd.ErrorExitln(err.Error())
  68. return
  69. }
  70. userSpace = &result.UserSpace
  71. }
  72. if userSpace == nil {
  73. cmd.ErrorExitln(fmt.Sprintf("未找到匹配的云存储: %s", searchKey))
  74. return
  75. }
  76. fmt.Println("\n\033[1;36m云存储详情\033[0m")
  77. fmt.Println("----------------------------------")
  78. fmt.Printf("\033[1m%-8s\033[0m %d\n", "ID:", userSpace.UserSpaceID)
  79. fmt.Printf("\033[1m%-8s\033[0m %s\n", "名称:", userSpace.Name)
  80. fmt.Printf("\033[1m%-8s\033[0m %s\n", "类型:", userSpace.Storage.GetStorageType())
  81. fmt.Printf("\033[1m%-8s\033[0m %s\n", "Location:", userSpace.Storage.GetLocation().Location)
  82. if opt.ShowPassword {
  83. fmt.Printf("\033[1m%-8s\033[0m %s\n", "Credential:", userSpace.Credential.String(true))
  84. } else {
  85. fmt.Printf("\033[1m%-8s\033[0m %s\n", "Credential:", userSpace.Credential.String(false))
  86. }
  87. if len(userSpace.Features) > 0 {
  88. fmt.Printf("\033[1m%-8s\033[0m %s\n", "Features:", userSpace.Features[0].GetFeatureType())
  89. }
  90. fmt.Printf("\033[1m%-8s\033[0m %s\n", "WorkingDir:", userSpace.WorkingDir)
  91. fmt.Println("----------------------------------")
  92. }

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