github.com/mponton/terratest@v0.44.0/modules/azure/loadbalancer.go (about) 1 package azure 2 3 import ( 4 "context" 5 6 "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-09-01/network" 7 "github.com/mponton/terratest/modules/testing" 8 "github.com/stretchr/testify/require" 9 ) 10 11 // LoadBalancerExists indicates whether the specified Load Balancer exists. 12 // This function would fail the test if there is an error. 13 func LoadBalancerExists(t testing.TestingT, loadBalancerName string, resourceGroupName string, subscriptionID string) bool { 14 exists, err := LoadBalancerExistsE(loadBalancerName, resourceGroupName, subscriptionID) 15 require.NoError(t, err) 16 return exists 17 } 18 19 // LoadBalancerExistsE indicates whether the specified Load Balancer exists. 20 func LoadBalancerExistsE(loadBalancerName string, resourceGroupName string, subscriptionID string) (bool, error) { 21 _, err := GetLoadBalancerE(loadBalancerName, resourceGroupName, subscriptionID) 22 if err != nil { 23 if ResourceNotFoundErrorExists(err) { 24 return false, nil 25 } 26 return false, err 27 } 28 return true, nil 29 } 30 31 // GetLoadBalancerFrontendIPConfigNames gets a list of the Frontend IP Configuration Names for the Load Balancer. 32 // This function would fail the test if there is an error. 33 func GetLoadBalancerFrontendIPConfigNames(t testing.TestingT, loadBalancerName string, resourceGroupName string, subscriptionID string) []string { 34 configName, err := GetLoadBalancerFrontendIPConfigNamesE(loadBalancerName, resourceGroupName, subscriptionID) 35 require.NoError(t, err) 36 return configName 37 } 38 39 // GetLoadBalancerFrontendIPConfigNamesE ConfigNamesE gets a list of the Frontend IP Configuration Names for the Load Balancer. 40 func GetLoadBalancerFrontendIPConfigNamesE(loadBalancerName string, resourceGroupName string, subscriptionID string) ([]string, error) { 41 lb, err := GetLoadBalancerE(loadBalancerName, resourceGroupName, subscriptionID) 42 if err != nil { 43 return nil, err 44 } 45 46 // Get the Frontend IP Configurations 47 lbProps := lb.LoadBalancerPropertiesFormat 48 feConfigs := *lbProps.FrontendIPConfigurations 49 if len(feConfigs) == 0 { 50 // No Frontend IP Configuration present 51 return nil, nil 52 } 53 54 // Get the names of the Frontend IP Configurations present 55 configNames := make([]string, len(feConfigs)) 56 for i, config := range feConfigs { 57 configNames[i] = *config.Name 58 } 59 60 return configNames, nil 61 } 62 63 // GetIPOfLoadBalancerFrontendIPConfig gets the IP and LoadBalancerIPType for the specified Load Balancer Frontend IP Configuration. 64 // This function would fail the test if there is an error. 65 func GetIPOfLoadBalancerFrontendIPConfig(t testing.TestingT, feConfigName string, loadBalancerName string, resourceGroupName string, subscriptionID string) (ipAddress string, publicOrPrivate LoadBalancerIPType) { 66 ipAddress, ipType, err := GetIPOfLoadBalancerFrontendIPConfigE(feConfigName, loadBalancerName, resourceGroupName, subscriptionID) 67 require.NoError(t, err) 68 return ipAddress, ipType 69 } 70 71 // GetIPOfLoadBalancerFrontendIPConfigE gets the IP and LoadBalancerIPType for the specified Load Balancer Frontend IP Configuration. 72 func GetIPOfLoadBalancerFrontendIPConfigE(feConfigName string, loadBalancerName string, resourceGroupName string, subscriptionID string) (ipAddress string, publicOrPrivate LoadBalancerIPType, err1 error) { 73 // Get the specified Load Balancer Frontend Config 74 feConfig, err := GetLoadBalancerFrontendIPConfigE(feConfigName, loadBalancerName, resourceGroupName, subscriptionID) 75 if err != nil { 76 return "", NoIP, err 77 } 78 79 // Get the Properties of the Frontend Configuration 80 feProps := *feConfig.FrontendIPConfigurationPropertiesFormat 81 82 // Check for the Public Type Frontend Config 83 if feProps.PublicIPAddress != nil { 84 // Get PublicIPAddress resource name from the Load Balancer Frontend Configuration 85 pipName := GetNameFromResourceID(*feProps.PublicIPAddress.ID) 86 87 // Get the Public IP of the PublicIPAddress 88 ipValue, err := GetIPOfPublicIPAddressByNameE(pipName, resourceGroupName, subscriptionID) 89 if err != nil { 90 return "", NoIP, err 91 } 92 93 return ipValue, PublicIP, nil 94 } 95 96 // Return the Private IP as there are no other option available 97 return *feProps.PrivateIPAddress, PrivateIP, nil 98 99 } 100 101 // GetLoadBalancerFrontendIPConfig gets the specified Load Balancer Frontend IP Configuration network resource. 102 // This function would fail the test if there is an error. 103 func GetLoadBalancerFrontendIPConfig(t testing.TestingT, feConfigName string, loadBalancerName string, resourceGroupName string, subscriptionID string) *network.FrontendIPConfiguration { 104 lbFEConfig, err := GetLoadBalancerFrontendIPConfigE(feConfigName, loadBalancerName, resourceGroupName, subscriptionID) 105 require.NoError(t, err) 106 return lbFEConfig 107 } 108 109 // GetLoadBalancerFrontendIPConfigE gets the specified Load Balancer Frontend IP Configuration network resource. 110 func GetLoadBalancerFrontendIPConfigE(feConfigName string, loadBalancerName string, resourceGroupName string, subscriptionID string) (*network.FrontendIPConfiguration, error) { 111 // Validate Azure Resource Group Name 112 resourceGroupName, err := getTargetAzureResourceGroupName(resourceGroupName) 113 if err != nil { 114 return nil, err 115 } 116 117 // Get the client reference 118 client, err := GetLoadBalancerFrontendIPConfigClientE(subscriptionID) 119 if err != nil { 120 return nil, err 121 } 122 123 // Get the Load Balancer Frontend IP Configuration 124 lbc, err := client.Get(context.Background(), resourceGroupName, loadBalancerName, feConfigName) 125 if err != nil { 126 return nil, err 127 } 128 129 return &lbc, nil 130 } 131 132 // GetLoadBalancerFrontendIPConfigClientE gets a new Load Balancer Frontend IP Configuration client in the specified Azure Subscription. 133 func GetLoadBalancerFrontendIPConfigClientE(subscriptionID string) (*network.LoadBalancerFrontendIPConfigurationsClient, error) { 134 // Validate Azure subscription ID 135 subscriptionID, err := getTargetAzureSubscription(subscriptionID) 136 if err != nil { 137 return nil, err 138 } 139 140 // Get the Load Balancer Frontend Configuration client 141 client := network.NewLoadBalancerFrontendIPConfigurationsClient(subscriptionID) 142 143 // Create an authorizer 144 authorizer, err := NewAuthorizer() 145 if err != nil { 146 return nil, err 147 } 148 client.Authorizer = *authorizer 149 150 return &client, nil 151 } 152 153 // GetLoadBalancer gets a Load Balancer network resource in the specified Azure Resource Group. 154 // This function would fail the test if there is an error. 155 func GetLoadBalancer(t testing.TestingT, loadBalancerName string, resourceGroupName string, subscriptionID string) *network.LoadBalancer { 156 lb, err := GetLoadBalancerE(loadBalancerName, resourceGroupName, subscriptionID) 157 require.NoError(t, err) 158 return lb 159 } 160 161 // GetLoadBalancerE gets a Load Balancer network resource in the specified Azure Resource Group. 162 func GetLoadBalancerE(loadBalancerName string, resourceGroupName string, subscriptionID string) (*network.LoadBalancer, error) { 163 // Validate Azure Resource Group Name 164 resourceGroupName, err := getTargetAzureResourceGroupName(resourceGroupName) 165 if err != nil { 166 return nil, err 167 } 168 169 // Get the client reference 170 client, err := GetLoadBalancerClientE(subscriptionID) 171 if err != nil { 172 return nil, err 173 } 174 175 // Get the Load Balancer 176 lb, err := client.Get(context.Background(), resourceGroupName, loadBalancerName, "") 177 if err != nil { 178 return nil, err 179 } 180 181 return &lb, nil 182 } 183 184 // GetLoadBalancerClientE gets a new Load Balancer client in the specified Azure Subscription. 185 func GetLoadBalancerClientE(subscriptionID string) (*network.LoadBalancersClient, error) { 186 // Get the Load Balancer client 187 client, err := CreateLoadBalancerClientE(subscriptionID) 188 if err != nil { 189 return nil, err 190 } 191 192 // Create an authorizer 193 authorizer, err := NewAuthorizer() 194 if err != nil { 195 return nil, err 196 } 197 client.Authorizer = *authorizer 198 199 return client, nil 200 }