mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-02-03 22:18:39 +00:00
Replace individual service command initialization with unified InitServiceCmd() that creates a complete service command hierarchy. Port all original logic from initStartCmd, initStopCmd, initRestartCmd, initReloadCmd, initStatusCmd, and initUninstallCmd into ServiceCommand methods with proper dependency injection. Key changes: - Port complete Start logic including config validation, service installation, DNS management, and self-check functionality - Port complete Stop logic with deactivation pin validation and DNS cleanup - Port complete Restart logic with config validation and DNS restoration - Port complete Reload logic with HTTP status handling and restart fallback - Port complete Status logic with proper exit codes - Port complete Uninstall logic with cleanup file removal - Add all necessary flags to service commands (iface, pin, etc.) - Use InitInterfacesCmd() for interfaces subcommand - Simplify cli.go by replacing multiple init calls with single InitServiceCmd() This refactoring eliminates code duplication, improves maintainability, and ensures all service commands have their complete original functionality.
88 lines
2.0 KiB
Go
88 lines
2.0 KiB
Go
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// InterfacesCommand handles interfaces-related operations
|
|
type InterfacesCommand struct{}
|
|
|
|
// NewInterfacesCommand creates a new interfaces command handler
|
|
func NewInterfacesCommand() (*InterfacesCommand, error) {
|
|
return &InterfacesCommand{}, nil
|
|
}
|
|
|
|
// ListInterfaces lists all network interfaces
|
|
func (ic *InterfacesCommand) ListInterfaces(cmd *cobra.Command, args []string) error {
|
|
withEachPhysicalInterfaces("", "Interface list", func(i *net.Interface) error {
|
|
fmt.Printf("Index : %d\n", i.Index)
|
|
fmt.Printf("Name : %s\n", i.Name)
|
|
var status string
|
|
if i.Flags&net.FlagUp != 0 {
|
|
status = "Up"
|
|
} else {
|
|
status = "Down"
|
|
}
|
|
fmt.Printf("Status: %s\n", status)
|
|
addrs, _ := i.Addrs()
|
|
for i, ipaddr := range addrs {
|
|
if i == 0 {
|
|
fmt.Printf("Addrs : %v\n", ipaddr)
|
|
continue
|
|
}
|
|
fmt.Printf(" %v\n", ipaddr)
|
|
}
|
|
nss, err := currentStaticDNS(i)
|
|
if err != nil {
|
|
mainLog.Load().Warn().Err(err).Msg("failed to get DNS")
|
|
}
|
|
if len(nss) == 0 {
|
|
nss = currentDNS(i)
|
|
}
|
|
for i, dns := range nss {
|
|
if i == 0 {
|
|
fmt.Printf("DNS : %s\n", dns)
|
|
continue
|
|
}
|
|
fmt.Printf(" : %s\n", dns)
|
|
}
|
|
println()
|
|
return nil
|
|
})
|
|
return nil
|
|
}
|
|
|
|
// InitInterfacesCmd creates the interfaces command with proper logic
|
|
func InitInterfacesCmd() *cobra.Command {
|
|
listInterfacesCmd := &cobra.Command{
|
|
Use: "list",
|
|
Short: "List network interfaces",
|
|
Args: cobra.NoArgs,
|
|
PreRun: func(cmd *cobra.Command, args []string) {
|
|
checkHasElevatedPrivilege()
|
|
},
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
ic, err := NewInterfacesCommand()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return ic.ListInterfaces(cmd, args)
|
|
},
|
|
}
|
|
|
|
interfacesCmd := &cobra.Command{
|
|
Use: "interfaces",
|
|
Short: "Manage network interfaces",
|
|
Args: cobra.OnlyValidArgs,
|
|
ValidArgs: []string{
|
|
listInterfacesCmd.Use,
|
|
},
|
|
}
|
|
interfacesCmd.AddCommand(listInterfacesCmd)
|
|
|
|
return interfacesCmd
|
|
}
|