NextZen-UserService/cmd/migration-tool/main.go

107 lines
2.2 KiB
Go
Raw Permalink Normal View History

2024-02-21 11:45:10 +07:00
package main
import (
_ "embed"
"flag"
"fmt"
"os"
2024-02-21 12:06:40 +07:00
interfaces "github.com/KaySar12/NextZen-Common"
"github.com/KaySar12/NextZen-Common/utils/systemctl"
"github.com/KaySar12/NextZen-UserService/common"
2024-02-21 11:45:10 +07:00
)
const (
userServiceConfigDirPath = "/etc/casaos"
userServiceConfigFilePath = "/etc/casaos/user-service.conf"
userServiceName = "casaos-user-service.service"
userServiceNameShort = "user-service"
)
//go:embedded ../../build/sysroot/etc/casaos/user-service.conf.sample
//var _userServiceConfigFileSample string
var (
commit = "private build"
date = "private build"
_logger *Logger
)
// var _status *version.GlobalMigrationStatus
func main() {
versionFlag := flag.Bool("v", false, "version")
debugFlag := flag.Bool("d", true, "debug")
forceFlag := flag.Bool("f", false, "force")
flag.Parse()
if *versionFlag {
fmt.Printf("v%s\n", common.Version)
os.Exit(0)
}
println("git commit:", commit)
println("build date:", date)
_logger = NewLogger()
if os.Getuid() != 0 {
_logger.Info("Root privileges are required to run this program.")
os.Exit(1)
}
if *debugFlag {
_logger.DebugMode = true
}
if !*forceFlag {
isRunning, err := systemctl.IsServiceRunning(userServiceName)
if err != nil {
_logger.Error("Failed to check if %s is running", userServiceName)
panic(err)
}
if isRunning {
_logger.Info("%s is running. If migration is still needed, try with -f.", userServiceName)
os.Exit(1)
}
}
migrationTools := []interfaces.MigrationTool{
NewMigrationDummy(),
}
var selectedMigrationTool interfaces.MigrationTool
// look for the right migration tool matching current version
for _, tool := range migrationTools {
migrationNeeded, err := tool.IsMigrationNeeded()
if err != nil {
panic(err)
}
if migrationNeeded {
selectedMigrationTool = tool
break
}
}
if selectedMigrationTool == nil {
_logger.Info("No migration to proceed.")
return
}
if err := selectedMigrationTool.PreMigrate(); err != nil {
panic(err)
}
if err := selectedMigrationTool.Migrate(); err != nil {
panic(err)
}
if err := selectedMigrationTool.PostMigrate(); err != nil {
_logger.Error("Migration succeeded, but post-migration failed: %s", err)
}
}