func()

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
}