func()

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
}