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.

migrate.go 1.8 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package cmd
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/spf13/cobra"
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  7. stgmod "gitlink.org.cn/cloudream/storage/common/models"
  8. "gitlink.org.cn/cloudream/storage/common/pkgs/db2/model"
  9. "gitlink.org.cn/cloudream/storage/coordinator/internal/config"
  10. "gorm.io/driver/mysql"
  11. "gorm.io/gorm"
  12. )
  13. func init() {
  14. var configPath string
  15. cmd := cobra.Command{
  16. Use: "migrate",
  17. Short: "Run database migrations",
  18. Run: func(cmd *cobra.Command, args []string) {
  19. migrate(configPath)
  20. },
  21. }
  22. cmd.Flags().StringVarP(&configPath, "config", "c", "", "Path to config file")
  23. RootCmd.AddCommand(&cmd)
  24. }
  25. func migrate(configPath string) {
  26. // TODO 将create_database.sql的内容逐渐移动到这里来
  27. err := config.Init(configPath)
  28. if err != nil {
  29. fmt.Println(err)
  30. os.Exit(1)
  31. }
  32. db, err := gorm.Open(mysql.Open(config.Cfg().DB.MakeSourceString()))
  33. if err != nil {
  34. fmt.Println(err)
  35. os.Exit(1)
  36. }
  37. migrateOne(db, cdssdk.Bucket{})
  38. migrateOne(db, model.Cache{})
  39. migrateOne(db, model.Location{})
  40. migrateOne(db, model.HubConnectivity{})
  41. migrateOne(db, cdssdk.Hub{})
  42. migrateOne(db, stgmod.ObjectAccessStat{})
  43. migrateOne(db, stgmod.ObjectBlock{})
  44. migrateOne(db, cdssdk.Object{})
  45. migrateOne(db, stgmod.PackageAccessStat{})
  46. migrateOne(db, cdssdk.Package{})
  47. migrateOne(db, cdssdk.PinnedObject{})
  48. migrateOne(db, cdssdk.ShardStorage{})
  49. migrateOne(db, cdssdk.SharedStorage{})
  50. migrateOne(db, model.StoragePackage{})
  51. migrateOne(db, cdssdk.Storage{})
  52. migrateOne(db, model.UserStorage{})
  53. migrateOne(db, model.UserBucket{})
  54. migrateOne(db, model.User{})
  55. migrateOne(db, model.UserHub{})
  56. fmt.Println("migrate success")
  57. }
  58. func migrateOne[T any](db *gorm.DB, model T) {
  59. err := db.AutoMigrate(model)
  60. if err != nil {
  61. fmt.Printf("migratting model %T: %v\n", model, err)
  62. os.Exit(1)
  63. }
  64. }

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