Для любого типа, включая ваши CRD, используйте client.Client
.
Из документации:
// Using a typed object.
pod := &corev1.Pod{}
// c is a created client.
_ = c.Get(context.Background(), client.ObjectKey{
Namespace: "namespace",
Name: "name",
}, pod)
pod.SetFinalizers(append(pod.GetFinalizers(), "new-finalizer"))
_ = c.Update(context.Background(), pod)
// Using a unstructured object.
u := &unstructured.Unstructured{}
u.SetGroupVersionKind(schema.GroupVersionKind{
Group: "apps",
Kind: "Deployment",
Version: "v1",
})
_ = c.Get(context.Background(), client.ObjectKey{
Namespace: "namespace",
Name: "name",
}, u)
u.SetFinalizers(append(u.GetFinalizers(), "new-finalizer"))
_ = c.Update(context.Background(), u)
Вы также можете легко поменять местами SomeCustomResourceKind
:
myCR := &v1alpha1.SomeCustomResourceKind{}
// c is a created client.Client
_ = c.Get(context.TODO(), client.ObjectKey{
Namespace: "namespace",
Name: "some-custom-resource", }, myCR)
myCR.MyProperty = "NewValue"
_ = c.Update(context.TODO(), myCR)
Вы упомянули, что пытаетесь переместить эту функцию изbash-скрипт для контроллера Go, поэтому стоило бы проверить проект Kubebuilder , который может создать для вас контроллер (и любые дополнительные API, которые могут вам понадобиться).Он создает полнофункциональные контроллеры с клиентом времени выполнения контроллера и подключает всю логику согласования для управления вашими CRD.