github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/net/configurator/resolvConf.go (about) 1 package configurator 2 3 import ( 4 "bufio" 5 "bytes" 6 "fmt" 7 "io" 8 "path/filepath" 9 10 "github.com/Cloud-Foundations/Dominator/lib/fsutil" 11 hyper_proto "github.com/Cloud-Foundations/Dominator/proto/hypervisor" 12 ) 13 14 func printResolvConf(writer io.Writer, subnet *hyper_proto.Subnet) error { 15 if subnet.DomainName != "" { 16 fmt.Fprintf(writer, "domain %s\n", subnet.DomainName) 17 fmt.Fprintf(writer, "search %s\n", subnet.DomainName) 18 fmt.Fprintln(writer) 19 } 20 for _, nameserver := range subnet.DomainNameServers { 21 fmt.Fprintf(writer, "nameserver %s\n", nameserver) 22 } 23 return nil 24 } 25 26 func updateResolvConf(rootDir string, 27 subnet *hyper_proto.Subnet) (bool, error) { 28 buffer := &bytes.Buffer{} 29 fmt.Fprintln(buffer, 30 "; /etc/resolv.conf -- created by SmallStack installer") 31 fmt.Fprintln(buffer) // Split to keep stupid linter happy. 32 if err := printResolvConf(buffer, subnet); err != nil { 33 return false, err 34 } 35 filename := filepath.Join(rootDir, "etc", "resolv.conf") 36 return fsutil.UpdateFile(buffer.Bytes(), filename) 37 } 38 39 func writeResolvConf(rootDir string, subnet *hyper_proto.Subnet) error { 40 filename := filepath.Join(rootDir, "etc", "resolv.conf") 41 file, err := fsutil.CreateRenamingWriter(filename, fsutil.PublicFilePerms) 42 if err != nil { 43 return err 44 } 45 defer file.Close() 46 writer := bufio.NewWriter(file) 47 fmt.Fprintln(writer, 48 "; /etc/resolv.conf -- created by SmallStack installer") 49 fmt.Fprintln(writer) // Split to keep stupid linter happy. 50 if err := printResolvConf(writer, subnet); err != nil { 51 return err 52 } 53 return writer.Flush() 54 }