From b9e63a8cbf8f646452f39f3cf028b546f8877308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Prokopi=C4=87?= Date: Fri, 10 Mar 2023 10:58:44 +0100 Subject: [PATCH 1/4] Enable setting peering properties --- api/v1beta1/types.go | 20 +++++++ api/v1beta1/zz_generated.deepcopy.go | 55 +++++++++++++++++-- azure/scope/cluster.go | 41 ++++++++------ azure/services/vnetpeerings/spec.go | 17 ++++-- ...ucture.cluster.x-k8s.io_azureclusters.yaml | 22 ++++++++ ...luster.x-k8s.io_azureclustertemplates.yaml | 22 ++++++++ 6 files changed, 150 insertions(+), 27 deletions(-) diff --git a/api/v1beta1/types.go b/api/v1beta1/types.go index 2514c30b805..02989107bf0 100644 --- a/api/v1beta1/types.go +++ b/api/v1beta1/types.go @@ -124,6 +124,26 @@ type VnetPeeringClassSpec struct { // RemoteVnetName defines name of the remote virtual network. RemoteVnetName string `json:"remoteVnetName"` + + // +optional + ForwardPeeringProperties VnetPeeringProperties `json:"forwardPeeringProperties,omitempty"` + + // +optional + ReversePeeringProperties VnetPeeringProperties `json:"reversePeeringProperties,omitempty"` +} + +type VnetPeeringProperties struct { + // +optional + AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"` + + // +optional + AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"` + + // +optional + AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"` + + // +optional + UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"` } // VnetPeerings is a slice of VnetPeering. diff --git a/api/v1beta1/zz_generated.deepcopy.go b/api/v1beta1/zz_generated.deepcopy.go index 8d24ee954fc..423d75406c5 100644 --- a/api/v1beta1/zz_generated.deepcopy.go +++ b/api/v1beta1/zz_generated.deepcopy.go @@ -3106,6 +3106,8 @@ func (in *VnetClassSpec) DeepCopy() *VnetClassSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VnetPeeringClassSpec) DeepCopyInto(out *VnetPeeringClassSpec) { *out = *in + in.ForwardPeeringProperties.DeepCopyInto(&out.ForwardPeeringProperties) + in.ReversePeeringProperties.DeepCopyInto(&out.ReversePeeringProperties) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VnetPeeringClassSpec. @@ -3118,10 +3120,45 @@ func (in *VnetPeeringClassSpec) DeepCopy() *VnetPeeringClassSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VnetPeeringProperties) DeepCopyInto(out *VnetPeeringProperties) { + *out = *in + if in.AllowForwardedTraffic != nil { + in, out := &in.AllowForwardedTraffic, &out.AllowForwardedTraffic + *out = new(bool) + **out = **in + } + if in.AllowGatewayTransit != nil { + in, out := &in.AllowGatewayTransit, &out.AllowGatewayTransit + *out = new(bool) + **out = **in + } + if in.AllowVirtualNetworkAccess != nil { + in, out := &in.AllowVirtualNetworkAccess, &out.AllowVirtualNetworkAccess + *out = new(bool) + **out = **in + } + if in.UseRemoteGateways != nil { + in, out := &in.UseRemoteGateways, &out.UseRemoteGateways + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VnetPeeringProperties. +func (in *VnetPeeringProperties) DeepCopy() *VnetPeeringProperties { + if in == nil { + return nil + } + out := new(VnetPeeringProperties) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *VnetPeeringSpec) DeepCopyInto(out *VnetPeeringSpec) { *out = *in - out.VnetPeeringClassSpec = in.VnetPeeringClassSpec + in.VnetPeeringClassSpec.DeepCopyInto(&out.VnetPeeringClassSpec) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VnetPeeringSpec. @@ -3139,7 +3176,9 @@ func (in VnetPeerings) DeepCopyInto(out *VnetPeerings) { { in := &in *out = make(VnetPeerings, len(*in)) - copy(*out, *in) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } } @@ -3158,7 +3197,9 @@ func (in VnetPeeringsTemplateSpec) DeepCopyInto(out *VnetPeeringsTemplateSpec) { { in := &in *out = make(VnetPeeringsTemplateSpec, len(*in)) - copy(*out, *in) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } } @@ -3178,7 +3219,9 @@ func (in *VnetSpec) DeepCopyInto(out *VnetSpec) { if in.Peerings != nil { in, out := &in.Peerings, &out.Peerings *out = make(VnetPeerings, len(*in)) - copy(*out, *in) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } in.VnetClassSpec.DeepCopyInto(&out.VnetClassSpec) } @@ -3200,7 +3243,9 @@ func (in *VnetTemplateSpec) DeepCopyInto(out *VnetTemplateSpec) { if in.Peerings != nil { in, out := &in.Peerings, &out.Peerings *out = make(VnetPeeringsTemplateSpec, len(*in)) - copy(*out, *in) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } } diff --git a/azure/scope/cluster.go b/azure/scope/cluster.go index f0edb2b1971..f38075ce9d0 100644 --- a/azure/scope/cluster.go +++ b/azure/scope/cluster.go @@ -29,6 +29,11 @@ import ( "github.com/pkg/errors" "k8s.io/utils/net" "k8s.io/utils/pointer" + clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" + "sigs.k8s.io/cluster-api/util/conditions" + "sigs.k8s.io/cluster-api/util/patch" + "sigs.k8s.io/controller-runtime/pkg/client" + infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1" "sigs.k8s.io/cluster-api-provider-azure/azure" "sigs.k8s.io/cluster-api-provider-azure/azure/services/bastionhosts" @@ -45,10 +50,6 @@ import ( "sigs.k8s.io/cluster-api-provider-azure/azure/services/vnetpeerings" "sigs.k8s.io/cluster-api-provider-azure/util/futures" "sigs.k8s.io/cluster-api-provider-azure/util/tele" - clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" - "sigs.k8s.io/cluster-api/util/conditions" - "sigs.k8s.io/cluster-api/util/patch" - "sigs.k8s.io/controller-runtime/pkg/client" ) // ClusterScopeParams defines the input parameters used to create a new Scope. @@ -425,20 +426,28 @@ func (s *ClusterScope) VnetPeeringSpecs() []azure.ResourceSpecGetter { peeringSpecs := make([]azure.ResourceSpecGetter, 2*len(s.Vnet().Peerings)) for i, peering := range s.Vnet().Peerings { forwardPeering := &vnetpeerings.VnetPeeringSpec{ - PeeringName: azure.GenerateVnetPeeringName(s.Vnet().Name, peering.RemoteVnetName), - SourceVnetName: s.Vnet().Name, - SourceResourceGroup: s.Vnet().ResourceGroup, - RemoteVnetName: peering.RemoteVnetName, - RemoteResourceGroup: peering.ResourceGroup, - SubscriptionID: s.SubscriptionID(), + PeeringName: azure.GenerateVnetPeeringName(s.Vnet().Name, peering.RemoteVnetName), + SourceVnetName: s.Vnet().Name, + SourceResourceGroup: s.Vnet().ResourceGroup, + RemoteVnetName: peering.RemoteVnetName, + RemoteResourceGroup: peering.ResourceGroup, + SubscriptionID: s.SubscriptionID(), + AllowForwardedTraffic: peering.ForwardPeeringProperties.AllowForwardedTraffic, + AllowGatewayTransit: peering.ForwardPeeringProperties.AllowGatewayTransit, + AllowVirtualNetworkAccess: peering.ForwardPeeringProperties.AllowVirtualNetworkAccess, + UseRemoteGateways: peering.ForwardPeeringProperties.UseRemoteGateways, } reversePeering := &vnetpeerings.VnetPeeringSpec{ - PeeringName: azure.GenerateVnetPeeringName(peering.RemoteVnetName, s.Vnet().Name), - SourceVnetName: peering.RemoteVnetName, - SourceResourceGroup: peering.ResourceGroup, - RemoteVnetName: s.Vnet().Name, - RemoteResourceGroup: s.Vnet().ResourceGroup, - SubscriptionID: s.SubscriptionID(), + PeeringName: azure.GenerateVnetPeeringName(peering.RemoteVnetName, s.Vnet().Name), + SourceVnetName: peering.RemoteVnetName, + SourceResourceGroup: peering.ResourceGroup, + RemoteVnetName: s.Vnet().Name, + RemoteResourceGroup: s.Vnet().ResourceGroup, + SubscriptionID: s.SubscriptionID(), + AllowForwardedTraffic: peering.ReversePeeringProperties.AllowForwardedTraffic, + AllowGatewayTransit: peering.ReversePeeringProperties.AllowGatewayTransit, + AllowVirtualNetworkAccess: peering.ReversePeeringProperties.AllowVirtualNetworkAccess, + UseRemoteGateways: peering.ReversePeeringProperties.UseRemoteGateways, } peeringSpecs[i*2] = forwardPeering peeringSpecs[i*2+1] = reversePeering diff --git a/azure/services/vnetpeerings/spec.go b/azure/services/vnetpeerings/spec.go index 9cc8a649cf7..a9f6d14e5e5 100644 --- a/azure/services/vnetpeerings/spec.go +++ b/azure/services/vnetpeerings/spec.go @@ -22,17 +22,22 @@ import ( "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2021-08-01/network" "github.com/pkg/errors" "k8s.io/utils/pointer" + "sigs.k8s.io/cluster-api-provider-azure/azure" ) // VnetPeeringSpec defines the specification for a virtual network peering. type VnetPeeringSpec struct { - SourceResourceGroup string - SourceVnetName string - RemoteResourceGroup string - RemoteVnetName string - PeeringName string - SubscriptionID string + SourceResourceGroup string + SourceVnetName string + RemoteResourceGroup string + RemoteVnetName string + PeeringName string + SubscriptionID string + AllowForwardedTraffic *bool + AllowGatewayTransit *bool + AllowVirtualNetworkAccess *bool + UseRemoteGateways *bool } // ResourceName returns the name of the virtual network peering. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_azureclusters.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_azureclusters.yaml index 041665518c9..27c213856ec 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_azureclusters.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_azureclusters.yaml @@ -2377,6 +2377,17 @@ spec: virtual network to peer with the AzureCluster's virtual network. properties: + forwardPeeringProperties: + properties: + allowForwardedTraffic: + type: boolean + allowGatewayTransit: + type: boolean + allowVirtualNetworkAccess: + type: boolean + useRemoteGateways: + type: boolean + type: object remoteVnetName: description: RemoteVnetName defines name of the remote virtual network. @@ -2385,6 +2396,17 @@ spec: description: ResourceGroup is the resource group name of the remote virtual network. type: string + reversePeeringProperties: + properties: + allowForwardedTraffic: + type: boolean + allowGatewayTransit: + type: boolean + allowVirtualNetworkAccess: + type: boolean + useRemoteGateways: + type: boolean + type: object required: - remoteVnetName type: object diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_azureclustertemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_azureclustertemplates.yaml index 850314b6c7e..36b37c236a2 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_azureclustertemplates.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_azureclustertemplates.yaml @@ -787,6 +787,17 @@ spec: description: VnetPeeringClassSpec specifies a virtual network peering class. properties: + forwardPeeringProperties: + properties: + allowForwardedTraffic: + type: boolean + allowGatewayTransit: + type: boolean + allowVirtualNetworkAccess: + type: boolean + useRemoteGateways: + type: boolean + type: object remoteVnetName: description: RemoteVnetName defines name of the remote virtual network. @@ -795,6 +806,17 @@ spec: description: ResourceGroup is the resource group name of the remote virtual network. type: string + reversePeeringProperties: + properties: + allowForwardedTraffic: + type: boolean + allowGatewayTransit: + type: boolean + allowVirtualNetworkAccess: + type: boolean + useRemoteGateways: + type: boolean + type: object required: - remoteVnetName type: object From b95ad46a19fb6edcf5fa8dc50c9ef3063701a134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Prokopi=C4=87?= Date: Mon, 13 Mar 2023 12:34:47 +0100 Subject: [PATCH 2/4] Set missing peering parameters in Azure API call --- azure/services/vnetpeerings/spec.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/azure/services/vnetpeerings/spec.go b/azure/services/vnetpeerings/spec.go index a9f6d14e5e5..e1a8179d3da 100644 --- a/azure/services/vnetpeerings/spec.go +++ b/azure/services/vnetpeerings/spec.go @@ -69,6 +69,10 @@ func (s *VnetPeeringSpec) Parameters(ctx context.Context, existing interface{}) RemoteVirtualNetwork: &network.SubResource{ ID: pointer.String(vnetID), }, + AllowForwardedTraffic: s.AllowForwardedTraffic, + AllowGatewayTransit: s.AllowGatewayTransit, + AllowVirtualNetworkAccess: s.AllowVirtualNetworkAccess, + UseRemoteGateways: s.UseRemoteGateways, } return network.VirtualNetworkPeering{ Name: pointer.String(s.PeeringName), From cea87be359465889c5cc44cdc2144e119cf06acd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Prokopi=C4=87?= Date: Tue, 21 Mar 2023 18:03:19 +0100 Subject: [PATCH 3/4] Add unit tests for VNet peering with additional properties --- .../vnetpeerings/vnetpeerings_test.go | 60 +++++++++++++++---- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/azure/services/vnetpeerings/vnetpeerings_test.go b/azure/services/vnetpeerings/vnetpeerings_test.go index a05e3f9cafc..3f9bfd5c205 100644 --- a/azure/services/vnetpeerings/vnetpeerings_test.go +++ b/azure/services/vnetpeerings/vnetpeerings_test.go @@ -23,8 +23,10 @@ import ( "testing" "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/to" "github.com/golang/mock/gomock" . "github.com/onsi/gomega" + infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1" "sigs.k8s.io/cluster-api-provider-azure/azure" "sigs.k8s.io/cluster-api-provider-azure/azure/services/async/mock_async" @@ -65,6 +67,30 @@ var ( RemoteResourceGroup: "group1", SubscriptionID: "sub1", } + fakePeeringHubToSpoke = VnetPeeringSpec{ + PeeringName: "hub-to-spoke", + SourceVnetName: "hub-vnet", + SourceResourceGroup: "hub-group", + RemoteVnetName: "spoke-vnet", + RemoteResourceGroup: "spoke-group", + SubscriptionID: "sub1", + AllowForwardedTraffic: to.BoolPtr(true), + AllowGatewayTransit: to.BoolPtr(true), + AllowVirtualNetworkAccess: to.BoolPtr(true), + UseRemoteGateways: to.BoolPtr(false), + } + fakePeeringSpokeToHub = VnetPeeringSpec{ + PeeringName: "spoke-to-hub", + SourceVnetName: "spoke-vnet", + SourceResourceGroup: "spoke-group", + RemoteVnetName: "hub-vnet", + RemoteResourceGroup: "hub-group", + SubscriptionID: "sub1", + AllowForwardedTraffic: to.BoolPtr(true), + AllowGatewayTransit: to.BoolPtr(false), + AllowVirtualNetworkAccess: to.BoolPtr(true), + UseRemoteGateways: to.BoolPtr(true), + } fakePeeringExtra = VnetPeeringSpec{ PeeringName: "extra-peering", SourceVnetName: "vnet3", @@ -73,7 +99,7 @@ var ( RemoteResourceGroup: "group4", SubscriptionID: "sub1", } - fakePeeringSpecs = []azure.ResourceSpecGetter{&fakePeering1To2, &fakePeering2To1, &fakePeering1To3, &fakePeering3To1} + fakePeeringSpecs = []azure.ResourceSpecGetter{&fakePeering1To2, &fakePeering2To1, &fakePeering1To3, &fakePeering3To1, &fakePeeringHubToSpoke, &fakePeeringSpokeToHub} fakePeeringExtraSpecs = []azure.ResourceSpecGetter{&fakePeering1To2, &fakePeering2To1, &fakePeeringExtra} internalError = autorest.NewErrorWithResponse("", "", &http.Response{StatusCode: http.StatusInternalServerError}, "Internal Server Error") notDoneError = azure.NewOperationNotDoneError(&infrav1.Future{}) @@ -131,6 +157,8 @@ func TestReconcileVnetPeerings(t *testing.T) { r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(&fakePeering2To1, nil) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(&fakePeering1To3, nil) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(&fakePeering3To1, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(&fakePeeringHubToSpoke, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(&fakePeeringSpokeToHub, nil) p.UpdatePutStatus(infrav1.VnetPeeringReadyCondition, ServiceName, nil) }, }, @@ -143,18 +171,8 @@ func TestReconcileVnetPeerings(t *testing.T) { r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(&fakePeering2To1, nil) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(nil, internalError) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(&fakePeering3To1, nil) - p.UpdatePutStatus(infrav1.VnetPeeringReadyCondition, ServiceName, internalError) - }, - }, - { - name: "error in creating peering", - expectedError: "#: Internal Server Error: StatusCode=500", - expect: func(p *mock_vnetpeerings.MockVnetPeeringScopeMockRecorder, r *mock_async.MockReconcilerMockRecorder) { - p.VnetPeeringSpecs().Return(fakePeeringSpecs) - r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering1To2, ServiceName).Return(&fakePeering1To2, nil) - r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(&fakePeering2To1, nil) - r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(nil, internalError) - r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(&fakePeering3To1, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(&fakePeeringHubToSpoke, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(&fakePeeringSpokeToHub, nil) p.UpdatePutStatus(infrav1.VnetPeeringReadyCondition, ServiceName, internalError) }, }, @@ -167,6 +185,8 @@ func TestReconcileVnetPeerings(t *testing.T) { r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(nil, internalError) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(nil, notDoneError) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(&fakePeering3To1, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(&fakePeeringHubToSpoke, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(&fakePeeringSpokeToHub, nil) p.UpdatePutStatus(infrav1.VnetPeeringReadyCondition, ServiceName, internalError) }, }, @@ -179,6 +199,8 @@ func TestReconcileVnetPeerings(t *testing.T) { r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(&fakePeering2To1, nil) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(nil, notDoneError) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(nil, internalError) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(&fakePeeringHubToSpoke, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(&fakePeeringSpokeToHub, nil) p.UpdatePutStatus(infrav1.VnetPeeringReadyCondition, ServiceName, internalError) }, }, @@ -191,6 +213,8 @@ func TestReconcileVnetPeerings(t *testing.T) { r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(&fakePeering2To1, nil) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(nil, notDoneError) r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(&fakePeering3To1, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(&fakePeeringHubToSpoke, nil) + r.CreateOrUpdateResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(&fakePeeringSpokeToHub, nil) p.UpdatePutStatus(infrav1.VnetPeeringReadyCondition, ServiceName, notDoneError) }, }, @@ -277,6 +301,8 @@ func TestDeleteVnetPeerings(t *testing.T) { r.DeleteResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(nil) r.DeleteResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(nil) r.DeleteResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(nil) p.UpdateDeleteStatus(infrav1.VnetPeeringReadyCondition, ServiceName, nil) }, }, @@ -289,6 +315,8 @@ func TestDeleteVnetPeerings(t *testing.T) { r.DeleteResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(nil) r.DeleteResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(internalError) r.DeleteResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(nil) p.UpdateDeleteStatus(infrav1.VnetPeeringReadyCondition, ServiceName, internalError) }, }, @@ -301,6 +329,8 @@ func TestDeleteVnetPeerings(t *testing.T) { r.DeleteResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(internalError) r.DeleteResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(notDoneError) r.DeleteResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(nil) p.UpdateDeleteStatus(infrav1.VnetPeeringReadyCondition, ServiceName, internalError) }, }, @@ -313,6 +343,8 @@ func TestDeleteVnetPeerings(t *testing.T) { r.DeleteResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(nil) r.DeleteResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(notDoneError) r.DeleteResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(internalError) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(nil) p.UpdateDeleteStatus(infrav1.VnetPeeringReadyCondition, ServiceName, internalError) }, }, @@ -325,6 +357,8 @@ func TestDeleteVnetPeerings(t *testing.T) { r.DeleteResource(gomockinternal.AContext(), &fakePeering2To1, ServiceName).Return(nil) r.DeleteResource(gomockinternal.AContext(), &fakePeering1To3, ServiceName).Return(notDoneError) r.DeleteResource(gomockinternal.AContext(), &fakePeering3To1, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringHubToSpoke, ServiceName).Return(nil) + r.DeleteResource(gomockinternal.AContext(), &fakePeeringSpokeToHub, ServiceName).Return(nil) p.UpdateDeleteStatus(infrav1.VnetPeeringReadyCondition, ServiceName, notDoneError) }, }, From 6c1ebe0c666602fbfe3ce5d69dd155ab921e2a2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Prokopi=C4=87?= Date: Mon, 3 Apr 2023 13:36:57 +0200 Subject: [PATCH 4/4] Refactor VNet peering unit tests --- .../services/vnetpeerings/vnetpeerings_test.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/azure/services/vnetpeerings/vnetpeerings_test.go b/azure/services/vnetpeerings/vnetpeerings_test.go index 3f9bfd5c205..beefccd78a3 100644 --- a/azure/services/vnetpeerings/vnetpeerings_test.go +++ b/azure/services/vnetpeerings/vnetpeerings_test.go @@ -23,9 +23,9 @@ import ( "testing" "github.com/Azure/go-autorest/autorest" - "github.com/Azure/go-autorest/autorest/to" "github.com/golang/mock/gomock" . "github.com/onsi/gomega" + "k8s.io/utils/pointer" infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1" "sigs.k8s.io/cluster-api-provider-azure/azure" @@ -74,10 +74,10 @@ var ( RemoteVnetName: "spoke-vnet", RemoteResourceGroup: "spoke-group", SubscriptionID: "sub1", - AllowForwardedTraffic: to.BoolPtr(true), - AllowGatewayTransit: to.BoolPtr(true), - AllowVirtualNetworkAccess: to.BoolPtr(true), - UseRemoteGateways: to.BoolPtr(false), + AllowForwardedTraffic: pointer.Bool(true), + AllowGatewayTransit: pointer.Bool(true), + AllowVirtualNetworkAccess: pointer.Bool(true), + UseRemoteGateways: pointer.Bool(false), } fakePeeringSpokeToHub = VnetPeeringSpec{ PeeringName: "spoke-to-hub", @@ -86,10 +86,10 @@ var ( RemoteVnetName: "hub-vnet", RemoteResourceGroup: "hub-group", SubscriptionID: "sub1", - AllowForwardedTraffic: to.BoolPtr(true), - AllowGatewayTransit: to.BoolPtr(false), - AllowVirtualNetworkAccess: to.BoolPtr(true), - UseRemoteGateways: to.BoolPtr(true), + AllowForwardedTraffic: pointer.Bool(true), + AllowGatewayTransit: pointer.Bool(false), + AllowVirtualNetworkAccess: pointer.Bool(true), + UseRemoteGateways: pointer.Bool(true), } fakePeeringExtra = VnetPeeringSpec{ PeeringName: "extra-peering",