Files
manage-servers/main.go
T
Matthias Hinrichs be381205be
Build And Test / build (push) Successful in 54s
Build And Test / Build and Publish Docker Image (push) Failing after 21s
feat: füge Unterstützung für das Hinzufügen und Löschen von Servern hinzu, aktualisiere die Konfiguration und verbessere die Benutzeroberfläche
2025-11-22 02:24:02 +01:00

107 lines
3.0 KiB
Go

package main
import (
"fmt"
"os"
serveractions "manage-servers/server-actions"
"manage-servers/webserver"
"github.com/spf13/viper"
)
func main() {
servers, err := loadConfig()
if err != nil {
fmt.Printf("Error loading servers: %v\n", err)
return
}
if len(os.Args) < 2 {
printUsage()
return
}
command := os.Args[1]
switch command {
case "list":
listServers(servers)
case "wake":
if len(os.Args) < 3 {
fmt.Println("Please specify a server name to wake.")
printUsage()
return
}
serverName := os.Args[2]
serveractions.WakeServer(serverName, servers)
case "wakeall":
serveractions.WakeAllServers(servers)
case "status":
serveractions.CheckServersStatus(servers)
case "shutdown":
if len(os.Args) < 3 {
fmt.Println("Please specify a server name to shutdown.")
printUsage()
return
}
serverName := os.Args[2]
serveractions.ShutdownServer(serverName, servers)
case "reboot":
if len(os.Args) < 3 {
fmt.Println("Please specify a server name to reboot.")
printUsage()
return
}
serverName := os.Args[2]
serveractions.RebootServer(serverName, servers)
case "serve":
webserver.StartWebServer(servers)
default:
fmt.Printf("Unknown command: %s\n", command)
printUsage()
}
}
func printUsage() {
fmt.Println("Usage: go run . <command>")
fmt.Println("Commands:")
fmt.Println(" list - List all configured servers")
fmt.Println(" wake <server_name> - Wake a specific server")
fmt.Println(" wakeall - Wake all configured servers")
fmt.Println(" status - Check the status of all servers")
fmt.Println(" shutdown <server_name> - Shutdown a specific server")
fmt.Println(" reboot <server_name> - Reboot a specific server")
fmt.Println(" serve - Start a web server to manage servers")
}
func loadConfig() ([]serveractions.Server, error) {
viper.SetConfigName("servers") // name of config file (without extension)
viper.SetConfigType("json") // or viper.SetConfigType("YAML")
viper.AddConfigPath("./config") // path to look for the config file in
viper.AddConfigPath(".") // optionally look for config in the working directory
err := viper.ReadInConfig() // Find and read the config file
if err != nil { // Handle errors reading the config file
// Check if the error is that the file doesn't exist
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
// Config file not found; ignore error and return empty server list
return []serveractions.Server{}, nil
}
return nil, fmt.Errorf("fatal error config file: %w", err)
}
var servers []serveractions.Server
err = viper.UnmarshalKey("servers", &servers)
if err != nil {
return nil, fmt.Errorf("unable to decode into struct, %v", err)
}
return servers, nil
}
func listServers(servers []serveractions.Server) {
fmt.Println("Configured Servers:")
for _, s := range servers {
fmt.Printf(" - %s (%s) - %s - User: %s\n", s.Name, s.IP, s.Mac, s.SSHUser)
}
}