in appconfigmgrv2/controllers/appenvconfigtemplatev2_controller.go [270:306]
func (r *AppEnvConfigTemplateV2Reconciler) upsertUnstructured(
ctx context.Context,
desired *unstructured.Unstructured,
gvr schema.GroupVersionResource,
namespaced bool,
) error {
var client dynamic.ResourceInterface
if namespaced {
client = r.Dynamic.Resource(gvr).Namespace(desired.GetNamespace())
} else {
client = r.Dynamic.Resource(gvr)
}
found, err := client.Get(desired.GetName(), metav1.GetOptions{})
if err != nil {
if errors.IsNotFound(err) {
log.Info("Creating", "resource", gvr.Resource, "name", desired.GetName())
if _, err := client.Create(desired, metav1.CreateOptions{}); err != nil {
return fmt.Errorf("creating: %v", err)
}
return nil
}
return fmt.Errorf("getting: %v", err)
}
if !reflect.DeepEqual(desired.Object["spec"], found.Object["spec"]) {
found.Object["spec"] = desired.Object["spec"]
log.Info("Updating", "resource", gvr.Resource, "name", desired.GetName())
if _, err := client.Update(found, metav1.UpdateOptions{}); err != nil {
return fmt.Errorf("updating: %v", err)
}
return nil
}
return nil
}