Files
irsa-manager/internal/kubernetes/apply.go
T
2024-04-09 22:06:54 +09:00

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)
}