106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
_ "embed"
|
|
"log"
|
|
"mc-tool/config"
|
|
"mc-tool/server"
|
|
"os"
|
|
"text/template"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var rootCmd = &cobra.Command{
|
|
Use: "mc-tool [command]",
|
|
Short: "Minecraft Management Tool",
|
|
Long: "mc-tool simplifies common server administration actions",
|
|
Args: cobra.MinimumNArgs(1),
|
|
}
|
|
|
|
var createCmd = &cobra.Command{
|
|
Use: "create",
|
|
Short: "Creates a new minecraft server",
|
|
Run: server.New,
|
|
Args: cobra.ExactArgs(1),
|
|
}
|
|
|
|
var startCmd = &cobra.Command{
|
|
Use: "start",
|
|
Short: "Start the minecraft server",
|
|
Run: server.Start,
|
|
Args: cobra.ExactArgs(1),
|
|
}
|
|
|
|
var stopCmd = &cobra.Command{
|
|
Use: "stop",
|
|
Short: "Stop the minecraft server",
|
|
Run: server.Stop,
|
|
Args: cobra.ExactArgs(1),
|
|
}
|
|
|
|
var restartCmd = &cobra.Command{
|
|
Use: "restart",
|
|
Short: "Restart the minecraft server",
|
|
Run: server.Restart,
|
|
Args: cobra.ExactArgs(1),
|
|
}
|
|
|
|
var shellCmd = &cobra.Command{
|
|
Use: "shell",
|
|
Short: "Access RCON shell",
|
|
Run: server.Shell,
|
|
Args: cobra.ExactArgs(1),
|
|
}
|
|
|
|
var sayCmd = &cobra.Command{
|
|
Use: "say",
|
|
Short: "Say something in the server",
|
|
Run: server.Say,
|
|
Args: cobra.MinimumNArgs(1),
|
|
}
|
|
|
|
var statusCMd = &cobra.Command{
|
|
Use: "cmd",
|
|
Short: "Get the status of the server",
|
|
Run: server.Status,
|
|
}
|
|
|
|
//go:embed templates/docker-compose.yml
|
|
var dockerCompose string
|
|
|
|
func init() {
|
|
createCmd.Flags().StringVarP(&config.Cfg.Name, "name", "n", "minecraft-server", "set the name of the server")
|
|
createCmd.Flags().StringVarP(&config.Cfg.Version, "version", "v", "1.21.1", "set the version of the server")
|
|
createCmd.Flags().StringVarP(&config.Cfg.Type, "type", "t", "VANILLA", "set the type of the server")
|
|
createCmd.Flags().StringVarP(&config.Cfg.Ram, "ram", "r", "2G", "set the memory limit of the server")
|
|
createCmd.Flags().StringVarP(&config.Cfg.MOTD, "motd", "m", "This server was created using mc-tool", "set the message of the day for the server")
|
|
createCmd.Flags().StringVarP(&config.Cfg.RestartPolicy, "restart", "R", "no", "what to do when the server fails or host turns off")
|
|
createCmd.Flags().FuncP("port", "p", "set additional ports for the container to expose", func(s string) error {
|
|
config.Cfg.Ports = append(config.Cfg.Ports, s)
|
|
return nil
|
|
})
|
|
|
|
rootCmd.AddCommand(createCmd)
|
|
rootCmd.AddCommand(startCmd)
|
|
rootCmd.AddCommand(stopCmd)
|
|
rootCmd.AddCommand(restartCmd)
|
|
rootCmd.AddCommand(shellCmd)
|
|
rootCmd.AddCommand(sayCmd)
|
|
rootCmd.AddCommand(statusCMd)
|
|
|
|
t, err := template.New("compose").Parse(dockerCompose)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
config.Data.DockerCompose = t
|
|
}
|
|
|
|
func main() {
|
|
log.SetFlags(0)
|
|
if err := rootCmd.Execute(); err != nil {
|
|
log.Fatal(err)
|
|
os.Exit(1)
|
|
}
|
|
}
|