github.com/mponton/terratest@v0.44.0/modules/azure/client_factory.go (about)

     1  /*
     2  
     3  This file implements an Azure client factory that automatically handles setting up Base URI
     4  values for sovereign cloud support. Note the list of clients below is not initially exhaustive;
     5  rather, additional clients will be added as-needed.
     6  
     7  */
     8  
     9  package azure
    10  
    11  // snippet-tag-start::client_factory_example.imports
    12  
    13  import (
    14  	"os"
    15  	"reflect"
    16  
    17  	"github.com/Azure/azure-sdk-for-go/profiles/latest/frontdoor/mgmt/frontdoor"
    18  	"github.com/Azure/azure-sdk-for-go/profiles/latest/mysql/mgmt/mysql"
    19  	"github.com/Azure/azure-sdk-for-go/profiles/latest/resources/mgmt/resources"
    20  	"github.com/Azure/azure-sdk-for-go/profiles/latest/sql/mgmt/sql"
    21  	"github.com/Azure/azure-sdk-for-go/profiles/preview/cosmos-db/mgmt/documentdb"
    22  	"github.com/Azure/azure-sdk-for-go/profiles/preview/preview/monitor/mgmt/insights"
    23  	"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2019-07-01/compute"
    24  	"github.com/Azure/azure-sdk-for-go/services/containerinstance/mgmt/2018-10-01/containerinstance"
    25  	"github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry"
    26  	"github.com/Azure/azure-sdk-for-go/services/containerservice/mgmt/2019-11-01/containerservice"
    27  	"github.com/Azure/azure-sdk-for-go/services/datafactory/mgmt/2018-06-01/datafactory"
    28  	kvmng "github.com/Azure/azure-sdk-for-go/services/keyvault/mgmt/2016-10-01/keyvault"
    29  	"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-09-01/network"
    30  	"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2019-06-01/subscriptions"
    31  	"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2019-06-01/storage"
    32  	"github.com/Azure/azure-sdk-for-go/services/synapse/mgmt/2020-12-01/synapse"
    33  	"github.com/Azure/azure-sdk-for-go/services/web/mgmt/2019-08-01/web"
    34  	autorestAzure "github.com/Azure/go-autorest/autorest/azure"
    35  )
    36  
    37  // snippet-tag-end::client_factory_example.imports
    38  
    39  const (
    40  	// AzureEnvironmentEnvName is the name of the Azure environment to use. Set to one of the following:
    41  	//
    42  	// "AzureChinaCloud":        ChinaCloud
    43  	// "AzureGermanCloud":       GermanCloud
    44  	// "AzurePublicCloud":       PublicCloud
    45  	// "AzureUSGovernmentCloud": USGovernmentCloud
    46  	// "AzureStackCloud":		 Azure stack
    47  	AzureEnvironmentEnvName = "AZURE_ENVIRONMENT"
    48  
    49  	// ResourceManagerEndpointName is the name of the ResourceManagerEndpoint field in the Environment struct.
    50  	ResourceManagerEndpointName = "ResourceManagerEndpoint"
    51  )
    52  
    53  // ClientType describes the type of client a module can create.
    54  type ClientType int
    55  
    56  // CreateSubscriptionsClientE returns a virtual machines client instance configured with the correct BaseURI depending on
    57  // the Azure environment that is currently setup (or "Public", if none is setup).
    58  func CreateSubscriptionsClientE() (subscriptions.Client, error) {
    59  	// Lookup environment URI
    60  	baseURI, err := getBaseURI()
    61  	if err != nil {
    62  		return subscriptions.Client{}, err
    63  	}
    64  
    65  	// Create correct client based on type passed
    66  	return subscriptions.NewClientWithBaseURI(baseURI), nil
    67  }
    68  
    69  // snippet-tag-start::client_factory_example.CreateClient
    70  
    71  // CreateVirtualMachinesClientE returns a virtual machines client instance configured with the correct BaseURI depending on
    72  // the Azure environment that is currently setup (or "Public", if none is setup).
    73  func CreateVirtualMachinesClientE(subscriptionID string) (*compute.VirtualMachinesClient, error) {
    74  	// Validate Azure subscription ID
    75  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
    76  	if err != nil {
    77  		return nil, err
    78  	}
    79  
    80  	// Lookup environment URI
    81  	baseURI, err := getBaseURI()
    82  	if err != nil {
    83  		return nil, err
    84  	}
    85  
    86  	// Create correct client based on type passed
    87  	vmClient := compute.NewVirtualMachinesClientWithBaseURI(baseURI, subscriptionID)
    88  
    89  	return &vmClient, nil
    90  }
    91  
    92  // snippet-tag-end::client_factory_example.CreateClient
    93  
    94  // CreateManagedClustersClientE returns a virtual machines client instance configured with the correct BaseURI depending on
    95  // the Azure environment that is currently setup (or "Public", if none is setup).
    96  func CreateManagedClustersClientE(subscriptionID string) (containerservice.ManagedClustersClient, error) {
    97  	// Validate Azure subscription ID
    98  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
    99  	if err != nil {
   100  		return containerservice.ManagedClustersClient{}, err
   101  	}
   102  
   103  	// Lookup environment URI
   104  	baseURI, err := getBaseURI()
   105  	if err != nil {
   106  		return containerservice.ManagedClustersClient{}, err
   107  	}
   108  
   109  	// Create correct client based on type passed
   110  	return containerservice.NewManagedClustersClientWithBaseURI(baseURI, subscriptionID), nil
   111  }
   112  
   113  // CreateCosmosDBAccountClientE is a helper function that will setup a CosmosDB account client with the correct BaseURI depending on
   114  // the Azure environment that is currently setup (or "Public", if none is setup).
   115  func CreateCosmosDBAccountClientE(subscriptionID string) (*documentdb.DatabaseAccountsClient, error) {
   116  	// Validate Azure subscription ID
   117  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   118  	if err != nil {
   119  		return nil, err
   120  	}
   121  
   122  	// Lookup environment URI
   123  	baseURI, err := getBaseURI()
   124  	if err != nil {
   125  		return nil, err
   126  	}
   127  
   128  	// Create a CosmosDB client
   129  	cosmosClient := documentdb.NewDatabaseAccountsClientWithBaseURI(baseURI, subscriptionID)
   130  
   131  	return &cosmosClient, nil
   132  }
   133  
   134  // CreateCosmosDBSQLClientE is a helper function that will setup a CosmosDB SQL client with the correct BaseURI depending on
   135  // the Azure environment that is currently setup (or "Public", if none is setup).
   136  func CreateCosmosDBSQLClientE(subscriptionID string) (*documentdb.SQLResourcesClient, error) {
   137  	// Validate Azure subscription ID
   138  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   139  	if err != nil {
   140  		return nil, err
   141  	}
   142  
   143  	// Lookup environment URI
   144  	baseURI, err := getBaseURI()
   145  	if err != nil {
   146  		return nil, err
   147  	}
   148  
   149  	// Create a CosmosDB client
   150  	cosmosClient := documentdb.NewSQLResourcesClientWithBaseURI(baseURI, subscriptionID)
   151  
   152  	return &cosmosClient, nil
   153  }
   154  
   155  // CreateKeyVaultManagementClientE is a helper function that will setup a key vault management client with the correct BaseURI depending on
   156  // the Azure environment that is currently setup (or "Public", if none is setup).
   157  func CreateKeyVaultManagementClientE(subscriptionID string) (*kvmng.VaultsClient, error) {
   158  	// Validate Azure subscription ID
   159  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   160  	if err != nil {
   161  		return nil, err
   162  	}
   163  
   164  	// Lookup environment URI
   165  	baseURI, err := getBaseURI()
   166  	if err != nil {
   167  		return nil, err
   168  	}
   169  
   170  	//create keyvault management clinet
   171  	vaultClient := kvmng.NewVaultsClientWithBaseURI(baseURI, subscriptionID)
   172  
   173  	return &vaultClient, nil
   174  }
   175  
   176  // CreateStorageAccountClientE creates a storage account client.
   177  func CreateStorageAccountClientE(subscriptionID string) (*storage.AccountsClient, error) {
   178  	// Validate Azure subscription ID
   179  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   180  	if err != nil {
   181  		return nil, err
   182  	}
   183  
   184  	// Lookup environment URI
   185  	baseURI, err := getBaseURI()
   186  	if err != nil {
   187  		return nil, err
   188  	}
   189  
   190  	storageAccountClient := storage.NewAccountsClientWithBaseURI(baseURI, subscriptionID)
   191  	authorizer, err := NewAuthorizer()
   192  	if err != nil {
   193  		return nil, err
   194  	}
   195  	storageAccountClient.Authorizer = *authorizer
   196  	return &storageAccountClient, nil
   197  }
   198  
   199  // CreateStorageBlobContainerClientE creates a storage container client.
   200  func CreateStorageBlobContainerClientE(subscriptionID string) (*storage.BlobContainersClient, error) {
   201  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   202  	if err != nil {
   203  		return nil, err
   204  	}
   205  
   206  	// Lookup environment URI
   207  	baseURI, err := getBaseURI()
   208  	if err != nil {
   209  		return nil, err
   210  	}
   211  
   212  	blobContainerClient := storage.NewBlobContainersClientWithBaseURI(baseURI, subscriptionID)
   213  	authorizer, err := NewAuthorizer()
   214  
   215  	if err != nil {
   216  		return nil, err
   217  	}
   218  	blobContainerClient.Authorizer = *authorizer
   219  	return &blobContainerClient, nil
   220  }
   221  
   222  // CreateStorageFileSharesClientE creates a storage file share client.
   223  func CreateStorageFileSharesClientE(subscriptionID string) (*storage.FileSharesClient, error) {
   224  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   225  	if err != nil {
   226  		return nil, err
   227  	}
   228  
   229  	// Lookup environment URI
   230  	baseURI, err := getBaseURI()
   231  	if err != nil {
   232  		return nil, err
   233  	}
   234  
   235  	fileShareClient := storage.NewFileSharesClientWithBaseURI(baseURI, subscriptionID)
   236  	authorizer, err := NewAuthorizer()
   237  
   238  	if err != nil {
   239  		return nil, err
   240  	}
   241  	fileShareClient.Authorizer = *authorizer
   242  	return &fileShareClient, nil
   243  }
   244  
   245  // CreateAvailabilitySetClientE creates a new Availability Set client in the specified Azure Subscription
   246  func CreateAvailabilitySetClientE(subscriptionID string) (*compute.AvailabilitySetsClient, error) {
   247  	// Validate Azure subscription ID
   248  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   249  	if err != nil {
   250  		return nil, err
   251  	}
   252  
   253  	// Lookup environment URI
   254  	baseURI, err := getBaseURI()
   255  	if err != nil {
   256  		return nil, err
   257  	}
   258  
   259  	// Get the Availability Set client
   260  	client := compute.NewAvailabilitySetsClientWithBaseURI(baseURI, subscriptionID)
   261  
   262  	// Create an authorizer
   263  	authorizer, err := NewAuthorizer()
   264  	if err != nil {
   265  		return nil, err
   266  	}
   267  	client.Authorizer = *authorizer
   268  
   269  	return &client, nil
   270  }
   271  
   272  // CreateResourceGroupClientE gets a resource group client in a subscription
   273  func CreateResourceGroupClientE(subscriptionID string) (*resources.GroupsClient, error) {
   274  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   275  	if err != nil {
   276  		return nil, err
   277  	}
   278  
   279  	// Lookup environment URI
   280  	baseURI, err := getBaseURI()
   281  	if err != nil {
   282  		return nil, err
   283  	}
   284  
   285  	resourceGroupClient := resources.NewGroupsClientWithBaseURI(baseURI, subscriptionID)
   286  
   287  	authorizer, err := NewAuthorizer()
   288  	if err != nil {
   289  		return nil, err
   290  	}
   291  	resourceGroupClient.Authorizer = *authorizer
   292  	return &resourceGroupClient, nil
   293  }
   294  
   295  // CreateSQLServerClient is a helper function that will create and setup a sql server client
   296  func CreateSQLServerClient(subscriptionID string) (*sql.ServersClient, error) {
   297  	// Validate Azure subscription ID
   298  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   299  	if err != nil {
   300  		return nil, err
   301  	}
   302  
   303  	// Lookup environment URI
   304  	baseURI, err := getBaseURI()
   305  	if err != nil {
   306  		return nil, err
   307  	}
   308  
   309  	// Create a sql server client
   310  	sqlClient := sql.NewServersClientWithBaseURI(baseURI, subscriptionID)
   311  
   312  	// Create an authorizer
   313  	authorizer, err := NewAuthorizer()
   314  	if err != nil {
   315  		return nil, err
   316  	}
   317  
   318  	// Attach authorizer to the client
   319  	sqlClient.Authorizer = *authorizer
   320  
   321  	return &sqlClient, nil
   322  }
   323  
   324  // CreateDatabaseClient is a helper function that will create and setup a SQL DB client
   325  func CreateDatabaseClient(subscriptionID string) (*sql.DatabasesClient, error) {
   326  	// Validate Azure subscription ID
   327  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   328  	if err != nil {
   329  		return nil, err
   330  	}
   331  
   332  	// Lookup environment URI
   333  	baseURI, err := getBaseURI()
   334  	if err != nil {
   335  		return nil, err
   336  	}
   337  
   338  	// Create a sql DB client
   339  	sqlDBClient := sql.NewDatabasesClientWithBaseURI(baseURI, subscriptionID)
   340  
   341  	// Create an authorizer
   342  	authorizer, err := NewAuthorizer()
   343  	if err != nil {
   344  		return nil, err
   345  	}
   346  
   347  	// Attach authorizer to the client
   348  	sqlDBClient.Authorizer = *authorizer
   349  
   350  	return &sqlDBClient, nil
   351  }
   352  
   353  // CreateMySQLServerClientE is a helper function that will setup a mysql server client.
   354  func CreateMySQLServerClientE(subscriptionID string) (*mysql.ServersClient, error) {
   355  	// Validate Azure subscription ID
   356  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   357  	if err != nil {
   358  		return nil, err
   359  	}
   360  
   361  	// Lookup environment URI
   362  	baseURI, err := getBaseURI()
   363  	if err != nil {
   364  		return nil, err
   365  	}
   366  
   367  	// Create a mysql server client
   368  	mysqlClient := mysql.NewServersClientWithBaseURI(baseURI, subscriptionID)
   369  
   370  	// Create an authorizer
   371  	authorizer, err := NewAuthorizer()
   372  	if err != nil {
   373  		return nil, err
   374  	}
   375  
   376  	// Attach authorizer to the client
   377  	mysqlClient.Authorizer = *authorizer
   378  
   379  	return &mysqlClient, nil
   380  }
   381  
   382  // CreateDisksClientE returns a new Disks client in the specified Azure Subscription
   383  func CreateDisksClientE(subscriptionID string) (*compute.DisksClient, error) {
   384  	// Validate Azure subscription ID
   385  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   386  	if err != nil {
   387  		return nil, err
   388  	}
   389  
   390  	// Lookup environment URI
   391  	baseURI, err := getBaseURI()
   392  	if err != nil {
   393  		return nil, err
   394  	}
   395  
   396  	// Get the Disks client
   397  	client := compute.NewDisksClientWithBaseURI(baseURI, subscriptionID)
   398  
   399  	// Create an authorizer
   400  	authorizer, err := NewAuthorizer()
   401  	if err != nil {
   402  		return nil, err
   403  	}
   404  
   405  	client.Authorizer = *authorizer
   406  
   407  	return &client, nil
   408  }
   409  
   410  func CreateActionGroupClient(subscriptionID string) (*insights.ActionGroupsClient, error) {
   411  	subID, err := getTargetAzureSubscription(subscriptionID)
   412  	if err != nil {
   413  		return nil, err
   414  	}
   415  
   416  	// Lookup environment URI
   417  	baseURI, err := getBaseURI()
   418  	if err != nil {
   419  		return nil, err
   420  	}
   421  
   422  	metricAlertsClient := insights.NewActionGroupsClientWithBaseURI(baseURI, subID)
   423  
   424  	authorizer, err := NewAuthorizer()
   425  	if err != nil {
   426  		return nil, err
   427  	}
   428  
   429  	metricAlertsClient.Authorizer = *authorizer
   430  
   431  	return &metricAlertsClient, nil
   432  }
   433  
   434  // CreateVMInsightsClientE gets a VM Insights client
   435  func CreateVMInsightsClientE(subscriptionID string) (*insights.VMInsightsClient, error) {
   436  	// Validate Azure subscription ID
   437  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   438  	if err != nil {
   439  		return nil, err
   440  	}
   441  
   442  	// Lookup environment URI
   443  	baseURI, err := getBaseURI()
   444  	if err != nil {
   445  		return nil, err
   446  	}
   447  
   448  	client := insights.NewVMInsightsClientWithBaseURI(baseURI, subscriptionID)
   449  
   450  	authorizer, err := NewAuthorizer()
   451  	if err != nil {
   452  		return nil, err
   453  	}
   454  
   455  	client.Authorizer = *authorizer
   456  
   457  	return &client, nil
   458  }
   459  
   460  // CreateActivityLogAlertsClientE gets an Action Groups client in the specified Azure Subscription
   461  func CreateActivityLogAlertsClientE(subscriptionID string) (*insights.ActivityLogAlertsClient, error) {
   462  	// Validate Azure subscription ID
   463  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   464  	if err != nil {
   465  		return nil, err
   466  	}
   467  
   468  	// Lookup environment URI
   469  	baseURI, err := getBaseURI()
   470  	if err != nil {
   471  		return nil, err
   472  	}
   473  
   474  	// Get the Action Groups client
   475  	client := insights.NewActivityLogAlertsClientWithBaseURI(baseURI, subscriptionID)
   476  
   477  	// Create an authorizer
   478  	authorizer, err := NewAuthorizer()
   479  	if err != nil {
   480  		return nil, err
   481  	}
   482  
   483  	client.Authorizer = *authorizer
   484  
   485  	return &client, nil
   486  }
   487  
   488  // CreateDiagnosticsSettingsClientE returns a diagnostics settings client
   489  func CreateDiagnosticsSettingsClientE(subscriptionID string) (*insights.DiagnosticSettingsClient, error) {
   490  	// Validate Azure subscription ID
   491  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   492  	if err != nil {
   493  		return nil, err
   494  	}
   495  
   496  	// Lookup environment URI
   497  	baseURI, err := getBaseURI()
   498  	if err != nil {
   499  		return nil, err
   500  	}
   501  
   502  	client := insights.NewDiagnosticSettingsClientWithBaseURI(baseURI, subscriptionID)
   503  
   504  	authorizer, err := NewAuthorizer()
   505  	if err != nil {
   506  		return nil, err
   507  	}
   508  
   509  	client.Authorizer = *authorizer
   510  
   511  	return &client, nil
   512  }
   513  
   514  // CreateNsgDefaultRulesClientE returns an NSG default (platform) rules client instance configured with the
   515  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   516  func CreateNsgDefaultRulesClientE(subscriptionID string) (*network.DefaultSecurityRulesClient, error) {
   517  	// Validate Azure subscription ID
   518  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   519  	if err != nil {
   520  		return nil, err
   521  	}
   522  
   523  	// Lookup environment URI
   524  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   525  	if err != nil {
   526  		return nil, err
   527  	}
   528  
   529  	// Create new client
   530  	nsgClient := network.NewDefaultSecurityRulesClientWithBaseURI(baseURI, subscriptionID)
   531  	return &nsgClient, nil
   532  }
   533  
   534  // CreateNsgCustomRulesClientE returns an NSG custom (user) rules client instance configured with the
   535  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   536  func CreateNsgCustomRulesClientE(subscriptionID string) (*network.SecurityRulesClient, error) {
   537  	// Validate Azure subscription ID
   538  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   539  	if err != nil {
   540  		return nil, err
   541  	}
   542  
   543  	// Lookup environment URI
   544  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   545  	if err != nil {
   546  		return nil, err
   547  	}
   548  
   549  	// Create new client
   550  	nsgClient := network.NewSecurityRulesClientWithBaseURI(baseURI, subscriptionID)
   551  	return &nsgClient, nil
   552  }
   553  
   554  // CreateNewNetworkInterfacesClientE returns an NIC client instance configured with the
   555  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   556  func CreateNewNetworkInterfacesClientE(subscriptionID string) (*network.InterfacesClient, error) {
   557  	// Validate Azure subscription ID
   558  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   559  	if err != nil {
   560  		return nil, err
   561  	}
   562  
   563  	// Lookup environment URI
   564  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   565  	if err != nil {
   566  		return nil, err
   567  	}
   568  
   569  	// create client
   570  	nicClient := network.NewInterfacesClientWithBaseURI(baseURI, subscriptionID)
   571  	return &nicClient, nil
   572  }
   573  
   574  // CreateNewNetworkInterfaceIPConfigurationClientE returns an NIC IP configuration client instance configured with the
   575  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   576  func CreateNewNetworkInterfaceIPConfigurationClientE(subscriptionID string) (*network.InterfaceIPConfigurationsClient, error) {
   577  	// Validate Azure subscription ID
   578  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   579  	if err != nil {
   580  		return nil, err
   581  	}
   582  
   583  	// Lookup environment URI
   584  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   585  	if err != nil {
   586  		return nil, err
   587  	}
   588  
   589  	// create client
   590  	ipConfigClient := network.NewInterfaceIPConfigurationsClientWithBaseURI(baseURI, subscriptionID)
   591  	return &ipConfigClient, nil
   592  }
   593  
   594  // CreatePublicIPAddressesClientE returns a public IP address client instance configured with the correct BaseURI depending on
   595  // the Azure environment that is currently setup (or "Public", if none is setup).
   596  func CreatePublicIPAddressesClientE(subscriptionID string) (*network.PublicIPAddressesClient, error) {
   597  	// Validate Azure subscription ID
   598  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   599  	if err != nil {
   600  		return nil, err
   601  	}
   602  
   603  	// Lookup environment URI
   604  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   605  	if err != nil {
   606  		return nil, err
   607  	}
   608  
   609  	// Create client
   610  	client := network.NewPublicIPAddressesClientWithBaseURI(baseURI, subscriptionID)
   611  	return &client, nil
   612  }
   613  
   614  // CreateLoadBalancerClientE returns a load balancer client instance configured with the correct BaseURI depending on
   615  // the Azure environment that is currently setup (or "Public", if none is setup).
   616  func CreateLoadBalancerClientE(subscriptionID string) (*network.LoadBalancersClient, error) {
   617  	// Validate Azure subscription ID
   618  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   619  	if err != nil {
   620  		return nil, err
   621  	}
   622  
   623  	// Lookup environment URI
   624  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   625  	if err != nil {
   626  		return nil, err
   627  	}
   628  
   629  	//create LB client
   630  	client := network.NewLoadBalancersClientWithBaseURI(baseURI, subscriptionID)
   631  	return &client, nil
   632  }
   633  
   634  // CreateNewSubnetClientE returns a Subnet client instance configured with the
   635  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   636  func CreateNewSubnetClientE(subscriptionID string) (*network.SubnetsClient, error) {
   637  	// Validate Azure subscription ID
   638  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   639  	if err != nil {
   640  		return nil, err
   641  	}
   642  
   643  	// Lookup environment URI
   644  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   645  	if err != nil {
   646  		return nil, err
   647  	}
   648  
   649  	// create client
   650  	subnetClient := network.NewSubnetsClientWithBaseURI(baseURI, subscriptionID)
   651  	return &subnetClient, nil
   652  }
   653  
   654  // CreateNewVirtualNetworkClientE returns a Virtual Network client instance configured with the
   655  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   656  func CreateNewVirtualNetworkClientE(subscriptionID string) (*network.VirtualNetworksClient, error) {
   657  	// Validate Azure subscription ID
   658  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   659  	if err != nil {
   660  		return nil, err
   661  	}
   662  
   663  	// Lookup environment URI
   664  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   665  	if err != nil {
   666  		return nil, err
   667  	}
   668  
   669  	// create client
   670  	vnetClient := network.NewVirtualNetworksClientWithBaseURI(baseURI, subscriptionID)
   671  	return &vnetClient, nil
   672  }
   673  
   674  // CreateAppServiceClientE returns an App service client instance configured with the
   675  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   676  func CreateAppServiceClientE(subscriptionID string) (*web.AppsClient, error) {
   677  
   678  	// Validate Azure subscription ID
   679  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   680  	if err != nil {
   681  		return nil, err
   682  	}
   683  
   684  	// Lookup environment URI
   685  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   686  	if err != nil {
   687  		return nil, err
   688  	}
   689  
   690  	// create client
   691  	appsClient := web.NewAppsClientWithBaseURI(baseURI, subscriptionID)
   692  	return &appsClient, nil
   693  }
   694  
   695  // CreateContainerRegistryClientE returns an ACR client instance configured with the
   696  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   697  func CreateContainerRegistryClientE(subscriptionID string) (*containerregistry.RegistriesClient, error) {
   698  
   699  	// Validate Azure subscription ID
   700  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   701  	if err != nil {
   702  		return nil, err
   703  	}
   704  
   705  	// Lookup environment URI
   706  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   707  	if err != nil {
   708  		return nil, err
   709  	}
   710  
   711  	// create client
   712  	registryClient := containerregistry.NewRegistriesClientWithBaseURI(baseURI, subscriptionID)
   713  	return &registryClient, nil
   714  }
   715  
   716  // CreateContainerInstanceClientE returns an ACI client instance configured with the
   717  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   718  func CreateContainerInstanceClientE(subscriptionID string) (*containerinstance.ContainerGroupsClient, error) {
   719  	// Validate Azure subscription ID
   720  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   721  	if err != nil {
   722  		return nil, err
   723  	}
   724  
   725  	// Lookup environment URI
   726  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   727  	if err != nil {
   728  		return nil, err
   729  	}
   730  
   731  	// create client
   732  	instanceClient := containerinstance.NewContainerGroupsClientWithBaseURI(baseURI, subscriptionID)
   733  	return &instanceClient, nil
   734  }
   735  
   736  // CreateFrontDoorClientE returns an AFD client instance configured with the
   737  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   738  func CreateFrontDoorClientE(subscriptionID string) (*frontdoor.FrontDoorsClient, error) {
   739  	// Validate Azure subscription ID
   740  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   741  	if err != nil {
   742  		return nil, err
   743  	}
   744  
   745  	// Lookup environment URI
   746  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   747  	if err != nil {
   748  		return nil, err
   749  	}
   750  
   751  	// create client
   752  	client := frontdoor.NewFrontDoorsClientWithBaseURI(baseURI, subscriptionID)
   753  	return &client, nil
   754  }
   755  
   756  // CreateFrontDoorFrontendEndpointClientE returns an AFD Frontend Endpoints client instance configured with the
   757  // correct BaseURI depending on the Azure environment that is currently setup (or "Public", if none is setup).
   758  func CreateFrontDoorFrontendEndpointClientE(subscriptionID string) (*frontdoor.FrontendEndpointsClient, error) {
   759  	// Validate Azure subscription ID
   760  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   761  	if err != nil {
   762  		return nil, err
   763  	}
   764  
   765  	// Lookup environment URI
   766  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   767  	if err != nil {
   768  		return nil, err
   769  	}
   770  
   771  	// create client
   772  	client := frontdoor.NewFrontendEndpointsClientWithBaseURI(baseURI, subscriptionID)
   773  	return &client, nil
   774  }
   775  
   776  // CreateSynapseWorkspaceClientE is a helper function that will setup a synapse client.
   777  func CreateSynapseWorkspaceClientE(subscriptionID string) (*synapse.WorkspacesClient, error) {
   778  	// Validate Azure subscription ID
   779  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   780  	if err != nil {
   781  		return nil, err
   782  	}
   783  
   784  	// Lookup environment URI
   785  	baseURI, err := getBaseURI()
   786  	if err != nil {
   787  		return nil, err
   788  	}
   789  
   790  	// Create a synapse client
   791  	synapseWorkspaceClient := synapse.NewWorkspacesClientWithBaseURI(baseURI, subscriptionID)
   792  
   793  	// Create an authorizer
   794  	authorizer, err := NewAuthorizer()
   795  	if err != nil {
   796  		return nil, err
   797  	}
   798  
   799  	// Attach authorizer to the client
   800  	synapseWorkspaceClient.Authorizer = *authorizer
   801  
   802  	return &synapseWorkspaceClient, nil
   803  }
   804  
   805  // CreateSynapseSqlPoolClientE is a helper function that will setup a synapse client.
   806  func CreateSynapseSqlPoolClientE(subscriptionID string) (*synapse.SQLPoolsClient, error) {
   807  	// Validate Azure subscription ID
   808  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   809  	if err != nil {
   810  		return nil, err
   811  	}
   812  
   813  	// Lookup environment URI
   814  	baseURI, err := getBaseURI()
   815  	if err != nil {
   816  		return nil, err
   817  	}
   818  
   819  	// Create a synapse client
   820  	synapseSqlPoolClient := synapse.NewSQLPoolsClientWithBaseURI(baseURI, subscriptionID)
   821  
   822  	// Create an authorizer
   823  	authorizer, err := NewAuthorizer()
   824  	if err != nil {
   825  		return nil, err
   826  	}
   827  
   828  	// Attach authorizer to the client
   829  	synapseSqlPoolClient.Authorizer = *authorizer
   830  
   831  	return &synapseSqlPoolClient, nil
   832  }
   833  
   834  // CreateDataFactoriesClientE is a helper function that will setup a synapse client.
   835  func CreateDataFactoriesClientE(subscriptionID string) (*datafactory.FactoriesClient, error) {
   836  	// Validate Azure subscription ID
   837  	subscriptionID, err := getTargetAzureSubscription(subscriptionID)
   838  	if err != nil {
   839  		return nil, err
   840  	}
   841  
   842  	// Lookup environment URI
   843  	baseURI, err := getBaseURI()
   844  	if err != nil {
   845  		return nil, err
   846  	}
   847  
   848  	// Create a synapse client
   849  	dataFactoryClient := datafactory.NewFactoriesClientWithBaseURI(baseURI, subscriptionID)
   850  
   851  	// Create an authorizer
   852  	authorizer, err := NewAuthorizer()
   853  	if err != nil {
   854  		return nil, err
   855  	}
   856  
   857  	// Attach authorizer to the client
   858  	dataFactoryClient.Authorizer = *authorizer
   859  
   860  	return &dataFactoryClient, nil
   861  }
   862  
   863  // GetKeyVaultURISuffixE returns the proper KeyVault URI suffix for the configured Azure environment.
   864  // This function would fail the test if there is an error.
   865  func GetKeyVaultURISuffixE() (string, error) {
   866  	envName := getDefaultEnvironmentName()
   867  	env, err := autorestAzure.EnvironmentFromName(envName)
   868  	if err != nil {
   869  		return "", err
   870  	}
   871  	return env.KeyVaultDNSSuffix, nil
   872  }
   873  
   874  // getDefaultEnvironmentName returns either a configured Azure environment name, or the public default
   875  func getDefaultEnvironmentName() string {
   876  	envName, exists := os.LookupEnv(AzureEnvironmentEnvName)
   877  
   878  	if exists && len(envName) > 0 {
   879  		return envName
   880  	}
   881  
   882  	return autorestAzure.PublicCloud.Name
   883  }
   884  
   885  // getEnvironmentEndpointE returns the endpoint identified by the endpoint name parameter.
   886  func getEnvironmentEndpointE(endpointName string) (string, error) {
   887  	envName := getDefaultEnvironmentName()
   888  	env, err := autorestAzure.EnvironmentFromName(envName)
   889  	if err != nil {
   890  		return "", err
   891  	}
   892  	return getFieldValue(&env, endpointName), nil
   893  }
   894  
   895  // getFieldValue gets the field identified by the field parameter from the passed Environment struct
   896  func getFieldValue(env *autorestAzure.Environment, field string) string {
   897  	structValue := reflect.ValueOf(env)
   898  	fieldVal := reflect.Indirect(structValue).FieldByName(field)
   899  	return fieldVal.String()
   900  }
   901  
   902  // getBaseURI gets the base URI endpoint.
   903  func getBaseURI() (string, error) {
   904  	// Lookup environment URI
   905  	baseURI, err := getEnvironmentEndpointE(ResourceManagerEndpointName)
   906  	if err != nil {
   907  		return "", err
   908  	}
   909  	return baseURI, nil
   910  }