From a4dfa1e8dc1c21fbb75e9e6a591162bc8eba9801 Mon Sep 17 00:00:00 2001 From: Matthew Long <61910737+thatmattlong@users.noreply.github.com> Date: Thu, 18 Nov 2021 17:22:00 -0800 Subject: [PATCH 1/3] feat: nnc client sets ownerref --- crd/nodenetworkconfig/client.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/crd/nodenetworkconfig/client.go b/crd/nodenetworkconfig/client.go index 29f0bcbc42..2056225b7f 100644 --- a/crd/nodenetworkconfig/client.go +++ b/crd/nodenetworkconfig/client.go @@ -16,6 +16,7 @@ import ( clientgoscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" ctrlcli "sigs.k8s.io/controller-runtime/pkg/client" + ctrlutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) // Scheme is a runtime scheme containing the client-go scheme and the NodeNetworkConfig scheme. @@ -26,6 +27,12 @@ func init() { _ = v1alpha.AddToScheme(Scheme) } +type OwnerExistsError struct{} + +func (*OwnerExistsError) Error() string { + return "OwnerRef already exists and does not match" +} + // Client is provided to interface with the NodeNetworkConfig CRDs. type Client struct { nnccli ctrlcli.Client @@ -136,3 +143,20 @@ func (c *Client) UpdateSpec(ctx context.Context, key types.NamespacedName, spec } return nnc, nil } + +// SetOwnerRef sets the owner of the NodeNetworkConfig to the given object, using HTTP Patch +func (c *Client) SetOwnerRef(ctx context.Context, nnc *v1alpha.NodeNetworkConfig, owner metav1.Object) error { + newNNC := nnc.DeepCopy() + if err := ctrlutil.SetControllerReference(owner, newNNC, Scheme); err != nil { + // SetControllerReference returns an error if the object already has a different owner or + // if there are issues with the scheme. Since we control the scheme in this package, we can safely + // assume than any error is caused by an owner already existing + return &OwnerExistsError{} + } + + if err := c.nnccli.Patch(ctx, newNNC, ctrlcli.MergeFrom(nnc)); err != nil { + return err + } + + return nil +} From 9a2a46e56fd0f16ca932f85bf3eb72f8a6329b7a Mon Sep 17 00:00:00 2001 From: Matthew Long <61910737+thatmattlong@users.noreply.github.com> Date: Mon, 29 Nov 2021 13:32:16 -0800 Subject: [PATCH 2/3] fix: linter issues --- crd/nodenetworkconfig/client.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crd/nodenetworkconfig/client.go b/crd/nodenetworkconfig/client.go index 2056225b7f..f233bab065 100644 --- a/crd/nodenetworkconfig/client.go +++ b/crd/nodenetworkconfig/client.go @@ -2,6 +2,7 @@ package nodenetworkconfig import ( "context" + "fmt" "reflect" "github.com/Azure/azure-container-networking/crd" @@ -155,7 +156,7 @@ func (c *Client) SetOwnerRef(ctx context.Context, nnc *v1alpha.NodeNetworkConfig } if err := c.nnccli.Patch(ctx, newNNC, ctrlcli.MergeFrom(nnc)); err != nil { - return err + return fmt.Errorf("could not PATCH NNC %s: %w", nnc.Name, err) } return nil From 0a306092f8fbe46950133a89fe703ff9291871f6 Mon Sep 17 00:00:00 2001 From: Matthew Long <61910737+thatmattlong@users.noreply.github.com> Date: Mon, 29 Nov 2021 13:52:20 -0800 Subject: [PATCH 3/3] fix: don't use unnecessary custom error type --- crd/nodenetworkconfig/client.go | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/crd/nodenetworkconfig/client.go b/crd/nodenetworkconfig/client.go index f233bab065..35488b68d2 100644 --- a/crd/nodenetworkconfig/client.go +++ b/crd/nodenetworkconfig/client.go @@ -28,12 +28,6 @@ func init() { _ = v1alpha.AddToScheme(Scheme) } -type OwnerExistsError struct{} - -func (*OwnerExistsError) Error() string { - return "OwnerRef already exists and does not match" -} - // Client is provided to interface with the NodeNetworkConfig CRDs. type Client struct { nnccli ctrlcli.Client @@ -146,18 +140,15 @@ func (c *Client) UpdateSpec(ctx context.Context, key types.NamespacedName, spec } // SetOwnerRef sets the owner of the NodeNetworkConfig to the given object, using HTTP Patch -func (c *Client) SetOwnerRef(ctx context.Context, nnc *v1alpha.NodeNetworkConfig, owner metav1.Object) error { +func (c *Client) SetOwnerRef(ctx context.Context, nnc *v1alpha.NodeNetworkConfig, owner metav1.Object) (*v1alpha.NodeNetworkConfig, error) { newNNC := nnc.DeepCopy() if err := ctrlutil.SetControllerReference(owner, newNNC, Scheme); err != nil { - // SetControllerReference returns an error if the object already has a different owner or - // if there are issues with the scheme. Since we control the scheme in this package, we can safely - // assume than any error is caused by an owner already existing - return &OwnerExistsError{} + return nil, fmt.Errorf("could not set controller reference for NNC %s/%s: %w", nnc.Namespace, nnc.Name, err) } if err := c.nnccli.Patch(ctx, newNNC, ctrlcli.MergeFrom(nnc)); err != nil { - return fmt.Errorf("could not PATCH NNC %s: %w", nnc.Name, err) + return nil, fmt.Errorf("could not patch NNC %s/%s: %w", nnc.Namespace, nnc.Name, err) } - return nil + return newNNC, nil }