internal/acceptance/testclient.go (67 lines of code) (raw):

package acceptance import ( "context" "fmt" "os" "strings" "sync" "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/terraform-provider-azapi/internal/clients" "github.com/Azure/terraform-provider-azapi/internal/features" ) var ( _client *clients.Client clientLock = &sync.Mutex{} ) func BuildTestClient() (*clients.Client, error) { clientLock.Lock() defer clientLock.Unlock() if _client == nil { var cloudConfig cloud.Configuration env := os.Getenv("ARM_ENVIRONMENT") switch strings.ToLower(env) { case "public": cloudConfig = cloud.AzurePublic case "usgovernment": cloudConfig = cloud.AzureGovernment case "china": cloudConfig = cloud.AzureChina default: cloudConfig = cloud.AzurePublic } if v := os.Getenv("ARM_TENANT_ID"); len(v) != 0 { // #nosec G104 os.Setenv("AZURE_TENANT_ID", v) } if v := os.Getenv("ARM_CLIENT_ID"); len(v) != 0 { // #nosec G104 os.Setenv("AZURE_CLIENT_ID", v) } if v := os.Getenv("ARM_CLIENT_SECRET"); len(v) != 0 { // #nosec G104 os.Setenv("AZURE_CLIENT_SECRET", v) } cred, err := azidentity.NewDefaultAzureCredential( &azidentity.DefaultAzureCredentialOptions{ ClientOptions: azcore.ClientOptions{ Cloud: cloudConfig, }, }) if err != nil { return nil, fmt.Errorf("failed to obtain a credential: %v", err) } copt := &clients.Option{ Cred: cred, CloudCfg: cloudConfig, Features: features.Default(), SkipProviderRegistration: true, TenantId: os.Getenv("ARM_TENANT_ID"), SubscriptionId: os.Getenv("ARM_SUBSCRIPTION_ID"), } client := &clients.Client{} if err := client.Build(context.TODO(), copt); err != nil { return nil, err } _client = client } return _client, nil }