installer-env: automate dns update with registrar
diff --git a/core/ns-controller/controllers/dnszone_controller.go b/core/ns-controller/controllers/dnszone_controller.go
index 8b32ecf..53db4a1 100644
--- a/core/ns-controller/controllers/dnszone_controller.go
+++ b/core/ns-controller/controllers/dnszone_controller.go
@@ -19,6 +19,7 @@
import (
"context"
"fmt"
+ "strings"
"time"
corev1 "k8s.io/api/core/v1"
@@ -127,7 +128,9 @@
}
resource.Status.Ready = true
if zoneConfig.DNSSec != nil {
- resource.Status.RecordsToPublish = string(zoneConfig.DNSSec.DS)
+ rrs := []string{string(zoneConfig.DNSSec.DS)}
+ rrs = append(rrs, GenerateNSRecords(zoneConfig)...)
+ resource.Status.RecordsToPublish = strings.Join(rrs, "\n")
}
if err := r.Status().Update(context.Background(), resource); err != nil {
return ctrl.Result{RequeueAfter: time.Minute}, err
diff --git a/core/ns-controller/controllers/store.go b/core/ns-controller/controllers/store.go
index 533e767..fd2d158 100644
--- a/core/ns-controller/controllers/store.go
+++ b/core/ns-controller/controllers/store.go
@@ -6,6 +6,7 @@
"io"
"io/fs"
"os"
+ "strings"
"text/template"
"github.com/Masterminds/sprig/v3"
@@ -34,6 +35,16 @@
DNSSec *DNSSecKey `json:"dnsSec,omitempty"`
}
+func GenerateNSRecords(z ZoneConfig) []string {
+ subdomain := strings.Split(z.Zone, ",")[0]
+ ret := make([]string, 0)
+ for i, ip := range z.Nameservers {
+ ret = append(ret, fmt.Sprintf("ns%d.%s 10800 IN A %s", i+1, z.Zone, ip))
+ ret = append(ret, fmt.Sprintf("%s. 10800 IN NS ns%d.%s.", subdomain, i+1, z.Zone))
+ }
+ return ret
+}
+
type ZoneStoreFactory interface {
ConfigPath() string
Create(zone ZoneConfig) (ZoneStore, error)