65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
package crd
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"flink-kube-operator/pkg"
|
|
|
|
"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 sub-resource
|
|
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 {
|
|
pkg.Logger.Error(
|
|
"[crd] [status] error patching custom resource status",
|
|
zap.String("namespace", job.GetNamespace()),
|
|
zap.Error(err),
|
|
)
|
|
return err
|
|
}
|
|
newJob, err := convertFromUnstructured(unstructuredJob)
|
|
if err != nil {
|
|
pkg.Logger.Error("[crd] [status] error in structure unstructured patched", zap.Error(err))
|
|
} else {
|
|
pkg.Logger.Debug("[crd] [status] patched")
|
|
}
|
|
jobs[jobUid] = newJob
|
|
if err != nil {
|
|
pkg.Logger.Error("[crd] [status] ", zap.Error(err))
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (crd Crd) PatchAll(patchData map[string]interface{}) error {
|
|
keys := GetAllJobKeys()
|
|
for _, key := range keys {
|
|
err := crd.Patch(key, patchData)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|