package crd import ( "context" "encoding/json" "fmt" "gitea.com/logicamp/lc" "go.uber.org/zap" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ) func (crd Crd) Patch(jobUid types.UID, patchData map[string]interface{}) error { job := GetJob(jobUid) patchBytes, err := json.Marshal(patchData) if err != nil { return fmt.Errorf("error marshaling patch data: %w", err) } // Patch the status subresource unstructuredJob, err := crd.client. Namespace(job.GetNamespace()). Patch( context.Background(), job.GetName(), types.MergePatchType, // Use MergePatchType for JSON Merge Patch patchBytes, metaV1.PatchOptions{}, ) if err != nil { lc.Logger.Error( "[crd] [status] error patching custom resource status", zap.String("namespace", job.GetNamespace()), zap.Error(err), ) return err } _, err = convertFromUnstructured(unstructuredJob) if err != nil { lc.Logger.Error("[crd] [status] error in structure unstructured patched", zap.Error(err)) } else { lc.Logger.Debug("[crd] [status] patched") } if err != nil { lc.Logger.Error("[crd] [status] ", zap.Error(err)) return err } return nil }