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  }