func()

in pkg/cmd/serviceaccount/auth/provider.go [160:216]


func (a *authArgs) Validate() error {
	var err error

	if a.authMethod == "" {
		return errors.New("--auth-method is a required parameter")
	}
	if a.authMethod == cliAuthMethod && a.rawClientID != "" && a.clientSecret != "" {
		a.authMethod = clientSecretAuthMethod
	}
	if a.authMethod == clientSecretAuthMethod || a.authMethod == clientCertificateAuthMethod {
		if a.clientID, err = uuid.Parse(a.rawClientID); err != nil {
			return errors.Wrap(err, "parsing --client-id")
		}
		if a.authMethod == clientSecretAuthMethod {
			if a.clientSecret == "" {
				return errors.New(`--client-secret must be specified when --auth-method="client_secret"`)
			}
		} else if a.authMethod == clientCertificateAuthMethod {
			if a.certificatePath == "" || a.privateKeyPath == "" {
				return errors.New(`--certificate-path and --private-key-path must be specified when --auth-method="client_certificate"`)
			}
		}
	}

	a.subscriptionID, _ = uuid.Parse(a.rawSubscriptionID)
	if a.subscriptionID.String() == "00000000-0000-0000-0000-000000000000" {
		var subID uuid.UUID
		subID, err = getSubFromAzDir(filepath.Join(getHomeDir(), ".azure"))
		if err != nil || subID.String() == "00000000-0000-0000-0000-000000000000" {
			return errors.New("--subscription-id is required (and must be a valid UUID)")
		}
		mlog.Info("No subscription provided, using selected subscription from Azure CLI", "subscriptionID", subID.String())
		a.subscriptionID = subID
	}

	env, err := azure.EnvironmentFromName(a.rawAzureEnvironment)
	if err != nil {
		return errors.Wrap(err, "failed to parse --azure-env as a valid target Azure cloud environment")
	}

	if a.tenantID, err = cloud.GetTenantID(a.subscriptionID.String(), a.client); err != nil {
		return err
	}

	switch a.authMethod {
	case cliAuthMethod:
		a.azureClient, err = cloud.NewAzureClientWithCLI(env, a.subscriptionID.String(), a.client)
	case clientSecretAuthMethod:
		a.azureClient, err = cloud.NewAzureClientWithClientSecret(env, a.subscriptionID.String(), a.clientID.String(), a.clientSecret, a.tenantID, a.client)
	case clientCertificateAuthMethod:
		a.azureClient, err = cloud.NewAzureClientWithClientCertificateFile(env, a.subscriptionID.String(), a.clientID.String(), a.tenantID, a.certificatePath, a.privateKeyPath, a.client)
	default:
		err = errors.Errorf("--auth-method: ERROR: method unsupported. method=%q", a.authMethod)
	}

	return err
}