mirror of
https://github.com/jsiebens/ionscale.git
synced 2026-03-31 15:07:49 +01:00
149 lines
3.6 KiB
Go
149 lines
3.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/bufbuild/connect-go"
|
|
api "github.com/jsiebens/ionscale/pkg/gen/ionscale/v1"
|
|
"github.com/muesli/coral"
|
|
"strings"
|
|
)
|
|
|
|
func getDNSConfig() *coral.Command {
|
|
command := &coral.Command{
|
|
Use: "get-dns",
|
|
Short: "Get DNS configuration",
|
|
SilenceUsage: true,
|
|
}
|
|
|
|
var tailnetID uint64
|
|
var tailnetName string
|
|
var target = Target{}
|
|
|
|
target.prepareCommand(command)
|
|
command.Flags().StringVar(&tailnetName, "tailnet", "", "")
|
|
command.Flags().Uint64Var(&tailnetID, "tailnet-id", 0, "")
|
|
|
|
command.RunE = func(command *coral.Command, args []string) error {
|
|
client, c, err := target.createGRPCClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer safeClose(c)
|
|
|
|
tailnet, err := findTailnet(client, tailnetName, tailnetID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
req := api.GetDNSConfigRequest{TailnetId: tailnet.Id}
|
|
resp, err := client.GetDNSConfig(context.Background(), connect.NewRequest(&req))
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
config := resp.Msg.Config
|
|
|
|
var allNameservers = config.Nameservers
|
|
|
|
for i, j := range config.Routes {
|
|
for _, n := range j.Routes {
|
|
allNameservers = append(allNameservers, fmt.Sprintf("%s:%s", i, n))
|
|
}
|
|
}
|
|
|
|
fmt.Printf("%-*v%v\n", 25, "Magic DNS Enabled:", config.MagicDns)
|
|
fmt.Printf("%-*v%v\n", 25, "Override Local DNS:", config.OverrideLocalDns)
|
|
fmt.Printf("%-*v%v\n", 25, "Nameservers:", strings.Join(allNameservers, ","))
|
|
|
|
return nil
|
|
}
|
|
|
|
return command
|
|
}
|
|
|
|
func setDNSConfig() *coral.Command {
|
|
command := &coral.Command{
|
|
Use: "set-dns",
|
|
Short: "Set DNS config",
|
|
SilenceUsage: true,
|
|
}
|
|
|
|
var nameservers []string
|
|
var magicDNS bool
|
|
var overrideLocalDNS bool
|
|
var tailnetID uint64
|
|
var tailnetName string
|
|
var target = Target{}
|
|
|
|
target.prepareCommand(command)
|
|
command.Flags().StringVar(&tailnetName, "tailnet", "", "")
|
|
command.Flags().Uint64Var(&tailnetID, "tailnet-id", 0, "")
|
|
command.Flags().StringSliceVarP(&nameservers, "nameserver", "", []string{}, "")
|
|
command.Flags().BoolVarP(&magicDNS, "magic-dns", "", false, "")
|
|
command.Flags().BoolVarP(&overrideLocalDNS, "override-local-dns", "", false, "")
|
|
|
|
command.RunE = func(command *coral.Command, args []string) error {
|
|
client, c, err := target.createGRPCClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer safeClose(c)
|
|
|
|
tailnet, err := findTailnet(client, tailnetName, tailnetID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var globalNameservers []string
|
|
var routes = make(map[string]*api.Routes)
|
|
|
|
for _, n := range nameservers {
|
|
split := strings.Split(n, ":")
|
|
if len(split) == 2 {
|
|
r, ok := routes[split[0]]
|
|
if ok {
|
|
r.Routes = append(r.Routes, split[1])
|
|
} else {
|
|
routes[split[0]] = &api.Routes{Routes: []string{split[1]}}
|
|
}
|
|
} else {
|
|
globalNameservers = append(globalNameservers, n)
|
|
}
|
|
}
|
|
|
|
req := api.SetDNSConfigRequest{
|
|
TailnetId: tailnet.Id,
|
|
Config: &api.DNSConfig{
|
|
MagicDns: magicDNS,
|
|
OverrideLocalDns: overrideLocalDNS,
|
|
Nameservers: nameservers,
|
|
Routes: routes,
|
|
},
|
|
}
|
|
resp, err := client.SetDNSConfig(context.Background(), connect.NewRequest(&req))
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
config := resp.Msg.Config
|
|
|
|
var allNameservers = config.Nameservers
|
|
|
|
for i, j := range config.Routes {
|
|
for _, n := range j.Routes {
|
|
allNameservers = append(allNameservers, fmt.Sprintf("%s:%s", i, n))
|
|
}
|
|
}
|
|
|
|
fmt.Printf("%-*v%v\n", 25, "Magic DNS Enabled:", config.MagicDns)
|
|
fmt.Printf("%-*v%v\n", 25, "Override Local DNS:", config.OverrideLocalDns)
|
|
fmt.Printf("%-*v%v\n", 25, "Nameservers:", strings.Join(allNameservers, ","))
|
|
|
|
return nil
|
|
}
|
|
|
|
return command
|
|
}
|