in pkg/dns/config/sync_dir.go [77:132]
func (syncSource *kubeFileSyncSource) load() (syncResult, error) {
hasher := sha256.New()
data := map[string]string{}
err := filepath.Walk(syncSource.dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// special case for the root
if path == syncSource.dir {
if info.IsDir() {
return nil
}
return fmt.Errorf("config path %q is not a directory", path)
}
// don't recurse
if info.IsDir() {
return filepath.SkipDir
}
// skip hidden files
filename := filepath.Base(path)
if strings.HasPrefix(filename, ".") {
return nil
}
filedata, err := ioutil.ReadFile(path)
if err != nil {
return err
}
if !utf8.Valid(filedata) {
return fmt.Errorf("non-utf8 data in %s", path)
}
// Add data to version hash
hasher.Write([]byte(filename))
hasher.Write([]byte{0})
hasher.Write(filedata)
hasher.Write([]byte{0})
// Add data to map
data[filename] = string(filedata)
return nil
})
if err != nil {
return syncResult{}, err
}
// compute a version string from the hashed data
version := ""
if len(data) > 0 {
version = fmt.Sprintf("%x", hasher.Sum(nil))
}
return syncResult{Version: version, Data: data}, nil
}