diff --git a/internal/bind/render.go b/internal/bind/render.go index 92b34f9..f283f95 100644 --- a/internal/bind/render.go +++ b/internal/bind/render.go @@ -154,7 +154,11 @@ func renderForwardZone(z bindv1alpha1.BindZone, indent string) string { b.WriteString(fmt.Sprintf("%szone \"%s\" {\n", indent, z.Spec.ZoneName)) b.WriteString(indent + " type forward;\n") b.WriteString(indent + " forward only;\n") - b.WriteString(indent + " " + ForwardersClause(z.Spec.Forwarders) + ";\n") + if list := terminate(z.Spec.Forwarders); list != "" { + b.WriteString(fmt.Sprintf("%s forwarders { %s };\n", indent, list)) + } else { + b.WriteString(indent + " forwarders { };\n") + } b.WriteString(indent + "};\n") return b.String() } @@ -396,14 +400,6 @@ func terminate(entries []string) string { return strings.Join(parts, " ") } -// ForwardersClause renders a zone forwarders clause; empty means "forwarders { }" (no forwarding). -func ForwardersClause(entries []string) string { - if list := terminate(entries); list != "" { - return "forwarders { " + list + " }" - } - return "forwarders { }" -} - func yesno(b bool) string { if b { return "yes" diff --git a/internal/controller/bindzone_controller.go b/internal/controller/bindzone_controller.go index 214b5a5..9d02f10 100644 --- a/internal/controller/bindzone_controller.go +++ b/internal/controller/bindzone_controller.go @@ -218,7 +218,10 @@ func (r *BindZoneReconciler) buildZoneConfig(ctx context.Context, zone *bindv1al parts = append(parts, fmt.Sprintf("primaries { %s }", terminateInline(zone.Spec.Primaries))) } case bindv1alpha1.ZoneForward: - parts = append(parts, "type forward", "forward only", bind.ForwardersClause(zone.Spec.Forwarders)) + parts = append(parts, "type forward", "forward only") + if len(zone.Spec.Forwarders) > 0 { + parts = append(parts, fmt.Sprintf("forwarders { %s }", terminateInline(zone.Spec.Forwarders))) + } case bindv1alpha1.ZoneStub: parts = append(parts, "type stub", fmt.Sprintf("file \"%s\"", bind.ZoneFilePath(zone.Spec.ZoneName))) if len(zone.Spec.Primaries) > 0 { diff --git a/internal/controller/bindzone_notify_test.go b/internal/controller/bindzone_notify_test.go index ed95b7e..806778f 100644 --- a/internal/controller/bindzone_notify_test.go +++ b/internal/controller/bindzone_notify_test.go @@ -63,23 +63,3 @@ func TestBuildZoneConfigPrimaryNoNotifyTargets(t *testing.T) { t.Errorf("did not expect notify clauses with no targets: %q", cfg) } } - -func TestBuildZoneConfigForwardForwarders(t *testing.T) { - r := &BindZoneReconciler{} - for _, tc := range []struct { - fwd []string - want string - }{ - {nil, "{ type forward; forward only; forwarders { }; };"}, - {[]string{"198.18.19.15"}, "{ type forward; forward only; forwarders { 198.18.19.15; }; };"}, - } { - zone := &bindv1alpha1.BindZone{Spec: bindv1alpha1.BindZoneSpec{ZoneName: "spamhaus.org", Type: bindv1alpha1.ZoneForward, Forwarders: tc.fwd}} - cfg, err := r.buildZoneConfig(context.Background(), zone, "", nil, "") - if err != nil { - t.Fatalf("buildZoneConfig: %v", err) - } - if cfg != tc.want { - t.Errorf("forwarders %v:\ngot %q\nwant %q", tc.fwd, cfg, tc.want) - } - } -}