@@ -0,0 +1,116 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"git.jpi.io/amery/jpictl/pkg/cluster"
|
||||
"git.jpi.io/amery/jpictl/pkg/dns"
|
||||
)
|
||||
|
||||
const (
|
||||
DNSTimeout = 10 * time.Second
|
||||
)
|
||||
|
||||
func newDNSManager(ctx context.Context, m *cluster.Cluster) (*dns.Manager, error) {
|
||||
domain := m.Domain
|
||||
if m.Name != "" {
|
||||
domain = m.Name + "." + domain
|
||||
}
|
||||
|
||||
mgr, err := dns.NewManager(dns.WithDomain(domain), dns.WithLogger(log))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
m.ForEachZone(func(z *cluster.Zone) bool {
|
||||
z.ForEachMachine(func(p *cluster.Machine) bool {
|
||||
err = mgr.AddHost(ctx, z.Name, p.ID, true, p.PublicAddresses...)
|
||||
return err != nil
|
||||
})
|
||||
|
||||
return err != nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return mgr, nil
|
||||
}
|
||||
|
||||
// Command
|
||||
var dnsCmd = &cobra.Command{
|
||||
Use: "dns",
|
||||
}
|
||||
|
||||
var dnsSyncCmd = &cobra.Command{
|
||||
Use: "sync",
|
||||
PreRun: setVerbosity,
|
||||
RunE: func(_ *cobra.Command, _ []string) error {
|
||||
m, err := cfg.LoadZones(true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), DNSTimeout)
|
||||
defer cancel()
|
||||
|
||||
_, err = newDNSManager(ctx, m)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
var dnsWriteCmd = &cobra.Command{
|
||||
Use: "write",
|
||||
PreRun: setVerbosity,
|
||||
RunE: func(_ *cobra.Command, _ []string) error {
|
||||
m, err := cfg.LoadZones(true)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), DNSTimeout)
|
||||
defer cancel()
|
||||
|
||||
mgr, err := newDNSManager(ctx, m)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = mgr.WriteTo(os.Stdout)
|
||||
return err
|
||||
},
|
||||
}
|
||||
|
||||
var dnsAddCmd = &cobra.Command{
|
||||
Use: "add",
|
||||
PreRun: setVerbosity,
|
||||
RunE: func(_ *cobra.Command, _ []string) error {
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
var dnsRemoveCmd = &cobra.Command{
|
||||
Use: "remove",
|
||||
PreRun: setVerbosity,
|
||||
RunE: func(_ *cobra.Command, _ []string) error {
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(dnsCmd)
|
||||
|
||||
dnsCmd.AddCommand(dnsSyncCmd)
|
||||
dnsCmd.AddCommand(dnsWriteCmd)
|
||||
dnsCmd.AddCommand(dnsAddCmd)
|
||||
dnsCmd.AddCommand(dnsRemoveCmd)
|
||||
}
|
||||
Reference in New Issue
Block a user