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)