e2etest/stress_generators/config.go (90 lines of code) (raw):

package main import ( "errors" "fmt" "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-storage-azcopy/v10/common" "github.com/Azure/azure-storage-azcopy/v10/e2etest" "github.com/Azure/azure-storage-azcopy/v10/ste" "net/url" "reflect" "strings" ) type GeneratorConfig struct { AuthInfo struct { AuthSource struct { // Use the PS cred auth. Requires powershell 7 and Az Powershell installed. PSInherit bool `env:"PS_INHERIT,required"` // Use the AZ CLI auth. Requires Az CLI installed. CLIInherit bool `env:"CLI_INHERIT,required"` // Use an account key. Not recommended. AcctKey string `env:"ACCT_KEY,required"` } `env:",required,mutually_exclusive"` // Specify the tenant ID being used to authorize. TenantID string `env:"TENANT_ID"` } `env:",required"` RetryOptions struct { // An override switch similar to AzCopy's HttpRetryCodes string `env:"HTTP_RETRY_CODES"` } } var accountCache *e2etest.AzureAccountResourceManager func GetAccountResourceManager(uri string) (e2etest.AccountResourceManager, error) { if accountCache != nil { return accountCache, nil } opts := azcore.ClientOptions{ Retry: policy.RetryOptions{ MaxRetries: ste.UploadMaxTries, TryTimeout: ste.UploadTryTimeout, RetryDelay: ste.UploadRetryDelay, MaxRetryDelay: ste.UploadMaxRetryDelay, ShouldRetry: ste.GetShouldRetry(nil), }, } var out e2etest.AccountResourceManager u, err := url.Parse(uri) if err != nil { return nil, fmt.Errorf("failed to parse uri: %w", err) } // gross and bad, do as I say not as I do acctName := u.Host[:strings.IndexRune(u.Host, '.')] if acctKey := genConfig.AuthInfo.AuthSource.AcctKey; acctKey != "" { out = &e2etest.AzureAccountResourceManager{ InternalAccountName: acctName, InternalAccountKey: acctKey, InternalAccountType: e2etest.EAccountType.Standard(), } } else { tc, err := genConfig.GetTokenCredential() if err != nil { return nil, fmt.Errorf("failed to get account resource manager: invalid tokencredential: %w", err) } out = &OAuthAccountResourceManager{ serviceClientOptions: opts, cred: tc, accountName: acctName, } } return out, nil } func (g GeneratorConfig) GetTokenCredential() (azcore.TokenCredential, error) { ai := g.AuthInfo switch { case ai.AuthSource.CLIInherit: ret, err := azidentity.NewAzureCLICredential(&azidentity.AzureCLICredentialOptions{ TenantID: ai.TenantID, }) return ret, err case ai.AuthSource.PSInherit: ret, err := common.NewPowershellContextCredential(&common.PowershellContextCredentialOptions{ TenantID: ai.TenantID, }) return ret, err default: return nil, errors.New("invalid authSource") } } var genConfig GeneratorConfig func init() { err := e2etest.ReadConfig(reflect.ValueOf(&genConfig).Elem(), "GeneratorConfig", e2etest.EnvTag{Required: true}) if err != nil { panic("failed reading config: " + err.Error()) } }