pkg/dns/coredns.go
package dns
import (
"bytes"
"text/template"
)
type CoreFile struct {
Content []byte
}
// Body Gets the Caddyfile contents
func (c *CoreFile) Body() []byte {
return c.Content
}
// Path Gets the path to the origin file
func (c *CoreFile) Path() string {
return "CoreFile"
}
// ServerType The type of server this input is intended for
func (c *CoreFile) ServerType() string {
return "dns"
}
type CoreFileTmpl struct {
UpstreamDNS string
Nameservers string
}
func BuildCoreFile(corefileTmpl CoreFileTmpl) (*CoreFile, error) {
tplText := `
.:53 {
bind 127.0.0.1
forward cluster.local {{ .UpstreamDNS }}
forward . {{ .Nameservers }} {{ .UpstreamDNS }} {
policy sequential
max_concurrent 1
}
cache 30
log
errors
reload
}`
tpl, err := template.New("corefile").Parse(tplText)
if err != nil {
return nil, err
}
data := bytes.NewBuffer(nil)
if err := tpl.Execute(data, corefileTmpl); err != nil {
return nil, err
}
return &CoreFile{
Content: data.Bytes(),
}, nil
}