diff --git a/pkg/operator/controllers/previewfeature/nsgflowlogs/nsgflowlogs.go b/pkg/operator/controllers/previewfeature/nsgflowlogs/nsgflowlogs.go index b7f8428e6de..a044f0695dd 100644 --- a/pkg/operator/controllers/previewfeature/nsgflowlogs/nsgflowlogs.go +++ b/pkg/operator/controllers/previewfeature/nsgflowlogs/nsgflowlogs.go @@ -7,6 +7,7 @@ import ( "context" "time" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" sdknetwork "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2" "github.com/Azure/go-autorest/autorest/azure" "k8s.io/utils/ptr" @@ -16,7 +17,7 @@ import ( "github.com/Azure/ARO-RP/pkg/util/subnet" ) -func NewFeature(flowLogsClient armnetwork.FlowLogsClient, kubeSubnets subnet.KubeManager, subnets subnet.Manager, location string) *nsgFlowLogsFeature { +func NewFeature(flowLogsClient armnetwork.FlowLogsClient, kubeSubnets subnet.KubeManager, subnets armnetwork.SubnetsClient, location string) *nsgFlowLogsFeature { return &nsgFlowLogsFeature{ kubeSubnets: kubeSubnets, flowLogsClient: flowLogsClient, @@ -27,7 +28,7 @@ func NewFeature(flowLogsClient armnetwork.FlowLogsClient, kubeSubnets subnet.Kub type nsgFlowLogsFeature struct { kubeSubnets subnet.KubeManager - subnets subnet.Manager + subnets armnetwork.SubnetsClient flowLogsClient armnetwork.FlowLogsClient location string } @@ -135,11 +136,15 @@ func (n *nsgFlowLogsFeature) getNSGs(ctx context.Context) (map[string]struct{}, nsgs := map[string]struct{}{} for _, kubeSubnet := range subnets { - net, err := n.subnets.Get(ctx, kubeSubnet.ResourceID) + r, err := arm.ParseResourceID(kubeSubnet.ResourceID) if err != nil { return nil, err } - nsgs[*net.NetworkSecurityGroup.ID] = struct{}{} + net, err := n.subnets.Get(ctx, r.ResourceGroupName, r.Parent.Name, r.Name, nil) + if err != nil { + return nil, err + } + nsgs[*net.Properties.NetworkSecurityGroup.ID] = struct{}{} } return nsgs, nil } diff --git a/pkg/operator/controllers/previewfeature/nsgflowlogs/nsgflowlogs_test.go b/pkg/operator/controllers/previewfeature/nsgflowlogs/nsgflowlogs_test.go index 7e92fef5279..1aa8c576da1 100644 --- a/pkg/operator/controllers/previewfeature/nsgflowlogs/nsgflowlogs_test.go +++ b/pkg/operator/controllers/previewfeature/nsgflowlogs/nsgflowlogs_test.go @@ -8,7 +8,6 @@ import ( "testing" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2" - mgmtnetwork "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-08-01/network" "github.com/Azure/go-autorest/autorest/to" "go.uber.org/mock/gomock" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -85,14 +84,14 @@ func getValidFlowLogFeature() *armnetwork.FlowLog { func TestReconcileManager(t *testing.T) { for _, tt := range []struct { name string - subnetMock func(*mock_subnet.MockManager, *mock_subnet.MockKubeManager) + subnetMock func(*mock_armnetwork.MockSubnetsClient, *mock_subnet.MockKubeManager) instance func(*aropreviewv1alpha1.PreviewFeature) flowLogClientMock func(*mock_armnetwork.MockFlowLogsClient) wantErr string }{ { name: "do not enable flow log if parameters are missing/wrong", - subnetMock: func(mock *mock_subnet.MockManager, kmock *mock_subnet.MockKubeManager) { + subnetMock: func(mock *mock_armnetwork.MockSubnetsClient, kmock *mock_subnet.MockKubeManager) { kmock.EXPECT().List(gomock.Any()).Return([]subnet.Subnet{ { ResourceID: resourceIdMaster, @@ -101,17 +100,21 @@ func TestReconcileManager(t *testing.T) { ResourceID: resourceIdWorker, }, }, nil) - mock.EXPECT().Get(gomock.Any(), resourceIdMaster).Return(&mgmtnetwork.Subnet{ - SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{ - NetworkSecurityGroup: &mgmtnetwork.SecurityGroup{ - ID: &subnetNameMasterNSGID, + mock.EXPECT().Get(gomock.Any(), vnetResourceGroup, vnetName, subnetNameMaster, nil).Return(armnetwork.SubnetsClientGetResponse{ + Subnet: armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + NetworkSecurityGroup: &armnetwork.SecurityGroup{ + ID: &subnetNameMasterNSGID, + }, }, }, }, nil) - mock.EXPECT().Get(gomock.Any(), resourceIdWorker).Return(&mgmtnetwork.Subnet{ - SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{ - NetworkSecurityGroup: &mgmtnetwork.SecurityGroup{ - ID: &subnetNameWorkerNSGID, + mock.EXPECT().Get(gomock.Any(), vnetResourceGroup, vnetName, subnetNameWorker, nil).Return(armnetwork.SubnetsClientGetResponse{ + Subnet: armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + NetworkSecurityGroup: &armnetwork.SecurityGroup{ + ID: &subnetNameWorkerNSGID, + }, }, }, }, nil) @@ -123,7 +126,7 @@ func TestReconcileManager(t *testing.T) { }, { name: "enable flow log", - subnetMock: func(mock *mock_subnet.MockManager, kmock *mock_subnet.MockKubeManager) { + subnetMock: func(mock *mock_armnetwork.MockSubnetsClient, kmock *mock_subnet.MockKubeManager) { kmock.EXPECT().List(gomock.Any()).Return([]subnet.Subnet{ { ResourceID: resourceIdMaster, @@ -135,24 +138,30 @@ func TestReconcileManager(t *testing.T) { ResourceID: resourceIdWorker2, }, }, nil) - mock.EXPECT().Get(gomock.Any(), resourceIdMaster).Return(&mgmtnetwork.Subnet{ - SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{ - NetworkSecurityGroup: &mgmtnetwork.SecurityGroup{ - ID: &subnetNameMasterNSGID, + mock.EXPECT().Get(gomock.Any(), vnetResourceGroup, vnetName, subnetNameMaster, nil).Return(armnetwork.SubnetsClientGetResponse{ + Subnet: armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + NetworkSecurityGroup: &armnetwork.SecurityGroup{ + ID: &subnetNameMasterNSGID, + }, }, }, }, nil) - mock.EXPECT().Get(gomock.Any(), resourceIdWorker).Return(&mgmtnetwork.Subnet{ - SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{ - NetworkSecurityGroup: &mgmtnetwork.SecurityGroup{ - ID: &subnetNameMasterNSGID, // same NSG as the master subnet + mock.EXPECT().Get(gomock.Any(), vnetResourceGroup, vnetName, subnetNameWorker, nil).Return(armnetwork.SubnetsClientGetResponse{ + Subnet: armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + NetworkSecurityGroup: &armnetwork.SecurityGroup{ + ID: &subnetNameMasterNSGID, // same NSG as the master subnet + }, }, }, }, nil) - mock.EXPECT().Get(gomock.Any(), resourceIdWorker2).Return(&mgmtnetwork.Subnet{ - SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{ - NetworkSecurityGroup: &mgmtnetwork.SecurityGroup{ - ID: &subnetNameWorkerNSGID, // different NSG ID. expect another one call to create + mock.EXPECT().Get(gomock.Any(), vnetResourceGroup, vnetName, subnetNameWorker2, nil).Return(armnetwork.SubnetsClientGetResponse{ + Subnet: armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + NetworkSecurityGroup: &armnetwork.SecurityGroup{ + ID: &subnetNameWorkerNSGID, // different NSG ID. expect another one call to create + }, }, }, }, nil) @@ -175,7 +184,7 @@ func TestReconcileManager(t *testing.T) { }, { name: "disable flow log", - subnetMock: func(mock *mock_subnet.MockManager, kmock *mock_subnet.MockKubeManager) { + subnetMock: func(mock *mock_armnetwork.MockSubnetsClient, kmock *mock_subnet.MockKubeManager) { kmock.EXPECT().List(gomock.Any()).Return([]subnet.Subnet{ { ResourceID: resourceIdMaster, @@ -187,24 +196,30 @@ func TestReconcileManager(t *testing.T) { ResourceID: resourceIdWorker2, }, }, nil) - mock.EXPECT().Get(gomock.Any(), resourceIdMaster).Return(&mgmtnetwork.Subnet{ - SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{ - NetworkSecurityGroup: &mgmtnetwork.SecurityGroup{ - ID: &subnetNameMasterNSGID, + mock.EXPECT().Get(gomock.Any(), vnetResourceGroup, vnetName, subnetNameMaster, nil).Return(armnetwork.SubnetsClientGetResponse{ + Subnet: armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + NetworkSecurityGroup: &armnetwork.SecurityGroup{ + ID: &subnetNameMasterNSGID, + }, }, }, }, nil) - mock.EXPECT().Get(gomock.Any(), resourceIdWorker).Return(&mgmtnetwork.Subnet{ - SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{ - NetworkSecurityGroup: &mgmtnetwork.SecurityGroup{ - ID: &subnetNameMasterNSGID, // same NSG as the master subnet + mock.EXPECT().Get(gomock.Any(), vnetResourceGroup, vnetName, subnetNameWorker, nil).Return(armnetwork.SubnetsClientGetResponse{ + Subnet: armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + NetworkSecurityGroup: &armnetwork.SecurityGroup{ + ID: &subnetNameMasterNSGID, // same NSG as the master subnet + }, }, }, }, nil) - mock.EXPECT().Get(gomock.Any(), resourceIdWorker2).Return(&mgmtnetwork.Subnet{ - SubnetPropertiesFormat: &mgmtnetwork.SubnetPropertiesFormat{ - NetworkSecurityGroup: &mgmtnetwork.SecurityGroup{ - ID: &subnetNameWorkerNSGID, // in order to test calls to disable once per NSG + mock.EXPECT().Get(gomock.Any(), vnetResourceGroup, vnetName, subnetNameWorker2, nil).Return(armnetwork.SubnetsClientGetResponse{ + Subnet: armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + NetworkSecurityGroup: &armnetwork.SecurityGroup{ + ID: &subnetNameWorkerNSGID, // in order to test calls to disable once per NSG + }, }, }, }, nil) @@ -224,7 +239,7 @@ func TestReconcileManager(t *testing.T) { controller := gomock.NewController(t) defer controller.Finish() - subnets := mock_subnet.NewMockManager(controller) + subnets := mock_armnetwork.NewMockSubnetsClient(controller) kubeSubnets := mock_subnet.NewMockKubeManager(controller) if tt.subnetMock != nil { tt.subnetMock(subnets, kubeSubnets) diff --git a/pkg/operator/controllers/previewfeature/previewfeature_controller.go b/pkg/operator/controllers/previewfeature/previewfeature_controller.go index bb604a0391c..c65a9fb7a06 100644 --- a/pkg/operator/controllers/previewfeature/previewfeature_controller.go +++ b/pkg/operator/controllers/previewfeature/previewfeature_controller.go @@ -21,7 +21,6 @@ import ( "github.com/Azure/ARO-RP/pkg/operator/controllers/previewfeature/nsgflowlogs" "github.com/Azure/ARO-RP/pkg/util/azureclient" "github.com/Azure/ARO-RP/pkg/util/azureclient/azuresdk/armnetwork" - "github.com/Azure/ARO-RP/pkg/util/clusterauthorizer" "github.com/Azure/ARO-RP/pkg/util/subnet" ) @@ -73,17 +72,6 @@ func (r *Reconciler) Reconcile(ctx context.Context, request ctrl.Request) (ctrl. return reconcile.Result{}, err } - // create refreshable authorizer from token - azRefreshAuthorizer, err := clusterauthorizer.NewAzRefreshableAuthorizer(r.log, &azEnv, r.client) - if err != nil { - return reconcile.Result{}, err - } - - authorizer, err := azRefreshAuthorizer.NewRefreshableAuthorizerToken(ctx) - if err != nil { - return reconcile.Result{}, err - } - credential, err := azidentity.NewDefaultAzureCredential(azEnv.DefaultAzureCredentialOptions()) if err != nil { return reconcile.Result{}, err @@ -97,7 +85,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, request ctrl.Request) (ctrl. } kubeSubnets := subnet.NewKubeManager(r.client, resource.SubscriptionID) - subnets := subnet.NewManager(&azEnv, resource.SubscriptionID, authorizer) + subnets, err := armnetwork.NewSubnetsClient(resource.SubscriptionID, credential, options) + if err != nil { + return reconcile.Result{}, err + } features := []feature{ nsgflowlogs.NewFeature(flowLogsClient, kubeSubnets, subnets, clusterInstance.Spec.Location), diff --git a/pkg/util/azureclient/mgmt/network/flowlogs.go b/pkg/util/azureclient/mgmt/network/flowlogs.go deleted file mode 100644 index 154310905ea..00000000000 --- a/pkg/util/azureclient/mgmt/network/flowlogs.go +++ /dev/null @@ -1,37 +0,0 @@ -package network - -// Copyright (c) Microsoft Corporation. -// Licensed under the Apache License 2.0. - -import ( - "context" - - mgmtnetwork "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-08-01/network" - "github.com/Azure/go-autorest/autorest" - - "github.com/Azure/ARO-RP/pkg/util/azureclient" -) - -// FlowLogsClient is a minimal interface for azure FlowLogsClient -type FlowLogsClient interface { - Get(ctx context.Context, resourceGroupName string, networkWatcherName string, flowLogName string) (result mgmtnetwork.FlowLog, err error) - - FlowLogsClientAddons -} - -type flowLogsClient struct { - mgmtnetwork.FlowLogsClient -} - -var _ FlowLogsClient = &flowLogsClient{} - -// NewFlowLogsClient creates a new FlowLogsClient -func NewFlowLogsClient(environment *azureclient.AROEnvironment, tenantID string, authorizer autorest.Authorizer) FlowLogsClient { - client := mgmtnetwork.NewFlowLogsClientWithBaseURI(environment.ResourceManagerEndpoint, tenantID) - client.Authorizer = authorizer - client.Sender = azureclient.DecorateSenderWithLogging(client.Sender) - - return &flowLogsClient{ - FlowLogsClient: client, - } -} diff --git a/pkg/util/azureclient/mgmt/network/flowlogs_addons.go b/pkg/util/azureclient/mgmt/network/flowlogs_addons.go deleted file mode 100644 index 83b9c745a0b..00000000000 --- a/pkg/util/azureclient/mgmt/network/flowlogs_addons.go +++ /dev/null @@ -1,34 +0,0 @@ -package network - -// Copyright (c) Microsoft Corporation. -// Licensed under the Apache License 2.0. - -import ( - "context" - - mgmtnetwork "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-08-01/network" -) - -// FlowLogsClientAddons contains addons to WatchersClient -type FlowLogsClientAddons interface { - CreateOrUpdateAndWait(ctx context.Context, resourceGroupName string, networkWatcherName string, flowLogName string, parameters mgmtnetwork.FlowLog) error - DeleteAndWait(ctx context.Context, resourceGroupName string, networkWatcherName string, flowLogName string) error -} - -func (c *flowLogsClient) CreateOrUpdateAndWait(ctx context.Context, resourceGroupName string, networkWatcherName string, flowLogName string, parameters mgmtnetwork.FlowLog) error { - future, err := c.FlowLogsClient.CreateOrUpdate(ctx, resourceGroupName, networkWatcherName, flowLogName, parameters) - if err != nil { - return err - } - - return future.WaitForCompletionRef(ctx, c.Client) -} - -func (c *flowLogsClient) DeleteAndWait(ctx context.Context, resourceGroupName string, networkWatcherName string, flowLogName string) error { - future, err := c.FlowLogsClient.Delete(ctx, resourceGroupName, networkWatcherName, flowLogName) - if err != nil { - return err - } - - return future.WaitForCompletionRef(ctx, c.Client) -} diff --git a/pkg/util/azureclient/mgmt/network/generate.go b/pkg/util/azureclient/mgmt/network/generate.go index 8f32bf26402..1db32c1c85c 100644 --- a/pkg/util/azureclient/mgmt/network/generate.go +++ b/pkg/util/azureclient/mgmt/network/generate.go @@ -4,5 +4,5 @@ package network // Licensed under the Apache License 2.0. //go:generate rm -rf ../../../../util/mocks/$GOPACKAGE -//go:generate mockgen -destination=../../../../util/mocks/azureclient/mgmt/$GOPACKAGE/$GOPACKAGE.go github.com/Azure/ARO-RP/pkg/util/azureclient/mgmt/$GOPACKAGE InterfacesClient,LoadBalancersClient,PrivateEndpointsClient,PublicIPAddressesClient,LoadBalancerBackendAddressPoolsClient,RouteTablesClient,SubnetsClient,VirtualNetworksClient,UsageClient,FlowLogsClient +//go:generate mockgen -destination=../../../../util/mocks/azureclient/mgmt/$GOPACKAGE/$GOPACKAGE.go github.com/Azure/ARO-RP/pkg/util/azureclient/mgmt/$GOPACKAGE InterfacesClient,LoadBalancersClient,PrivateEndpointsClient,PublicIPAddressesClient,LoadBalancerBackendAddressPoolsClient,RouteTablesClient,SubnetsClient,VirtualNetworksClient,UsageClient //go:generate goimports -local=github.com/Azure/ARO-RP -e -w ../../../../util/mocks/azureclient/mgmt/$GOPACKAGE/$GOPACKAGE.go diff --git a/pkg/util/mocks/azureclient/mgmt/network/network.go b/pkg/util/mocks/azureclient/mgmt/network/network.go index 5515a6ca80a..98324bfd9de 100644 --- a/pkg/util/mocks/azureclient/mgmt/network/network.go +++ b/pkg/util/mocks/azureclient/mgmt/network/network.go @@ -1,9 +1,9 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/Azure/ARO-RP/pkg/util/azureclient/mgmt/network (interfaces: InterfacesClient,LoadBalancersClient,PrivateEndpointsClient,PublicIPAddressesClient,LoadBalancerBackendAddressPoolsClient,RouteTablesClient,SubnetsClient,VirtualNetworksClient,UsageClient,FlowLogsClient) +// Source: github.com/Azure/ARO-RP/pkg/util/azureclient/mgmt/network (interfaces: InterfacesClient,LoadBalancersClient,PrivateEndpointsClient,PublicIPAddressesClient,LoadBalancerBackendAddressPoolsClient,RouteTablesClient,SubnetsClient,VirtualNetworksClient,UsageClient) // // Generated by this command: // -// mockgen -destination=../../../../util/mocks/azureclient/mgmt/network/network.go github.com/Azure/ARO-RP/pkg/util/azureclient/mgmt/network InterfacesClient,LoadBalancersClient,PrivateEndpointsClient,PublicIPAddressesClient,LoadBalancerBackendAddressPoolsClient,RouteTablesClient,SubnetsClient,VirtualNetworksClient,UsageClient,FlowLogsClient +// mockgen -destination=../../../../util/mocks/azureclient/mgmt/network/network.go github.com/Azure/ARO-RP/pkg/util/azureclient/mgmt/network InterfacesClient,LoadBalancersClient,PrivateEndpointsClient,PublicIPAddressesClient,LoadBalancerBackendAddressPoolsClient,RouteTablesClient,SubnetsClient,VirtualNetworksClient,UsageClient // // Package mock_network is a generated GoMock package. @@ -528,69 +528,3 @@ func (mr *MockUsageClientMockRecorder) List(arg0, arg1 any) *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockUsageClient)(nil).List), arg0, arg1) } - -// MockFlowLogsClient is a mock of FlowLogsClient interface. -type MockFlowLogsClient struct { - ctrl *gomock.Controller - recorder *MockFlowLogsClientMockRecorder -} - -// MockFlowLogsClientMockRecorder is the mock recorder for MockFlowLogsClient. -type MockFlowLogsClientMockRecorder struct { - mock *MockFlowLogsClient -} - -// NewMockFlowLogsClient creates a new mock instance. -func NewMockFlowLogsClient(ctrl *gomock.Controller) *MockFlowLogsClient { - mock := &MockFlowLogsClient{ctrl: ctrl} - mock.recorder = &MockFlowLogsClientMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockFlowLogsClient) EXPECT() *MockFlowLogsClientMockRecorder { - return m.recorder -} - -// CreateOrUpdateAndWait mocks base method. -func (m *MockFlowLogsClient) CreateOrUpdateAndWait(arg0 context.Context, arg1, arg2, arg3 string, arg4 network.FlowLog) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateOrUpdateAndWait", arg0, arg1, arg2, arg3, arg4) - ret0, _ := ret[0].(error) - return ret0 -} - -// CreateOrUpdateAndWait indicates an expected call of CreateOrUpdateAndWait. -func (mr *MockFlowLogsClientMockRecorder) CreateOrUpdateAndWait(arg0, arg1, arg2, arg3, arg4 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateOrUpdateAndWait", reflect.TypeOf((*MockFlowLogsClient)(nil).CreateOrUpdateAndWait), arg0, arg1, arg2, arg3, arg4) -} - -// DeleteAndWait mocks base method. -func (m *MockFlowLogsClient) DeleteAndWait(arg0 context.Context, arg1, arg2, arg3 string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteAndWait", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteAndWait indicates an expected call of DeleteAndWait. -func (mr *MockFlowLogsClientMockRecorder) DeleteAndWait(arg0, arg1, arg2, arg3 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAndWait", reflect.TypeOf((*MockFlowLogsClient)(nil).DeleteAndWait), arg0, arg1, arg2, arg3) -} - -// Get mocks base method. -func (m *MockFlowLogsClient) Get(arg0 context.Context, arg1, arg2, arg3 string) (network.FlowLog, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Get", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(network.FlowLog) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Get indicates an expected call of Get. -func (mr *MockFlowLogsClientMockRecorder) Get(arg0, arg1, arg2, arg3 any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockFlowLogsClient)(nil).Get), arg0, arg1, arg2, arg3) -}