func Build()

in kinder/pkg/kubeadm/patch.go [58:100]


func Build(toPatch string, patches []string, patches6902 []PatchJSON6902) (string, error) {
	// pre-process, including splitting up documents etc.
	resources, err := parseResources(toPatch)
	if err != nil {
		return "", errors.Wrap(err, "failed to parse yaml to patch")
	}
	mergePatches, err := parseMergePatches(patches)
	if err != nil {
		return "", errors.Wrap(err, "failed to parse patches")
	}
	json6902patches, err := convertJSON6902Patches(patches6902)
	if err != nil {
		return "", errors.Wrap(err, "failed to parse JSON 6902 patches")
	}
	// apply patches and build result
	builder := &strings.Builder{}
	for i, r := range resources {
		// apply merge patches
		for _, p := range mergePatches {
			if _, err := r.applyMergePatch(p); err != nil {
				return "", errors.Wrap(err, "failed to apply patch")
			}
		}
		// apply RFC 6902 JSON patches
		for _, p := range json6902patches {
			if _, err := r.apply6902Patch(p); err != nil {
				return "", errors.Wrap(err, "failed to apply JSON 6902 patch")
			}
		}
		// write out result
		if err := r.encodeTo(builder); err != nil {
			return "", errors.Wrap(err, "failed to write patched resource")
		}
		// write document separator
		if i+1 < len(resources) {
			if _, err := builder.WriteString("---\n"); err != nil {
				return "", errors.Wrap(err, "failed to write document separator")
			}
		}
	}
	// verify that all patches were used
	return builder.String(), nil
}