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