refactor: move cmd handlers to cmd/cli/commands/ following tag_file architecture
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.yoresee.cc/nightstar/ry/internal/output"
|
||||
"git.yoresee.cc/nightstar/ry/internal/provider"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func Cmd(prov *provider.Provider, out **output.Printer, raw *bool) *cobra.Command {
|
||||
serverCmd := &cobra.Command{
|
||||
Use: "server",
|
||||
Short: "Manage cloud servers",
|
||||
}
|
||||
|
||||
serverListCmd := &cobra.Command{
|
||||
Use: "list",
|
||||
Short: "List servers",
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
svc := (*prov).Server()
|
||||
if svc == nil {
|
||||
return fmt.Errorf("server management not supported by current provider")
|
||||
}
|
||||
servers, err := svc.List(cmd.Context())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if *raw {
|
||||
var r []any
|
||||
for _, s := range servers {
|
||||
r = append(r, s.Raw)
|
||||
}
|
||||
return (*out).Print(r)
|
||||
}
|
||||
return (*out).Print(servers)
|
||||
},
|
||||
}
|
||||
|
||||
serverGetCmd := &cobra.Command{
|
||||
Use: "get <id>",
|
||||
Short: "Get server details",
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
svc := (*prov).Server()
|
||||
if svc == nil {
|
||||
return fmt.Errorf("server management not supported")
|
||||
}
|
||||
s, err := svc.Get(cmd.Context(), args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if *raw {
|
||||
return (*out).Print(s.Raw)
|
||||
}
|
||||
return (*out).Print(s)
|
||||
},
|
||||
}
|
||||
|
||||
serverStartCmd := &cobra.Command{
|
||||
Use: "start <id>",
|
||||
Short: "Start a server",
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
svc := (*prov).Server()
|
||||
if svc == nil {
|
||||
return fmt.Errorf("server management not supported")
|
||||
}
|
||||
if err := svc.Start(cmd.Context(), args[0]); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("Server %s started\n", args[0])
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
serverStopCmd := &cobra.Command{
|
||||
Use: "stop <id>",
|
||||
Short: "Stop a server",
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
svc := (*prov).Server()
|
||||
if svc == nil {
|
||||
return fmt.Errorf("server management not supported")
|
||||
}
|
||||
if err := svc.Stop(cmd.Context(), args[0]); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("Server %s stopped\n", args[0])
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
serverRebootCmd := &cobra.Command{
|
||||
Use: "reboot <id>",
|
||||
Short: "Reboot a server",
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
svc := (*prov).Server()
|
||||
if svc == nil {
|
||||
return fmt.Errorf("server management not supported")
|
||||
}
|
||||
if err := svc.Reboot(cmd.Context(), args[0]); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("Server %s rebooted\n", args[0])
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
serverReinstallCmd := &cobra.Command{
|
||||
Use: "reinstall <id>",
|
||||
Short: "Reinstall server OS",
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
svc := (*prov).Server()
|
||||
if svc == nil {
|
||||
return fmt.Errorf("server management not supported")
|
||||
}
|
||||
osTemplate, _ := cmd.Flags().GetString("os")
|
||||
if osTemplate == "" {
|
||||
return fmt.Errorf("--os flag is required (e.g. --os ubuntu-22.04)")
|
||||
}
|
||||
if err := svc.Reinstall(cmd.Context(), args[0], osTemplate); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("Server %s reinstalling with %s\n", args[0], osTemplate)
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
serverResetPasswordCmd := &cobra.Command{
|
||||
Use: "reset-password <id>",
|
||||
Short: "Reset server password",
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
svc := (*prov).Server()
|
||||
if svc == nil {
|
||||
return fmt.Errorf("server management not supported")
|
||||
}
|
||||
if err := svc.ResetPassword(cmd.Context(), args[0]); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Printf("Password reset for server %s\n", args[0])
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
serverVNCCmd := &cobra.Command{
|
||||
Use: "vnc <id>",
|
||||
Short: "Get VNC connection URL",
|
||||
Args: cobra.ExactArgs(1),
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
svc := (*prov).Server()
|
||||
if svc == nil {
|
||||
return fmt.Errorf("server management not supported")
|
||||
}
|
||||
url, err := svc.GetVNC(cmd.Context(), args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println(url)
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
serverReinstallCmd.Flags().String("os", "", "OS template name (required)")
|
||||
serverReinstallCmd.MarkFlagRequired("os")
|
||||
|
||||
serverCmd.AddCommand(serverListCmd)
|
||||
serverCmd.AddCommand(serverGetCmd)
|
||||
serverCmd.AddCommand(serverStartCmd)
|
||||
serverCmd.AddCommand(serverStopCmd)
|
||||
serverCmd.AddCommand(serverRebootCmd)
|
||||
serverCmd.AddCommand(serverReinstallCmd)
|
||||
serverCmd.AddCommand(serverResetPasswordCmd)
|
||||
serverCmd.AddCommand(serverVNCCmd)
|
||||
|
||||
return serverCmd
|
||||
}
|
||||
Reference in New Issue
Block a user