mirror of https://github.com/jetkvm/kvm.git
63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package dhclient
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"html/template"
|
|
"net"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
resolvConfPath = "/etc/resolv.conf"
|
|
resolvConfFileMode = 0644
|
|
resolvConfTemplate = `# the resolv.conf file is managed by the jetkvm-dhclient service
|
|
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
|
|
|
|
{{ if .searchList }}
|
|
search {{ join .searchList " " }} # {{ .iface }}
|
|
{{- end -}}
|
|
{{ if .domain }}
|
|
domain {{ .domain }} # {{ .iface }}
|
|
{{- end -}}
|
|
{{ range .nameservers }}
|
|
nameserver {{ printf "%s" . }} # {{ $.iface }}
|
|
{{- end }}
|
|
`
|
|
)
|
|
|
|
var (
|
|
tplFuncMap = template.FuncMap{
|
|
"join": strings.Join,
|
|
}
|
|
)
|
|
|
|
func toResolvConf(iface string, nameservers []net.IP, searchList []string, domain string) (bytes.Buffer, error) {
|
|
rc := bytes.Buffer{}
|
|
tmpl, err := template.New("resolv.conf").Funcs(tplFuncMap).Parse(resolvConfTemplate)
|
|
if err != nil {
|
|
return rc, fmt.Errorf("failed to parse template: %w", err)
|
|
}
|
|
|
|
if err := tmpl.Execute(&rc, map[string]interface{}{
|
|
"iface": iface,
|
|
"nameservers": nameservers,
|
|
"searchList": searchList,
|
|
"domain": domain,
|
|
}); err != nil {
|
|
return rc, fmt.Errorf("failed to execute template: %w", err)
|
|
}
|
|
|
|
return rc, nil
|
|
}
|
|
|
|
func updateResolvConf(iface string, nameservers []net.IP, searchList []string, domain string) error {
|
|
rc, err := toResolvConf(iface, nameservers, searchList, domain)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return os.WriteFile(resolvConfPath, rc.Bytes(), resolvConfFileMode)
|
|
}
|