mirror of
https://github.com/storytold/irsa-manager.git
synced 2026-10-09 00:09:43 +00:00
74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
package kubernetes
|
|
|
|
import (
|
|
"context"
|
|
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
|
|
)
|
|
|
|
type Handler struct {
|
|
cleanup bool
|
|
client client.Client
|
|
owner Owner
|
|
}
|
|
|
|
// NewHelper returns an initialized Helper.
|
|
func NewHandler(c client.Client, owner Owner, cleanup bool) (*Handler, error) {
|
|
return &Handler{
|
|
cleanup: cleanup,
|
|
client: c,
|
|
owner: owner,
|
|
}, nil
|
|
}
|
|
|
|
func (h Handler) Apply(ctx context.Context, obj client.Object) error {
|
|
opts := []client.PatchOption{
|
|
client.ForceOwnership,
|
|
client.FieldOwner(h.owner.Field),
|
|
}
|
|
gvk, err := apiutil.GVKForObject(obj, h.client.Scheme())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
u := &unstructured.Unstructured{}
|
|
unstructured, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
u.Object = unstructured
|
|
u.SetGroupVersionKind(gvk)
|
|
u.SetManagedFields(nil)
|
|
err = h.client.Patch(ctx, u, client.Apply, opts...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (h Handler) PatchStatus(ctx context.Context, obj client.Object) error {
|
|
opts := &client.SubResourcePatchOptions{
|
|
PatchOptions: client.PatchOptions{
|
|
FieldManager: h.owner.Field,
|
|
},
|
|
}
|
|
gvk, err := apiutil.GVKForObject(obj, h.client.Scheme())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
u := &unstructured.Unstructured{}
|
|
unstructured, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
u.Object = unstructured
|
|
u.SetGroupVersionKind(gvk)
|
|
u.SetManagedFields(nil)
|
|
return h.client.Status().Patch(ctx, u, client.Apply, opts)
|
|
}
|