func copyConfigMapDataIfChanged()

in images/controller/cmd/app_finder/app_finder.go [194:222]


func copyConfigMapDataIfChanged(cm broker.ConfigMapObject, tmpDirBase, destDir, cacheKey string, checksums map[string]string) error {
	tmpDir, err := ioutil.TempDir(tmpDirBase, "bundle")
	if err != nil {
		return fmt.Errorf("failed to create staging dir at base: %s: %v", tmpDirBase, err)
	}
	defer os.RemoveAll(tmpDir)

	if err := cm.SaveDataToDirectory(tmpDir); err != nil {
		return fmt.Errorf("failed to save bundle ConfigMap '%s' to %s: %v", cm.Metadata.Name, tmpDir, err)
	}

	// Compute and cache checksum to know if we need to update the working mainfests.
	prevChecksum := checksums[cacheKey]
	if checksums[cacheKey], err = broker.ChecksumDeploy(tmpDir); err != nil {
		return fmt.Errorf("failed to checksum build output directory: %v", err)
	}
	if prevChecksum != checksums[cacheKey] {
		log.Printf("%s manifest checksum: %s", cacheKey, checksums[cacheKey])
		if err := os.MkdirAll(path.Dir(destDir), os.ModePerm); err != nil {
			return err
		}
		os.RemoveAll(destDir)
		if err := os.Rename(tmpDir, destDir); err != nil {
			return fmt.Errorf("failed to move manifest bundle ConfigMap data to %s: %v", destDir, err)
		}
	}

	return nil
}