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
}