diff --git a/pkg/cloudprovider/providers/azure/BUILD b/pkg/cloudprovider/providers/azure/BUILD index 8272b20219d..bd65300c2ed 100644 --- a/pkg/cloudprovider/providers/azure/BUILD +++ b/pkg/cloudprovider/providers/azure/BUILD @@ -12,6 +12,7 @@ go_library( "azure.go", "azure_backoff.go", "azure_blobDiskController.go", + "azure_cache.go", "azure_client.go", "azure_controllerCommon.go", "azure_fakes.go", @@ -21,12 +22,11 @@ go_library( "azure_managedDiskController.go", "azure_metrics.go", "azure_routes.go", + "azure_standard.go", "azure_storage.go", "azure_storageaccount.go", - "azure_util.go", - "azure_util_cache.go", - "azure_util_vmss.go", "azure_vmsets.go", + "azure_vmss.go", "azure_wrap.go", "azure_zones.go", ], @@ -64,11 +64,11 @@ go_library( go_test( name = "go_default_test", srcs = [ + "azure_cache_test.go", "azure_loadbalancer_test.go", "azure_metrics_test.go", "azure_test.go", - "azure_util_cache_test.go", - "azure_util_test.go", + "azure_vmss_test.go", "azure_wrap_test.go", ], embed = [":go_default_library"], diff --git a/pkg/cloudprovider/providers/azure/azure_util_cache.go b/pkg/cloudprovider/providers/azure/azure_cache.go similarity index 100% rename from pkg/cloudprovider/providers/azure/azure_util_cache.go rename to pkg/cloudprovider/providers/azure/azure_cache.go diff --git a/pkg/cloudprovider/providers/azure/azure_util_cache_test.go b/pkg/cloudprovider/providers/azure/azure_cache_test.go similarity index 100% rename from pkg/cloudprovider/providers/azure/azure_util_cache_test.go rename to pkg/cloudprovider/providers/azure/azure_cache_test.go diff --git a/pkg/cloudprovider/providers/azure/azure_fakes.go b/pkg/cloudprovider/providers/azure/azure_fakes.go index ec58e57da44..72aca359194 100644 --- a/pkg/cloudprovider/providers/azure/azure_fakes.go +++ b/pkg/cloudprovider/providers/azure/azure_fakes.go @@ -37,14 +37,14 @@ type fakeAzureLBClient struct { FakeStore map[string]map[string]network.LoadBalancer } -func newFakeAzureLBClient() fakeAzureLBClient { - fLBC := fakeAzureLBClient{} +func newFakeAzureLBClient() *fakeAzureLBClient { + fLBC := &fakeAzureLBClient{} fLBC.FakeStore = make(map[string]map[string]network.LoadBalancer) fLBC.mutex = &sync.Mutex{} return fLBC } -func (fLBC fakeAzureLBClient) CreateOrUpdate(resourceGroupName string, loadBalancerName string, parameters network.LoadBalancer, cancel <-chan struct{}) (<-chan network.LoadBalancer, <-chan error) { +func (fLBC *fakeAzureLBClient) CreateOrUpdate(resourceGroupName string, loadBalancerName string, parameters network.LoadBalancer, cancel <-chan struct{}) (<-chan network.LoadBalancer, <-chan error) { fLBC.mutex.Lock() defer fLBC.mutex.Unlock() resultChan := make(chan network.LoadBalancer, 1) @@ -80,7 +80,7 @@ func (fLBC fakeAzureLBClient) CreateOrUpdate(resourceGroupName string, loadBalan return resultChan, errChan } -func (fLBC fakeAzureLBClient) Delete(resourceGroupName string, loadBalancerName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { +func (fLBC *fakeAzureLBClient) Delete(resourceGroupName string, loadBalancerName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { fLBC.mutex.Lock() defer fLBC.mutex.Unlock() respChan := make(chan autorest.Response, 1) @@ -113,7 +113,7 @@ func (fLBC fakeAzureLBClient) Delete(resourceGroupName string, loadBalancerName return respChan, errChan } -func (fLBC fakeAzureLBClient) Get(resourceGroupName string, loadBalancerName string, expand string) (result network.LoadBalancer, err error) { +func (fLBC *fakeAzureLBClient) Get(resourceGroupName string, loadBalancerName string, expand string) (result network.LoadBalancer, err error) { fLBC.mutex.Lock() defer fLBC.mutex.Unlock() if _, ok := fLBC.FakeStore[resourceGroupName]; ok { @@ -127,7 +127,7 @@ func (fLBC fakeAzureLBClient) Get(resourceGroupName string, loadBalancerName str } } -func (fLBC fakeAzureLBClient) List(resourceGroupName string) (result network.LoadBalancerListResult, err error) { +func (fLBC *fakeAzureLBClient) List(resourceGroupName string) (result network.LoadBalancerListResult, err error) { fLBC.mutex.Lock() defer fLBC.mutex.Unlock() var value []network.LoadBalancer @@ -144,7 +144,7 @@ func (fLBC fakeAzureLBClient) List(resourceGroupName string) (result network.Loa return result, nil } -func (fLBC fakeAzureLBClient) ListNextResults(resourceGroupName string, lastResult network.LoadBalancerListResult) (result network.LoadBalancerListResult, err error) { +func (fLBC *fakeAzureLBClient) ListNextResults(resourceGroupName string, lastResult network.LoadBalancerListResult) (result network.LoadBalancerListResult, err error) { fLBC.mutex.Lock() defer fLBC.mutex.Unlock() result.Response.Response = &http.Response{ @@ -172,15 +172,15 @@ func getpublicIPAddressID(subscriptionID string, resourceGroupName, pipName stri pipName) } -func newFakeAzurePIPClient(subscriptionID string) fakeAzurePIPClient { - fAPC := fakeAzurePIPClient{} +func newFakeAzurePIPClient(subscriptionID string) *fakeAzurePIPClient { + fAPC := &fakeAzurePIPClient{} fAPC.FakeStore = make(map[string]map[string]network.PublicIPAddress) fAPC.SubscriptionID = subscriptionID fAPC.mutex = &sync.Mutex{} return fAPC } -func (fAPC fakeAzurePIPClient) CreateOrUpdate(resourceGroupName string, publicIPAddressName string, parameters network.PublicIPAddress, cancel <-chan struct{}) (<-chan network.PublicIPAddress, <-chan error) { +func (fAPC *fakeAzurePIPClient) CreateOrUpdate(resourceGroupName string, publicIPAddressName string, parameters network.PublicIPAddress, cancel <-chan struct{}) (<-chan network.PublicIPAddress, <-chan error) { fAPC.mutex.Lock() defer fAPC.mutex.Unlock() resultChan := make(chan network.PublicIPAddress, 1) @@ -217,7 +217,7 @@ func (fAPC fakeAzurePIPClient) CreateOrUpdate(resourceGroupName string, publicIP return resultChan, errChan } -func (fAPC fakeAzurePIPClient) Delete(resourceGroupName string, publicIPAddressName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { +func (fAPC *fakeAzurePIPClient) Delete(resourceGroupName string, publicIPAddressName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { fAPC.mutex.Lock() defer fAPC.mutex.Unlock() respChan := make(chan autorest.Response, 1) @@ -250,7 +250,7 @@ func (fAPC fakeAzurePIPClient) Delete(resourceGroupName string, publicIPAddressN return respChan, errChan } -func (fAPC fakeAzurePIPClient) Get(resourceGroupName string, publicIPAddressName string, expand string) (result network.PublicIPAddress, err error) { +func (fAPC *fakeAzurePIPClient) Get(resourceGroupName string, publicIPAddressName string, expand string) (result network.PublicIPAddress, err error) { fAPC.mutex.Lock() defer fAPC.mutex.Unlock() if _, ok := fAPC.FakeStore[resourceGroupName]; ok { @@ -264,13 +264,13 @@ func (fAPC fakeAzurePIPClient) Get(resourceGroupName string, publicIPAddressName } } -func (fAPC fakeAzurePIPClient) ListNextResults(resourceGroupName string, lastResults network.PublicIPAddressListResult) (result network.PublicIPAddressListResult, err error) { +func (fAPC *fakeAzurePIPClient) ListNextResults(resourceGroupName string, lastResults network.PublicIPAddressListResult) (result network.PublicIPAddressListResult, err error) { fAPC.mutex.Lock() defer fAPC.mutex.Unlock() return network.PublicIPAddressListResult{}, nil } -func (fAPC fakeAzurePIPClient) List(resourceGroupName string) (result network.PublicIPAddressListResult, err error) { +func (fAPC *fakeAzurePIPClient) List(resourceGroupName string) (result network.PublicIPAddressListResult, err error) { fAPC.mutex.Lock() defer fAPC.mutex.Unlock() var value []network.PublicIPAddress @@ -292,15 +292,15 @@ type fakeAzureInterfacesClient struct { FakeStore map[string]map[string]network.Interface } -func newFakeAzureInterfacesClient() fakeAzureInterfacesClient { - fIC := fakeAzureInterfacesClient{} +func newFakeAzureInterfacesClient() *fakeAzureInterfacesClient { + fIC := &fakeAzureInterfacesClient{} fIC.FakeStore = make(map[string]map[string]network.Interface) fIC.mutex = &sync.Mutex{} return fIC } -func (fIC fakeAzureInterfacesClient) CreateOrUpdate(resourceGroupName string, networkInterfaceName string, parameters network.Interface, cancel <-chan struct{}) (<-chan network.Interface, <-chan error) { +func (fIC *fakeAzureInterfacesClient) CreateOrUpdate(resourceGroupName string, networkInterfaceName string, parameters network.Interface, cancel <-chan struct{}) (<-chan network.Interface, <-chan error) { fIC.mutex.Lock() defer fIC.mutex.Unlock() resultChan := make(chan network.Interface, 1) @@ -326,7 +326,7 @@ func (fIC fakeAzureInterfacesClient) CreateOrUpdate(resourceGroupName string, ne return resultChan, errChan } -func (fIC fakeAzureInterfacesClient) Get(resourceGroupName string, networkInterfaceName string, expand string) (result network.Interface, err error) { +func (fIC *fakeAzureInterfacesClient) Get(resourceGroupName string, networkInterfaceName string, expand string) (result network.Interface, err error) { fIC.mutex.Lock() defer fIC.mutex.Unlock() if _, ok := fIC.FakeStore[resourceGroupName]; ok { @@ -340,7 +340,7 @@ func (fIC fakeAzureInterfacesClient) Get(resourceGroupName string, networkInterf } } -func (fIC fakeAzureInterfacesClient) GetVirtualMachineScaleSetNetworkInterface(resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, expand string) (result network.Interface, err error) { +func (fIC *fakeAzureInterfacesClient) GetVirtualMachineScaleSetNetworkInterface(resourceGroupName string, virtualMachineScaleSetName string, virtualmachineIndex string, networkInterfaceName string, expand string) (result network.Interface, err error) { return result, nil } @@ -349,14 +349,14 @@ type fakeAzureVirtualMachinesClient struct { FakeStore map[string]map[string]compute.VirtualMachine } -func newFakeAzureVirtualMachinesClient() fakeAzureVirtualMachinesClient { - fVMC := fakeAzureVirtualMachinesClient{} +func newFakeAzureVirtualMachinesClient() *fakeAzureVirtualMachinesClient { + fVMC := &fakeAzureVirtualMachinesClient{} fVMC.FakeStore = make(map[string]map[string]compute.VirtualMachine) fVMC.mutex = &sync.Mutex{} return fVMC } -func (fVMC fakeAzureVirtualMachinesClient) CreateOrUpdate(resourceGroupName string, VMName string, parameters compute.VirtualMachine, cancel <-chan struct{}) (<-chan compute.VirtualMachine, <-chan error) { +func (fVMC *fakeAzureVirtualMachinesClient) CreateOrUpdate(resourceGroupName string, VMName string, parameters compute.VirtualMachine, cancel <-chan struct{}) (<-chan compute.VirtualMachine, <-chan error) { fVMC.mutex.Lock() defer fVMC.mutex.Unlock() resultChan := make(chan compute.VirtualMachine, 1) @@ -381,7 +381,7 @@ func (fVMC fakeAzureVirtualMachinesClient) CreateOrUpdate(resourceGroupName stri return resultChan, errChan } -func (fVMC fakeAzureVirtualMachinesClient) Get(resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error) { +func (fVMC *fakeAzureVirtualMachinesClient) Get(resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error) { fVMC.mutex.Lock() defer fVMC.mutex.Unlock() if _, ok := fVMC.FakeStore[resourceGroupName]; ok { @@ -395,7 +395,7 @@ func (fVMC fakeAzureVirtualMachinesClient) Get(resourceGroupName string, VMName } } -func (fVMC fakeAzureVirtualMachinesClient) List(resourceGroupName string) (result compute.VirtualMachineListResult, err error) { +func (fVMC *fakeAzureVirtualMachinesClient) List(resourceGroupName string) (result compute.VirtualMachineListResult, err error) { fVMC.mutex.Lock() defer fVMC.mutex.Unlock() var value []compute.VirtualMachine @@ -411,7 +411,7 @@ func (fVMC fakeAzureVirtualMachinesClient) List(resourceGroupName string) (resul result.Value = &value return result, nil } -func (fVMC fakeAzureVirtualMachinesClient) ListNextResults(resourceGroupName string, lastResults compute.VirtualMachineListResult) (result compute.VirtualMachineListResult, err error) { +func (fVMC *fakeAzureVirtualMachinesClient) ListNextResults(resourceGroupName string, lastResults compute.VirtualMachineListResult) (result compute.VirtualMachineListResult, err error) { fVMC.mutex.Lock() defer fVMC.mutex.Unlock() return compute.VirtualMachineListResult{}, nil @@ -422,14 +422,14 @@ type fakeAzureSubnetsClient struct { FakeStore map[string]map[string]network.Subnet } -func newFakeAzureSubnetsClient() fakeAzureSubnetsClient { - fASC := fakeAzureSubnetsClient{} +func newFakeAzureSubnetsClient() *fakeAzureSubnetsClient { + fASC := &fakeAzureSubnetsClient{} fASC.FakeStore = make(map[string]map[string]network.Subnet) fASC.mutex = &sync.Mutex{} return fASC } -func (fASC fakeAzureSubnetsClient) CreateOrUpdate(resourceGroupName string, virtualNetworkName string, subnetName string, subnetParameters network.Subnet, cancel <-chan struct{}) (<-chan network.Subnet, <-chan error) { +func (fASC *fakeAzureSubnetsClient) CreateOrUpdate(resourceGroupName string, virtualNetworkName string, subnetName string, subnetParameters network.Subnet, cancel <-chan struct{}) (<-chan network.Subnet, <-chan error) { fASC.mutex.Lock() defer fASC.mutex.Unlock() resultChan := make(chan network.Subnet, 1) @@ -455,7 +455,7 @@ func (fASC fakeAzureSubnetsClient) CreateOrUpdate(resourceGroupName string, virt return resultChan, errChan } -func (fASC fakeAzureSubnetsClient) Delete(resourceGroupName string, virtualNetworkName string, subnetName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { +func (fASC *fakeAzureSubnetsClient) Delete(resourceGroupName string, virtualNetworkName string, subnetName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { fASC.mutex.Lock() defer fASC.mutex.Unlock() respChan := make(chan autorest.Response, 1) @@ -489,7 +489,7 @@ func (fASC fakeAzureSubnetsClient) Delete(resourceGroupName string, virtualNetwo } return respChan, errChan } -func (fASC fakeAzureSubnetsClient) Get(resourceGroupName string, virtualNetworkName string, subnetName string, expand string) (result network.Subnet, err error) { +func (fASC *fakeAzureSubnetsClient) Get(resourceGroupName string, virtualNetworkName string, subnetName string, expand string) (result network.Subnet, err error) { fASC.mutex.Lock() defer fASC.mutex.Unlock() rgVnet := strings.Join([]string{resourceGroupName, virtualNetworkName}, "AND") @@ -503,7 +503,7 @@ func (fASC fakeAzureSubnetsClient) Get(resourceGroupName string, virtualNetworkN Message: "Not such Subnet", } } -func (fASC fakeAzureSubnetsClient) List(resourceGroupName string, virtualNetworkName string) (result network.SubnetListResult, err error) { +func (fASC *fakeAzureSubnetsClient) List(resourceGroupName string, virtualNetworkName string) (result network.SubnetListResult, err error) { fASC.mutex.Lock() defer fASC.mutex.Unlock() rgVnet := strings.Join([]string{resourceGroupName, virtualNetworkName}, "AND") @@ -526,14 +526,14 @@ type fakeAzureNSGClient struct { FakeStore map[string]map[string]network.SecurityGroup } -func newFakeAzureNSGClient() fakeAzureNSGClient { - fNSG := fakeAzureNSGClient{} +func newFakeAzureNSGClient() *fakeAzureNSGClient { + fNSG := &fakeAzureNSGClient{} fNSG.FakeStore = make(map[string]map[string]network.SecurityGroup) fNSG.mutex = &sync.Mutex{} return fNSG } -func (fNSG fakeAzureNSGClient) CreateOrUpdate(resourceGroupName string, networkSecurityGroupName string, parameters network.SecurityGroup, cancel <-chan struct{}) (<-chan network.SecurityGroup, <-chan error) { +func (fNSG *fakeAzureNSGClient) CreateOrUpdate(resourceGroupName string, networkSecurityGroupName string, parameters network.SecurityGroup, cancel <-chan struct{}) (<-chan network.SecurityGroup, <-chan error) { fNSG.mutex.Lock() defer fNSG.mutex.Unlock() resultChan := make(chan network.SecurityGroup, 1) @@ -558,7 +558,7 @@ func (fNSG fakeAzureNSGClient) CreateOrUpdate(resourceGroupName string, networkS return resultChan, errChan } -func (fNSG fakeAzureNSGClient) Delete(resourceGroupName string, networkSecurityGroupName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { +func (fNSG *fakeAzureNSGClient) Delete(resourceGroupName string, networkSecurityGroupName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { fNSG.mutex.Lock() defer fNSG.mutex.Unlock() respChan := make(chan autorest.Response, 1) @@ -591,7 +591,7 @@ func (fNSG fakeAzureNSGClient) Delete(resourceGroupName string, networkSecurityG return respChan, errChan } -func (fNSG fakeAzureNSGClient) Get(resourceGroupName string, networkSecurityGroupName string, expand string) (result network.SecurityGroup, err error) { +func (fNSG *fakeAzureNSGClient) Get(resourceGroupName string, networkSecurityGroupName string, expand string) (result network.SecurityGroup, err error) { fNSG.mutex.Lock() defer fNSG.mutex.Unlock() if _, ok := fNSG.FakeStore[resourceGroupName]; ok { @@ -605,7 +605,7 @@ func (fNSG fakeAzureNSGClient) Get(resourceGroupName string, networkSecurityGrou } } -func (fNSG fakeAzureNSGClient) List(resourceGroupName string) (result network.SecurityGroupListResult, err error) { +func (fNSG *fakeAzureNSGClient) List(resourceGroupName string) (result network.SecurityGroupListResult, err error) { fNSG.mutex.Lock() defer fNSG.mutex.Unlock() var value []network.SecurityGroup @@ -632,15 +632,22 @@ type fakeVirtualMachineScaleSetVMsClient struct { FakeStore map[string]map[string]compute.VirtualMachineScaleSetVM } -func newFakeVirtualMachineScaleSetVMsClient() fakeVirtualMachineScaleSetVMsClient { - fVMC := fakeVirtualMachineScaleSetVMsClient{} +func newFakeVirtualMachineScaleSetVMsClient() *fakeVirtualMachineScaleSetVMsClient { + fVMC := &fakeVirtualMachineScaleSetVMsClient{} fVMC.FakeStore = make(map[string]map[string]compute.VirtualMachineScaleSetVM) fVMC.mutex = &sync.Mutex{} return fVMC } -func (fVMC fakeVirtualMachineScaleSetVMsClient) List(resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result compute.VirtualMachineScaleSetVMListResult, err error) { +func (fVMC *fakeVirtualMachineScaleSetVMsClient) setFakeStore(store map[string]map[string]compute.VirtualMachineScaleSetVM) { + fVMC.mutex.Lock() + defer fVMC.mutex.Unlock() + + fVMC.FakeStore = store +} + +func (fVMC *fakeVirtualMachineScaleSetVMsClient) List(resourceGroupName string, virtualMachineScaleSetName string, filter string, selectParameter string, expand string) (result compute.VirtualMachineScaleSetVMListResult, err error) { fVMC.mutex.Lock() defer fVMC.mutex.Unlock() @@ -659,11 +666,11 @@ func (fVMC fakeVirtualMachineScaleSetVMsClient) List(resourceGroupName string, v return result, nil } -func (fVMC fakeVirtualMachineScaleSetVMsClient) ListNextResults(resourceGroupName string, lastResults compute.VirtualMachineScaleSetVMListResult) (result compute.VirtualMachineScaleSetVMListResult, err error) { +func (fVMC *fakeVirtualMachineScaleSetVMsClient) ListNextResults(resourceGroupName string, lastResults compute.VirtualMachineScaleSetVMListResult) (result compute.VirtualMachineScaleSetVMListResult, err error) { return result, nil } -func (fVMC fakeVirtualMachineScaleSetVMsClient) Get(resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVM, err error) { +func (fVMC *fakeVirtualMachineScaleSetVMsClient) Get(resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVM, err error) { fVMC.mutex.Lock() defer fVMC.mutex.Unlock() @@ -680,7 +687,7 @@ func (fVMC fakeVirtualMachineScaleSetVMsClient) Get(resourceGroupName string, VM } } -func (fVMC fakeVirtualMachineScaleSetVMsClient) GetInstanceView(resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVMInstanceView, err error) { +func (fVMC *fakeVirtualMachineScaleSetVMsClient) GetInstanceView(resourceGroupName string, VMScaleSetName string, instanceID string) (result compute.VirtualMachineScaleSetVMInstanceView, err error) { _, err = fVMC.Get(resourceGroupName, VMScaleSetName, instanceID) if err != nil { return result, err @@ -694,15 +701,22 @@ type fakeVirtualMachineScaleSetsClient struct { FakeStore map[string]map[string]compute.VirtualMachineScaleSet } -func newFakeVirtualMachineScaleSetsClient() fakeVirtualMachineScaleSetsClient { - fVMSSC := fakeVirtualMachineScaleSetsClient{} +func newFakeVirtualMachineScaleSetsClient() *fakeVirtualMachineScaleSetsClient { + fVMSSC := &fakeVirtualMachineScaleSetsClient{} fVMSSC.FakeStore = make(map[string]map[string]compute.VirtualMachineScaleSet) fVMSSC.mutex = &sync.Mutex{} return fVMSSC } -func (fVMSSC fakeVirtualMachineScaleSetsClient) CreateOrUpdate(resourceGroupName string, VMScaleSetName string, parameters compute.VirtualMachineScaleSet, cancel <-chan struct{}) (<-chan compute.VirtualMachineScaleSet, <-chan error) { +func (fVMSSC *fakeVirtualMachineScaleSetsClient) setFakeStore(store map[string]map[string]compute.VirtualMachineScaleSet) { + fVMSSC.mutex.Lock() + defer fVMSSC.mutex.Unlock() + + fVMSSC.FakeStore = store +} + +func (fVMSSC *fakeVirtualMachineScaleSetsClient) CreateOrUpdate(resourceGroupName string, VMScaleSetName string, parameters compute.VirtualMachineScaleSet, cancel <-chan struct{}) (<-chan compute.VirtualMachineScaleSet, <-chan error) { fVMSSC.mutex.Lock() defer fVMSSC.mutex.Unlock() @@ -729,7 +743,7 @@ func (fVMSSC fakeVirtualMachineScaleSetsClient) CreateOrUpdate(resourceGroupName return resultChan, errChan } -func (fVMSSC fakeVirtualMachineScaleSetsClient) Get(resourceGroupName string, VMScaleSetName string) (result compute.VirtualMachineScaleSet, err error) { +func (fVMSSC *fakeVirtualMachineScaleSetsClient) Get(resourceGroupName string, VMScaleSetName string) (result compute.VirtualMachineScaleSet, err error) { fVMSSC.mutex.Lock() defer fVMSSC.mutex.Unlock() @@ -745,7 +759,7 @@ func (fVMSSC fakeVirtualMachineScaleSetsClient) Get(resourceGroupName string, VM } } -func (fVMSSC fakeVirtualMachineScaleSetsClient) List(resourceGroupName string) (result compute.VirtualMachineScaleSetListResult, err error) { +func (fVMSSC *fakeVirtualMachineScaleSetsClient) List(resourceGroupName string) (result compute.VirtualMachineScaleSetListResult, err error) { fVMSSC.mutex.Lock() defer fVMSSC.mutex.Unlock() @@ -755,7 +769,6 @@ func (fVMSSC fakeVirtualMachineScaleSetsClient) List(resourceGroupName string) ( value = append(value, v) } } - result.Response.Response = &http.Response{ StatusCode: http.StatusOK, } @@ -764,11 +777,11 @@ func (fVMSSC fakeVirtualMachineScaleSetsClient) List(resourceGroupName string) ( return result, nil } -func (fVMSSC fakeVirtualMachineScaleSetsClient) ListNextResults(resourceGroupName string, lastResults compute.VirtualMachineScaleSetListResult) (result compute.VirtualMachineScaleSetListResult, err error) { +func (fVMSSC *fakeVirtualMachineScaleSetsClient) ListNextResults(resourceGroupName string, lastResults compute.VirtualMachineScaleSetListResult) (result compute.VirtualMachineScaleSetListResult, err error) { return result, nil } -func (fVMSSC fakeVirtualMachineScaleSetsClient) UpdateInstances(resourceGroupName string, VMScaleSetName string, VMInstanceIDs compute.VirtualMachineScaleSetVMInstanceRequiredIDs, cancel <-chan struct{}) (<-chan compute.OperationStatusResponse, <-chan error) { +func (fVMSSC *fakeVirtualMachineScaleSetsClient) UpdateInstances(resourceGroupName string, VMScaleSetName string, VMInstanceIDs compute.VirtualMachineScaleSetVMInstanceRequiredIDs, cancel <-chan struct{}) (<-chan compute.OperationStatusResponse, <-chan error) { resultChan := make(chan compute.OperationStatusResponse, 1) errChan := make(chan error, 1) var result compute.OperationStatusResponse @@ -792,14 +805,14 @@ type fakeRoutesClient struct { FakeStore map[string]map[string]network.Route } -func newFakeRoutesClient() fakeRoutesClient { - fRC := fakeRoutesClient{} +func newFakeRoutesClient() *fakeRoutesClient { + fRC := &fakeRoutesClient{} fRC.FakeStore = make(map[string]map[string]network.Route) fRC.mutex = &sync.Mutex{} return fRC } -func (fRC fakeRoutesClient) CreateOrUpdate(resourceGroupName string, routeTableName string, routeName string, routeParameters network.Route, cancel <-chan struct{}) (<-chan network.Route, <-chan error) { +func (fRC *fakeRoutesClient) CreateOrUpdate(resourceGroupName string, routeTableName string, routeName string, routeParameters network.Route, cancel <-chan struct{}) (<-chan network.Route, <-chan error) { fRC.mutex.Lock() defer fRC.mutex.Unlock() @@ -826,7 +839,7 @@ func (fRC fakeRoutesClient) CreateOrUpdate(resourceGroupName string, routeTableN return resultChan, errChan } -func (fRC fakeRoutesClient) Delete(resourceGroupName string, routeTableName string, routeName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { +func (fRC *fakeRoutesClient) Delete(resourceGroupName string, routeTableName string, routeName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) { fRC.mutex.Lock() defer fRC.mutex.Unlock() @@ -866,14 +879,14 @@ type fakeRouteTablesClient struct { FakeStore map[string]map[string]network.RouteTable } -func newFakeRouteTablesClient() fakeRouteTablesClient { - fRTC := fakeRouteTablesClient{} +func newFakeRouteTablesClient() *fakeRouteTablesClient { + fRTC := &fakeRouteTablesClient{} fRTC.FakeStore = make(map[string]map[string]network.RouteTable) fRTC.mutex = &sync.Mutex{} return fRTC } -func (fRTC fakeRouteTablesClient) CreateOrUpdate(resourceGroupName string, routeTableName string, parameters network.RouteTable, cancel <-chan struct{}) (<-chan network.RouteTable, <-chan error) { +func (fRTC *fakeRouteTablesClient) CreateOrUpdate(resourceGroupName string, routeTableName string, parameters network.RouteTable, cancel <-chan struct{}) (<-chan network.RouteTable, <-chan error) { fRTC.mutex.Lock() defer fRTC.mutex.Unlock() @@ -900,7 +913,7 @@ func (fRTC fakeRouteTablesClient) CreateOrUpdate(resourceGroupName string, route return resultChan, errChan } -func (fRTC fakeRouteTablesClient) Get(resourceGroupName string, routeTableName string, expand string) (result network.RouteTable, err error) { +func (fRTC *fakeRouteTablesClient) Get(resourceGroupName string, routeTableName string, expand string) (result network.RouteTable, err error) { fRTC.mutex.Lock() defer fRTC.mutex.Unlock() if _, ok := fRTC.FakeStore[resourceGroupName]; ok { @@ -919,14 +932,14 @@ type fakeStorageAccountClient struct { FakeStore map[string]map[string]storage.Account } -func newFakeStorageAccountClient() fakeStorageAccountClient { - fSAC := fakeStorageAccountClient{} +func newFakeStorageAccountClient() *fakeStorageAccountClient { + fSAC := &fakeStorageAccountClient{} fSAC.FakeStore = make(map[string]map[string]storage.Account) fSAC.mutex = &sync.Mutex{} return fSAC } -func (fSAC fakeStorageAccountClient) Create(resourceGroupName string, accountName string, parameters storage.AccountCreateParameters, cancel <-chan struct{}) (<-chan storage.Account, <-chan error) { +func (fSAC *fakeStorageAccountClient) Create(resourceGroupName string, accountName string, parameters storage.AccountCreateParameters, cancel <-chan struct{}) (<-chan storage.Account, <-chan error) { fSAC.mutex.Lock() defer fSAC.mutex.Unlock() @@ -961,7 +974,7 @@ func (fSAC fakeStorageAccountClient) Create(resourceGroupName string, accountNam return resultChan, errChan } -func (fSAC fakeStorageAccountClient) Delete(resourceGroupName string, accountName string) (result autorest.Response, err error) { +func (fSAC *fakeStorageAccountClient) Delete(resourceGroupName string, accountName string) (result autorest.Response, err error) { fSAC.mutex.Lock() defer fSAC.mutex.Unlock() @@ -985,15 +998,15 @@ func (fSAC fakeStorageAccountClient) Delete(resourceGroupName string, accountNam return result, err } -func (fSAC fakeStorageAccountClient) ListKeys(resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error) { +func (fSAC *fakeStorageAccountClient) ListKeys(resourceGroupName string, accountName string) (result storage.AccountListKeysResult, err error) { return storage.AccountListKeysResult{}, nil } -func (fSAC fakeStorageAccountClient) ListByResourceGroup(resourceGroupName string) (result storage.AccountListResult, err error) { +func (fSAC *fakeStorageAccountClient) ListByResourceGroup(resourceGroupName string) (result storage.AccountListResult, err error) { return storage.AccountListResult{}, nil } -func (fSAC fakeStorageAccountClient) GetProperties(resourceGroupName string, accountName string) (result storage.Account, err error) { +func (fSAC *fakeStorageAccountClient) GetProperties(resourceGroupName string, accountName string) (result storage.Account, err error) { fSAC.mutex.Lock() defer fSAC.mutex.Unlock() @@ -1014,14 +1027,14 @@ type fakeDisksClient struct { FakeStore map[string]map[string]disk.Model } -func newFakeDisksClient() fakeDisksClient { - fDC := fakeDisksClient{} +func newFakeDisksClient() *fakeDisksClient { + fDC := &fakeDisksClient{} fDC.FakeStore = make(map[string]map[string]disk.Model) fDC.mutex = &sync.Mutex{} return fDC } -func (fDC fakeDisksClient) CreateOrUpdate(resourceGroupName string, diskName string, diskParameter disk.Model, cancel <-chan struct{}) (<-chan disk.Model, <-chan error) { +func (fDC *fakeDisksClient) CreateOrUpdate(resourceGroupName string, diskName string, diskParameter disk.Model, cancel <-chan struct{}) (<-chan disk.Model, <-chan error) { fDC.mutex.Lock() defer fDC.mutex.Unlock() @@ -1048,7 +1061,7 @@ func (fDC fakeDisksClient) CreateOrUpdate(resourceGroupName string, diskName str return resultChan, errChan } -func (fDC fakeDisksClient) Delete(resourceGroupName string, diskName string, cancel <-chan struct{}) (<-chan disk.OperationStatusResponse, <-chan error) { +func (fDC *fakeDisksClient) Delete(resourceGroupName string, diskName string, cancel <-chan struct{}) (<-chan disk.OperationStatusResponse, <-chan error) { fDC.mutex.Lock() defer fDC.mutex.Unlock() @@ -1087,7 +1100,7 @@ func (fDC fakeDisksClient) Delete(resourceGroupName string, diskName string, can return respChan, errChan } -func (fDC fakeDisksClient) Get(resourceGroupName string, diskName string) (result disk.Model, err error) { +func (fDC *fakeDisksClient) Get(resourceGroupName string, diskName string) (result disk.Model, err error) { fDC.mutex.Lock() defer fDC.mutex.Unlock() diff --git a/pkg/cloudprovider/providers/azure/azure_util.go b/pkg/cloudprovider/providers/azure/azure_standard.go similarity index 100% rename from pkg/cloudprovider/providers/azure/azure_util.go rename to pkg/cloudprovider/providers/azure/azure_standard.go diff --git a/pkg/cloudprovider/providers/azure/azure_util_test.go b/pkg/cloudprovider/providers/azure/azure_util_test.go deleted file mode 100644 index cac803c2eb0..00000000000 --- a/pkg/cloudprovider/providers/azure/azure_util_test.go +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package azure - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestGetScaleSetVMInstanceID(t *testing.T) { - tests := []struct { - msg string - machineName string - expectError bool - expectedInstanceID string - }{{ - msg: "invalid vmss instance name", - machineName: "vmvm", - expectError: true, - }, - { - msg: "valid vmss instance name", - machineName: "vm00000Z", - expectError: false, - expectedInstanceID: "35", - }, - } - - for i, test := range tests { - instanceID, err := getScaleSetVMInstanceID(test.machineName) - if test.expectError { - assert.Error(t, err, fmt.Sprintf("TestCase[%d]: %s", i, test.msg)) - } else { - assert.Equal(t, test.expectedInstanceID, instanceID, fmt.Sprintf("TestCase[%d]: %s", i, test.msg)) - } - } -} diff --git a/pkg/cloudprovider/providers/azure/azure_util_vmss.go b/pkg/cloudprovider/providers/azure/azure_vmss.go similarity index 99% rename from pkg/cloudprovider/providers/azure/azure_util_vmss.go rename to pkg/cloudprovider/providers/azure/azure_vmss.go index 48bd3adcd8f..a5ad369dc52 100644 --- a/pkg/cloudprovider/providers/azure/azure_util_vmss.go +++ b/pkg/cloudprovider/providers/azure/azure_vmss.go @@ -121,7 +121,7 @@ func (ss *scaleSet) updateCache() error { for _, vm := range vms { nodeName := "" if vm.OsProfile != nil && vm.OsProfile.ComputerName != nil { - nodeName = *vm.OsProfile.ComputerName + nodeName = strings.ToLower(*vm.OsProfile.ComputerName) } vmSize := "" @@ -190,10 +190,12 @@ func (ss *scaleSet) getCachedVirtualMachine(nodeName string) (scaleSetVMInfo, er } // Update cache and try again. + glog.V(10).Infof("vmss cache before updateCache: %v", ss.cache) if err := ss.updateCache(); err != nil { glog.Errorf("updateCache failed with error: %v", err) return scaleSetVMInfo{}, err } + glog.V(10).Infof("vmss cache after updateCache: %v", ss.cache) vm, found = getVMFromCache(nodeName) if found { return vm, nil diff --git a/pkg/cloudprovider/providers/azure/azure_vmss_test.go b/pkg/cloudprovider/providers/azure/azure_vmss_test.go new file mode 100644 index 00000000000..7830eab783d --- /dev/null +++ b/pkg/cloudprovider/providers/azure/azure_vmss_test.go @@ -0,0 +1,149 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package azure + +import ( + "fmt" + "testing" + + "github.com/Azure/azure-sdk-for-go/arm/compute" + "github.com/stretchr/testify/assert" +) + +func newTestScaleSet() *scaleSet { + ss := newScaleSet(getTestCloud()) + return ss.(*scaleSet) +} + +func setTestVirtualMachineScaleSets(ss *scaleSet, scaleSetName string, vmList []string) { + virtualMachineScaleSetsClient := newFakeVirtualMachineScaleSetsClient() + scaleSets := make(map[string]map[string]compute.VirtualMachineScaleSet) + scaleSets["rg"] = map[string]compute.VirtualMachineScaleSet{ + scaleSetName: { + Name: &scaleSetName, + }, + } + virtualMachineScaleSetsClient.setFakeStore(scaleSets) + + virtualMachineScaleSetVMsClient := newFakeVirtualMachineScaleSetVMsClient() + ssVMs := make(map[string]map[string]compute.VirtualMachineScaleSetVM) + ssVMs["rg"] = make(map[string]compute.VirtualMachineScaleSetVM) + for i := range vmList { + ID := fmt.Sprintf("azure:///subscriptions/script/resourceGroups/rg/providers/Microsoft.Compute/virtualMachineScaleSets/%s/virtualMachines/%d", scaleSetName, i) + nodeName := vmList[i] + instanceID := fmt.Sprintf("%d", i) + vmKey := fmt.Sprintf("%s-%s", scaleSetName, nodeName) + networkInterfaces := []compute.NetworkInterfaceReference{ + { + ID: &nodeName, + }, + } + ssVMs["rg"][vmKey] = compute.VirtualMachineScaleSetVM{ + VirtualMachineScaleSetVMProperties: &compute.VirtualMachineScaleSetVMProperties{ + OsProfile: &compute.OSProfile{ + ComputerName: &nodeName, + }, + NetworkProfile: &compute.NetworkProfile{ + NetworkInterfaces: &networkInterfaces, + }, + }, + ID: &ID, + InstanceID: &instanceID, + Location: &ss.Cloud.Location, + } + } + virtualMachineScaleSetVMsClient.setFakeStore(ssVMs) + + ss.Cloud.VirtualMachineScaleSetsClient = virtualMachineScaleSetsClient + ss.Cloud.VirtualMachineScaleSetVMsClient = virtualMachineScaleSetVMsClient +} + +func TestGetScaleSetVMInstanceID(t *testing.T) { + tests := []struct { + msg string + machineName string + expectError bool + expectedInstanceID string + }{{ + msg: "invalid vmss instance name", + machineName: "vmvm", + expectError: true, + }, + { + msg: "valid vmss instance name", + machineName: "vm00000Z", + expectError: false, + expectedInstanceID: "35", + }, + } + + for i, test := range tests { + instanceID, err := getScaleSetVMInstanceID(test.machineName) + if test.expectError { + assert.Error(t, err, fmt.Sprintf("TestCase[%d]: %s", i, test.msg)) + } else { + assert.Equal(t, test.expectedInstanceID, instanceID, fmt.Sprintf("TestCase[%d]: %s", i, test.msg)) + } + } +} + +func TestGetInstanceIDByNodeName(t *testing.T) { + ss := newTestScaleSet() + + testCases := []struct { + description string + scaleSet string + vmList []string + nodeName string + expected string + expectError bool + }{ + { + description: "scaleSet should get instance by node name", + scaleSet: "ss", + vmList: []string{"vm1", "vm2"}, + nodeName: "vm1", + expected: "azure:///subscriptions/script/resourceGroups/rg/providers/Microsoft.Compute/virtualMachineScaleSets/ss/virtualMachines/0", + }, + { + description: "scaleSet should get instance by node name with upper cases hostname", + scaleSet: "ss", + vmList: []string{"VM1", "vm2"}, + nodeName: "vm1", + expected: "azure:///subscriptions/script/resourceGroups/rg/providers/Microsoft.Compute/virtualMachineScaleSets/ss/virtualMachines/0", + }, + { + description: "scaleSet should not get instance for non-exist nodes", + scaleSet: "ss", + vmList: []string{"VM1", "vm2"}, + nodeName: "vm3", + expectError: true, + }, + } + + for _, test := range testCases { + setTestVirtualMachineScaleSets(ss, test.scaleSet, test.vmList) + real, err := ss.GetInstanceIDByNodeName(test.nodeName) + if test.expectError { + assert.Error(t, err, test.description) + continue + } + + assert.NoError(t, err, test.description) + assert.Equal(t, test.expected, real, test.description) + } +}