mirror of
https://gitea.elkins.co/Networking/ccl.git
synced 2025-03-09 12:41:40 -05:00
Implement per-container nsupdate settings
This commit is contained in:
parent
1da865adb0
commit
f61bccfecb
@ -40,7 +40,7 @@ var nsupdateCmd = &cobra.Command{
|
||||
Run: func(_ *cobra.Command, args []string) {
|
||||
conts := config.Union(args, contMask)
|
||||
execForEach(conts, func(c *container.Container) command.Set {
|
||||
return c.NsUpdateCommands(config.Options.DomainName, config.Options.DNSServer, config.Options.TSIGName, config.Options.TSIGKey)
|
||||
return c.NsUpdateCommands()
|
||||
}, 0)
|
||||
},
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ func Init(conn context.Context) error {
|
||||
}
|
||||
Containers, Networks, Options = p.Containers, p.Networks, p.Options
|
||||
for i := range Containers {
|
||||
Containers[i].Init(conn, Networks)
|
||||
Containers[i].Init(conn, Networks, Options.DomainName, Options.DNSServer, Options.TSIGName, Options.TSIGKey)
|
||||
}
|
||||
slices.SortFunc(Containers, func(a, b *container.Container) bool {
|
||||
return a.Name < b.Name
|
||||
|
@ -68,6 +68,10 @@ type Container struct {
|
||||
CapAdd []string `toml:"cap_add,omitempty"`
|
||||
Privileged null.Bool `toml:"privileged,omitempty"`
|
||||
Sysctl map[string]string `toml:"sysctl,omitempty"`
|
||||
DomainName string `toml:"domain_name,omitempty"`
|
||||
DnsServer string `toml:"dns_server,omitempty"`
|
||||
TSIGName string `toml:"tsig_name,omitempty"`
|
||||
TSIGKey string `toml:"tsig_key,omitempty"`
|
||||
|
||||
conn context.Context
|
||||
getCData func() *define.InspectContainerData
|
||||
@ -77,7 +81,7 @@ type Container struct {
|
||||
|
||||
// Init will initialize a new container structure by filling in network details
|
||||
// and by querying other metadata from libpod, if possible.
|
||||
func (c *Container) Init(conn context.Context, nets []*network.Network) error {
|
||||
func (c *Container) Init(conn context.Context, nets []*network.Network, domain_name string, dns_server string, tsig_name string, tsig_key string) error {
|
||||
// initialize user-provided definitions
|
||||
for i := range c.Networks {
|
||||
var n *network.Network
|
||||
@ -119,6 +123,19 @@ func (c *Container) Init(conn context.Context, nets []*network.Network) error {
|
||||
}
|
||||
c.conn = conn
|
||||
|
||||
if c.DomainName == "" {
|
||||
c.DomainName = domain_name
|
||||
}
|
||||
if c.DnsServer == "" {
|
||||
c.DnsServer = dns_server
|
||||
}
|
||||
if c.TSIGName == "" {
|
||||
c.TSIGName = tsig_name
|
||||
}
|
||||
if c.TSIGKey == "" {
|
||||
c.TSIGKey = tsig_key
|
||||
}
|
||||
|
||||
c.watchCData()
|
||||
c.wasRunning = c.IsRunning()
|
||||
return nil
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
func do_reverse(rv string, dn string, server string, tsn string, tsk string) error {
|
||||
func (c *Container) doReverse(rv string, dn string) error {
|
||||
ptr := dns.PTR{
|
||||
Hdr: dns.RR_Header{
|
||||
Name: rv,
|
||||
@ -20,13 +20,13 @@ func do_reverse(rv string, dn string, server string, tsn string, tsk string) err
|
||||
}
|
||||
|
||||
cli := new(dns.Client)
|
||||
if tsn != "" {
|
||||
cli.TsigSecret = map[string]string{tsn: tsk}
|
||||
if c.TSIGName != "" {
|
||||
cli.TsigSecret = map[string]string{c.TSIGName: c.TSIGKey}
|
||||
}
|
||||
|
||||
msg := new(dns.Msg)
|
||||
msg.SetQuestion(rv, dns.TypeSOA)
|
||||
resp, _, err := cli.Exchange(msg, server)
|
||||
resp, _, err := cli.Exchange(msg, c.DnsServer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -36,22 +36,22 @@ func do_reverse(rv string, dn string, server string, tsn string, tsk string) err
|
||||
msg = new(dns.Msg)
|
||||
msg.SetUpdate(soa)
|
||||
msg.Ns = append(msg.Ns, &ptr)
|
||||
if tsn != "" {
|
||||
msg.SetTsig(tsn, dns.HmacSHA256, 300, time.Now().Unix())
|
||||
if c.TSIGName != "" {
|
||||
msg.SetTsig(c.TSIGName, dns.HmacSHA256, 300, time.Now().Unix())
|
||||
}
|
||||
_, _, err = cli.Exchange(msg, server)
|
||||
_, _, err = cli.Exchange(msg, c.DnsServer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Container) NsUpdateCommands(forward_domain string, server string, tsn string, tsk string) cmd.Set {
|
||||
func (c *Container) NsUpdateCommands() cmd.Set {
|
||||
hostname := c.Hostname
|
||||
if c.Hostname == "" {
|
||||
hostname = c.Name
|
||||
}
|
||||
dn := dns.Fqdn(hostname + "." + forward_domain)
|
||||
dn := dns.Fqdn(hostname + "." + c.DomainName)
|
||||
cmds := []cmd.Command{}
|
||||
|
||||
// TODO: also iterate over c.IPv6Addresses
|
||||
@ -77,23 +77,23 @@ func (c *Container) NsUpdateCommands(forward_domain string, server string, tsn s
|
||||
}
|
||||
|
||||
cli := new(dns.Client)
|
||||
if tsn != "" {
|
||||
cli.TsigSecret = map[string]string{tsn: tsk}
|
||||
if c.TSIGName != "" {
|
||||
cli.TsigSecret = map[string]string{c.TSIGName: c.TSIGKey}
|
||||
}
|
||||
|
||||
// Update the forward record
|
||||
msg := new(dns.Msg)
|
||||
msg.SetUpdate(dns.Fqdn(forward_domain))
|
||||
msg.SetUpdate(dns.Fqdn(c.DomainName))
|
||||
msg.Ns = append(msg.Ns, &aaaa)
|
||||
|
||||
if tsn != "" {
|
||||
msg.SetTsig(tsn, dns.HmacSHA256, 300, time.Now().Unix())
|
||||
if c.TSIGName != "" {
|
||||
msg.SetTsig(c.TSIGName, dns.HmacSHA256, 300, time.Now().Unix())
|
||||
}
|
||||
if _, _, err = cli.Exchange(msg, server); err != nil {
|
||||
if _, _, err = cli.Exchange(msg, c.DnsServer); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = do_reverse(rv, dn, server, tsn, tsk); err != nil {
|
||||
if err = c.doReverse(rv, dn); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@ -121,22 +121,22 @@ func (c *Container) NsUpdateCommands(forward_domain string, server string, tsn s
|
||||
}
|
||||
|
||||
cli := new(dns.Client)
|
||||
if tsn != "" {
|
||||
cli.TsigSecret = map[string]string{tsn: tsk}
|
||||
if c.TSIGName != "" {
|
||||
cli.TsigSecret = map[string]string{c.TSIGName: c.TSIGKey}
|
||||
}
|
||||
|
||||
// Update the forward record
|
||||
msg := new(dns.Msg)
|
||||
msg.SetUpdate(dns.Fqdn(forward_domain))
|
||||
msg.SetUpdate(dns.Fqdn(c.DomainName))
|
||||
msg.Ns = append(msg.Ns, &a)
|
||||
if tsn != "" {
|
||||
msg.SetTsig(tsn, dns.HmacSHA256, 300, time.Now().Unix())
|
||||
if c.TSIGName != "" {
|
||||
msg.SetTsig(c.TSIGName, dns.HmacSHA256, 300, time.Now().Unix())
|
||||
}
|
||||
if _, _, err = cli.Exchange(msg, server); err != nil {
|
||||
if _, _, err = cli.Exchange(msg, c.DnsServer); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = do_reverse(rv, dn, server, tsn, tsk); err != nil {
|
||||
if err = c.doReverse(rv, dn); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
Loading…
x
Reference in New Issue
Block a user