Skip to content

Commit

Permalink
Update PatchStatus for kubebuilder
Browse files Browse the repository at this point in the history
Signed-off-by: Tamal Saha <tamal@appscode.com>
  • Loading branch information
tamalsaha committed Jul 12, 2023
1 parent aba17ce commit 0e83699
Showing 1 changed file with 15 additions and 13 deletions.
28 changes: 15 additions & 13 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func CreateOrPatch(ctx context.Context, c client.Client, obj client.Object, tran
return kutil.VerbUnchanged, err
}

setValue(mod, obj)
assign(obj, mod)
return kutil.VerbCreated, err
} else if err != nil {
return kutil.VerbUnchanged, err
Expand All @@ -116,40 +116,42 @@ func CreateOrPatch(ctx context.Context, c client.Client, obj client.Object, tran
return kutil.VerbUnchanged, err
}

setValue(mod, obj)
assign(obj, mod)
return kutil.VerbPatched, nil
}

func setValue(src, target any) {
func assign(target, src any) {
srcValue := reflect.ValueOf(src)
if srcValue.Kind() == reflect.Pointer {
srcValue = srcValue.Elem()
}
reflect.ValueOf(target).Elem().Set(srcValue)
}

func PatchStatus(ctx context.Context, c client.Client, obj client.Object, transform TransformStatusFunc, opts ...client.PatchOption) (client.Object, kutil.VerbType, error) {
func PatchStatus(ctx context.Context, c client.Client, obj client.Object, transform TransformStatusFunc, opts ...client.PatchOption) (kutil.VerbType, error) {
cur := obj.DeepCopyObject().(client.Object)
key := types.NamespacedName{
Namespace: obj.GetNamespace(),
Name: obj.GetName(),
Namespace: cur.GetNamespace(),
Name: cur.GetName(),
}
err := c.Get(ctx, key, obj)
err := c.Get(ctx, key, cur)
if err != nil {
return nil, kutil.VerbUnchanged, err
return kutil.VerbUnchanged, err
}

// The body of the request was in an unknown format -
// accepted media types include:
// - application/json-patch+json,
// - application/merge-patch+json,
// - application/apply-patch+yaml
patch := client.MergeFrom(obj)
obj = transform(obj.DeepCopyObject().(client.Object))
err = c.Status().Patch(ctx, obj, patch, opts...)
patch := client.MergeFrom(cur)
mod := transform(cur.DeepCopyObject().(client.Object))
err = c.Status().Patch(ctx, mod, patch, opts...)
if err != nil {
return nil, kutil.VerbUnchanged, err
return kutil.VerbUnchanged, err
}
return obj, kutil.VerbPatched, nil
assign(obj, mod)
return kutil.VerbPatched, nil
}

func isOfficialTypes(group string) bool {
Expand Down

0 comments on commit 0e83699

Please sign in to comment.