Files
ionscale/internal/cmd/dns.go
T
2022-06-03 14:25:31 +02:00

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
}