76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"flag"
|
|
"os"
|
|
"os/signal"
|
|
"path"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
|
|
"gitea.thegux.fr/hmdeploy/deployers"
|
|
"gitea.thegux.fr/hmdeploy/docker"
|
|
"gitea.thegux.fr/hmdeploy/models"
|
|
)
|
|
|
|
const HMDEPLOY_DIRNAME = ".homeserver"
|
|
const NETWORK_FILENAME = "map.json"
|
|
|
|
var HOME_PATH = os.Getenv("HOME")
|
|
|
|
func initLogger() {
|
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
|
log.Logger = log.With().Caller().Logger().Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
|
}
|
|
|
|
func main() {
|
|
ctx, stop := signal.NotifyContext(
|
|
context.Background(),
|
|
os.Interrupt,
|
|
os.Kill,
|
|
)
|
|
defer stop()
|
|
|
|
initLogger()
|
|
log.Info().Msg("hmdeploy started")
|
|
|
|
projectDir := flag.String("path", ".", "define the .homeserver project root dir")
|
|
flag.Parse()
|
|
|
|
hmmap_path := path.Join(HOME_PATH, HMDEPLOY_DIRNAME, NETWORK_FILENAME)
|
|
c, err := os.ReadFile(hmmap_path)
|
|
if err != nil {
|
|
log.Fatal().Err(err).Str("conf", hmmap_path).Msg("unable to load configuration")
|
|
}
|
|
|
|
var hmmap models.HMMap
|
|
if err := json.Unmarshal(c, &hmmap); err != nil {
|
|
log.Fatal().Err(err).Str("conf", hmmap_path).Msg("unable to parse configuration")
|
|
}
|
|
log.Info().Str("conf", hmmap_path).Msg("hmmap load successfully")
|
|
|
|
swarmNet := hmmap.GetSwarmNetInfo()
|
|
if swarmNet == nil {
|
|
log.Fatal().Err(err).Msg("unable to get swarm net info, does not exist")
|
|
}
|
|
|
|
project, err := models.ProjectFromDir(*projectDir)
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
|
|
dcli := docker.NewClient()
|
|
|
|
sd, err := deployers.NewSwarmDeployer(ctx, &dcli, swarmNet, &project)
|
|
if err != nil {
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := sd.Deploy(); err != nil {
|
|
os.Exit(1)
|
|
}
|
|
}
|