package main import ( "bytes" "log" "os" "time" "text/template" ) func buildBindResponsePolicyFile() { defer timeTrack(time.Now(), "buildBindResponsePolicyFile") var ( output bytes.Buffer ) outputTemplate := `{{- $domain := .Domain -}} $TTL {{ or .TTL "1h" }} @ IN SOA {{ $domain }}. {{ or .Email "domain-admin" }}. ( {{ or .Serial "0000000000" }} ; Serial {{ or .Refresh "1h" }} ; Refresh {{ or .Retry "30m" }} ; Retry {{ or .Expire "1w" }} ; Expire {{ or .Minimum "1h" }} ; Minimum ) ; ; Name Servers ; {{- range .NameServers }} IN NS {{ . }}. {{- end }} ; ; Addresses ; {{- range .BlockedDomains }} {{ . }} IN CNAME blocked.{{ $domain }}. {{- end }} ` t, err := template.New("response-policy-zone").Parse(outputTemplate) if err != nil { log.Fatalf("[FATAL] Unable to parse template (%s): %v\n", "response-policy-zone", err) } if err := t.Execute(&output, config.Config.ZoneConfig); err != nil { log.Fatalf("[FATAL] Unable to generate template output: %v\n", err) } fileWriter, err := os.Create(config.BindOutputFileName) if err != nil { log.Fatalf("[FATAL] Unable to open file (%s) for writing: %v", config.BindOutputFileName, err) } defer fileWriter.Close() bytesWritten, err := fileWriter.Write(output.Bytes()) if err != nil { log.Fatalf("[FATAL] Unable to write to file (%s): %v", config.BindOutputFileName, err) } log.Printf("[DEBUG] Wrote %d bytes to %s.\n", bytesWritten, config.BindOutputFileName) }