code: func createAzureClient(cfg SDConfig) (azureClient, error) {
  	env, err := azure.EnvironmentFromName(cfg.Environment)
  	if err != nil {
  		return azureClient{}, err
  	}
  
  	activeDirectoryEndpoint := env.ActiveDirectoryEndpoint
  	resourceManagerEndpoint := env.ResourceManagerEndpoint
  
  	var c azureClient
  
  	var spt *adal.ServicePrincipalToken
  
  	switch cfg.AuthenticationMethod {
  	case authMethodManagedIdentity:
  		msiEndpoint, err := adal.GetMSIVMEndpoint()
  		if err != nil {
  			return azureClient{}, err
  		}
  
  		spt, err = adal.NewServicePrincipalTokenFromMSI(msiEndpoint, resourceManagerEndpoint)
  		if err != nil {
  			return azureClient{}, err
  		}
  	case authMethodOAuth:
  		oauthConfig, err := adal.NewOAuthConfig(activeDirectoryEndpoint, cfg.TenantID)
  		if err != nil {
  			return azureClient{}, err
  		}
  
  		spt, err = adal.NewServicePrincipalToken(*oauthConfig, cfg.ClientID, string(cfg.ClientSecret), resourceManagerEndpoint)
  		if err != nil {
  			return azureClient{}, err
  		}
  	}
  
  	bearerAuthorizer := autorest.NewBearerAuthorizer(spt)
  
  	c.vm = compute.NewVirtualMachinesClientWithBaseURI(resourceManagerEndpoint, cfg.SubscriptionID)
  	c.vm.Authorizer = bearerAuthorizer
  
  	c.nic = network.NewInterfacesClientWithBaseURI(resourceManagerEndpoint, cfg.SubscriptionID)
  	c.nic.Authorizer = bearerAuthorizer
  
  	c.vmss = compute.NewVirtualMachineScaleSetsClientWithBaseURI(resourceManagerEndpoint, cfg.SubscriptionID)
  	c.vmss.Authorizer = bearerAuthorizer
  
  	c.vmssvm = compute.NewVirtualMachineScaleSetVMsClientWithBaseURI(resourceManagerEndpoint, cfg.SubscriptionID)
  	c.vmssvm.Authorizer = bearerAuthorizer
  
  	return c, nil
  }
docs: // createAzureClient is a helper function for creating an Azure compute client to ARM.