azure: Update to SDK 10.0.3

The OAuth code was moved to the adal package.
Authorizers now ues an interface instead of a simple token.
Long running operations return a channel for the operation, and the
error.
This commit is contained in:
Christopher Boumenot 2017-05-28 00:38:45 -07:00
parent 054a75de26
commit 8cea6f5be5
14 changed files with 65 additions and 52 deletions

View File

@ -3,7 +3,10 @@
package arm package arm
import "github.com/Azure/go-autorest/autorest/azure" import (
"github.com/Azure/go-autorest/autorest/azure"
"github.com/Azure/go-autorest/autorest/adal"
)
type Authenticate struct { type Authenticate struct {
env azure.Environment env azure.Environment
@ -21,17 +24,17 @@ func NewAuthenticate(env azure.Environment, clientID, clientSecret, tenantID str
} }
} }
func (a *Authenticate) getServicePrincipalToken() (*azure.ServicePrincipalToken, error) { func (a *Authenticate) getServicePrincipalToken() (*adal.ServicePrincipalToken, error) {
return a.getServicePrincipalTokenWithResource(a.env.ResourceManagerEndpoint) return a.getServicePrincipalTokenWithResource(a.env.ResourceManagerEndpoint)
} }
func (a *Authenticate) getServicePrincipalTokenWithResource(resource string) (*azure.ServicePrincipalToken, error) { func (a *Authenticate) getServicePrincipalTokenWithResource(resource string) (*adal.ServicePrincipalToken, error) {
oauthConfig, err := a.env.OAuthConfigForTenant(a.tenantID) oauthConfig, err := adal.NewOAuthConfig(a.env.ActiveDirectoryEndpoint, a.tenantID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
spt, err := azure.NewServicePrincipalToken( spt, err := adal.NewServicePrincipalToken(
*oauthConfig, *oauthConfig,
a.clientID, a.clientID,
a.clientSecret, a.clientSecret,

View File

@ -21,6 +21,7 @@ import (
"github.com/Azure/go-autorest/autorest/azure" "github.com/Azure/go-autorest/autorest/azure"
"github.com/hashicorp/packer/builder/azure/common" "github.com/hashicorp/packer/builder/azure/common"
"github.com/hashicorp/packer/version" "github.com/hashicorp/packer/version"
"github.com/Azure/go-autorest/autorest/adal"
) )
const ( const (
@ -107,56 +108,56 @@ func byConcatDecorators(decorators ...autorest.RespondDecorator) autorest.Respon
func NewAzureClient(subscriptionID, resourceGroupName, storageAccountName string, func NewAzureClient(subscriptionID, resourceGroupName, storageAccountName string,
cloud *azure.Environment, cloud *azure.Environment,
servicePrincipalToken, servicePrincipalTokenVault *azure.ServicePrincipalToken) (*AzureClient, error) { servicePrincipalToken, servicePrincipalTokenVault *adal.ServicePrincipalToken) (*AzureClient, error) {
var azureClient = &AzureClient{} var azureClient = &AzureClient{}
maxlen := getInspectorMaxLength() maxlen := getInspectorMaxLength()
azureClient.DeploymentsClient = resources.NewDeploymentsClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID) azureClient.DeploymentsClient = resources.NewDeploymentsClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID)
azureClient.DeploymentsClient.Authorizer = servicePrincipalToken azureClient.DeploymentsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
azureClient.DeploymentsClient.RequestInspector = withInspection(maxlen) azureClient.DeploymentsClient.RequestInspector = withInspection(maxlen)
azureClient.DeploymentsClient.ResponseInspector = byInspecting(maxlen) azureClient.DeploymentsClient.ResponseInspector = byInspecting(maxlen)
azureClient.DeploymentsClient.UserAgent += packerUserAgent azureClient.DeploymentsClient.UserAgent += packerUserAgent
azureClient.GroupsClient = resources.NewGroupsClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID) azureClient.GroupsClient = resources.NewGroupsClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID)
azureClient.GroupsClient.Authorizer = servicePrincipalToken azureClient.GroupsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
azureClient.GroupsClient.RequestInspector = withInspection(maxlen) azureClient.GroupsClient.RequestInspector = withInspection(maxlen)
azureClient.GroupsClient.ResponseInspector = byInspecting(maxlen) azureClient.GroupsClient.ResponseInspector = byInspecting(maxlen)
azureClient.GroupsClient.UserAgent += packerUserAgent azureClient.GroupsClient.UserAgent += packerUserAgent
azureClient.InterfacesClient = network.NewInterfacesClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID) azureClient.InterfacesClient = network.NewInterfacesClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID)
azureClient.InterfacesClient.Authorizer = servicePrincipalToken azureClient.InterfacesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
azureClient.InterfacesClient.RequestInspector = withInspection(maxlen) azureClient.InterfacesClient.RequestInspector = withInspection(maxlen)
azureClient.InterfacesClient.ResponseInspector = byInspecting(maxlen) azureClient.InterfacesClient.ResponseInspector = byInspecting(maxlen)
azureClient.InterfacesClient.UserAgent += packerUserAgent azureClient.InterfacesClient.UserAgent += packerUserAgent
azureClient.SubnetsClient = network.NewSubnetsClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID) azureClient.SubnetsClient = network.NewSubnetsClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID)
azureClient.SubnetsClient.Authorizer = servicePrincipalToken azureClient.SubnetsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
azureClient.SubnetsClient.RequestInspector = withInspection(maxlen) azureClient.SubnetsClient.RequestInspector = withInspection(maxlen)
azureClient.SubnetsClient.ResponseInspector = byInspecting(maxlen) azureClient.SubnetsClient.ResponseInspector = byInspecting(maxlen)
azureClient.SubnetsClient.UserAgent += packerUserAgent azureClient.SubnetsClient.UserAgent += packerUserAgent
azureClient.VirtualNetworksClient = network.NewVirtualNetworksClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID) azureClient.VirtualNetworksClient = network.NewVirtualNetworksClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID)
azureClient.VirtualNetworksClient.Authorizer = servicePrincipalToken azureClient.VirtualNetworksClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
azureClient.VirtualNetworksClient.RequestInspector = withInspection(maxlen) azureClient.VirtualNetworksClient.RequestInspector = withInspection(maxlen)
azureClient.VirtualNetworksClient.ResponseInspector = byInspecting(maxlen) azureClient.VirtualNetworksClient.ResponseInspector = byInspecting(maxlen)
azureClient.VirtualNetworksClient.UserAgent += packerUserAgent azureClient.VirtualNetworksClient.UserAgent += packerUserAgent
azureClient.PublicIPAddressesClient = network.NewPublicIPAddressesClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID) azureClient.PublicIPAddressesClient = network.NewPublicIPAddressesClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID)
azureClient.PublicIPAddressesClient.Authorizer = servicePrincipalToken azureClient.PublicIPAddressesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
azureClient.PublicIPAddressesClient.RequestInspector = withInspection(maxlen) azureClient.PublicIPAddressesClient.RequestInspector = withInspection(maxlen)
azureClient.PublicIPAddressesClient.ResponseInspector = byInspecting(maxlen) azureClient.PublicIPAddressesClient.ResponseInspector = byInspecting(maxlen)
azureClient.PublicIPAddressesClient.UserAgent += packerUserAgent azureClient.PublicIPAddressesClient.UserAgent += packerUserAgent
azureClient.VirtualMachinesClient = compute.NewVirtualMachinesClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID) azureClient.VirtualMachinesClient = compute.NewVirtualMachinesClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID)
azureClient.VirtualMachinesClient.Authorizer = servicePrincipalToken azureClient.VirtualMachinesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
azureClient.VirtualMachinesClient.RequestInspector = withInspection(maxlen) azureClient.VirtualMachinesClient.RequestInspector = withInspection(maxlen)
azureClient.VirtualMachinesClient.ResponseInspector = byConcatDecorators(byInspecting(maxlen), templateCapture(azureClient)) azureClient.VirtualMachinesClient.ResponseInspector = byConcatDecorators(byInspecting(maxlen), templateCapture(azureClient))
azureClient.VirtualMachinesClient.UserAgent += packerUserAgent azureClient.VirtualMachinesClient.UserAgent += packerUserAgent
azureClient.AccountsClient = armStorage.NewAccountsClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID) azureClient.AccountsClient = armStorage.NewAccountsClientWithBaseURI(cloud.ResourceManagerEndpoint, subscriptionID)
azureClient.AccountsClient.Authorizer = servicePrincipalToken azureClient.AccountsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken)
azureClient.AccountsClient.RequestInspector = withInspection(maxlen) azureClient.AccountsClient.RequestInspector = withInspection(maxlen)
azureClient.AccountsClient.ResponseInspector = byInspecting(maxlen) azureClient.AccountsClient.ResponseInspector = byInspecting(maxlen)
azureClient.AccountsClient.UserAgent += packerUserAgent azureClient.AccountsClient.UserAgent += packerUserAgent
@ -167,7 +168,7 @@ func NewAzureClient(subscriptionID, resourceGroupName, storageAccountName string
} }
azureClient.VaultClient = common.NewVaultClient(*keyVaultURL) azureClient.VaultClient = common.NewVaultClient(*keyVaultURL)
azureClient.VaultClient.Authorizer = servicePrincipalTokenVault azureClient.VaultClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalTokenVault)
azureClient.VaultClient.RequestInspector = withInspection(maxlen) azureClient.VaultClient.RequestInspector = withInspection(maxlen)
azureClient.VaultClient.ResponseInspector = byInspecting(maxlen) azureClient.VaultClient.ResponseInspector = byInspecting(maxlen)
azureClient.VaultClient.UserAgent += packerUserAgent azureClient.VaultClient.UserAgent += packerUserAgent

View File

@ -12,8 +12,6 @@ import (
packerAzureCommon "github.com/hashicorp/packer/builder/azure/common" packerAzureCommon "github.com/hashicorp/packer/builder/azure/common"
"github.com/Azure/go-autorest/autorest/azure"
"github.com/hashicorp/packer/builder/azure/common/constants" "github.com/hashicorp/packer/builder/azure/common/constants"
"github.com/hashicorp/packer/builder/azure/common/lin" "github.com/hashicorp/packer/builder/azure/common/lin"
@ -21,6 +19,7 @@ import (
"github.com/hashicorp/packer/helper/communicator" "github.com/hashicorp/packer/helper/communicator"
"github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/packer"
"github.com/mitchellh/multistep" "github.com/mitchellh/multistep"
"github.com/Azure/go-autorest/autorest/adal"
) )
type Builder struct { type Builder struct {
@ -179,7 +178,8 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
template.(*CaptureTemplate), template.(*CaptureTemplate),
func(name string) string { func(name string) string {
month := time.Now().AddDate(0, 1, 0).UTC() month := time.Now().AddDate(0, 1, 0).UTC()
sasUrl, _ := azureClient.BlobStorageClient.GetBlobSASURI(DefaultSasBlobContainer, name, month, DefaultSasBlobPermission) blob := azureClient.BlobStorageClient.GetContainerReference(DefaultSasBlobContainer).GetBlobReference(name)
sasUrl, _ := blob.GetSASURI(month, DefaultSasBlobPermission)
return sasUrl return sasUrl
}) })
} }
@ -204,7 +204,7 @@ func (b *Builder) getBlobEndpoint(client *AzureClient, resourceGroupName string,
return "", err return "", err
} }
return *account.Properties.PrimaryEndpoints.Blob, nil return *account.AccountProperties.PrimaryEndpoints.Blob, nil
} }
func (b *Builder) configureStateBag(stateBag multistep.StateBag) { func (b *Builder) configureStateBag(stateBag multistep.StateBag) {
@ -226,9 +226,9 @@ func (b *Builder) setTemplateParameters(stateBag multistep.StateBag) {
stateBag.Put(constants.ArmVirtualMachineCaptureParameters, b.config.toVirtualMachineCaptureParameters()) stateBag.Put(constants.ArmVirtualMachineCaptureParameters, b.config.toVirtualMachineCaptureParameters())
} }
func (b *Builder) getServicePrincipalTokens(say func(string)) (*azure.ServicePrincipalToken, *azure.ServicePrincipalToken, error) { func (b *Builder) getServicePrincipalTokens(say func(string)) (*adal.ServicePrincipalToken, *adal.ServicePrincipalToken, error) {
var servicePrincipalToken *azure.ServicePrincipalToken var servicePrincipalToken *adal.ServicePrincipalToken
var servicePrincipalTokenVault *azure.ServicePrincipalToken var servicePrincipalTokenVault *adal.ServicePrincipalToken
var err error var err error

View File

@ -39,7 +39,9 @@ func (s *StepCaptureImage) captureImage(resourceGroupName string, computeName st
return err return err
} }
_, err = s.client.Capture(resourceGroupName, computeName, *parameters, cancelCh) _, errChan := s.client.Capture(resourceGroupName, computeName, *parameters, cancelCh)
err = <-errChan
if err != nil { if err != nil {
return err return err
} }

View File

@ -31,7 +31,7 @@ func NewStepCreateResourceGroup(client *AzureClient, ui packer.Ui) *StepCreateRe
} }
func (s *StepCreateResourceGroup) createResourceGroup(resourceGroupName string, location string, tags *map[string]*string) error { func (s *StepCreateResourceGroup) createResourceGroup(resourceGroupName string, location string, tags *map[string]*string) error {
_, err := s.client.GroupsClient.CreateOrUpdate(resourceGroupName, resources.ResourceGroup{ _, err := s.client.GroupsClient.CreateOrUpdate(resourceGroupName, resources.Group{
Location: &location, Location: &location,
Tags: tags, Tags: tags,
}) })

View File

@ -33,7 +33,8 @@ func NewStepDeleteOSDisk(client *AzureClient, ui packer.Ui) *StepDeleteOSDisk {
} }
func (s *StepDeleteOSDisk) deleteBlob(storageContainerName string, blobName string) error { func (s *StepDeleteOSDisk) deleteBlob(storageContainerName string, blobName string) error {
return s.client.BlobStorageClient.DeleteBlob(storageContainerName, blobName, nil) blob := s.client.BlobStorageClient.GetContainerReference(storageContainerName).GetBlobReference(blobName)
return blob.Delete(nil)
} }
func (s *StepDeleteOSDisk) Run(state multistep.StateBag) multistep.StepAction { func (s *StepDeleteOSDisk) Run(state multistep.StateBag) multistep.StepAction {

View File

@ -31,8 +31,9 @@ func NewStepDeleteResourceGroup(client *AzureClient, ui packer.Ui) *StepDeleteRe
} }
func (s *StepDeleteResourceGroup) deleteResourceGroup(resourceGroupName string, cancelCh <-chan struct{}) error { func (s *StepDeleteResourceGroup) deleteResourceGroup(resourceGroupName string, cancelCh <-chan struct{}) error {
_, err := s.client.GroupsClient.Delete(resourceGroupName, cancelCh) _, errChan := s.client.GroupsClient.Delete(resourceGroupName, cancelCh)
err := <-errChan
return err return err
} }

View File

@ -40,7 +40,9 @@ func (s *StepDeployTemplate) deployTemplate(resourceGroupName string, deployment
return err return err
} }
_, err = s.client.DeploymentsClient.CreateOrUpdate(resourceGroupName, deploymentName, *deployment, cancelCh) _, errChan := s.client.DeploymentsClient.CreateOrUpdate(resourceGroupName, deploymentName, *deployment, cancelCh)
err = <-errChan
return err return err
} }

View File

@ -57,7 +57,7 @@ func (s *StepGetIPAddress) getPrivateIP(resourceGroupName string, ipAddressName
return "", err return "", err
} }
return *(*resp.Properties.IPConfigurations)[0].Properties.PrivateIPAddress, nil return *(*resp.IPConfigurations)[0].PrivateIPAddress, nil
} }
func (s *StepGetIPAddress) getPublicIP(resourceGroupName string, ipAddressName string, interfaceName string) (string, error) { func (s *StepGetIPAddress) getPublicIP(resourceGroupName string, ipAddressName string, interfaceName string) (string, error) {
@ -66,7 +66,7 @@ func (s *StepGetIPAddress) getPublicIP(resourceGroupName string, ipAddressName s
return "", err return "", err
} }
return *resp.Properties.IPAddress, nil return *resp.IPAddress, nil
} }
func (s *StepGetIPAddress) Run(state multistep.StateBag) multistep.StepAction { func (s *StepGetIPAddress) Run(state multistep.StateBag) multistep.StepAction {

View File

@ -53,8 +53,8 @@ func (s *StepGetOSDisk) Run(state multistep.StateBag) multistep.StepAction {
return multistep.ActionHalt return multistep.ActionHalt
} }
s.say(fmt.Sprintf(" -> OS Disk : '%s'", *vm.Properties.StorageProfile.OsDisk.Vhd.URI)) s.say(fmt.Sprintf(" -> OS Disk : '%s'", *vm.StorageProfile.OsDisk.Vhd.URI))
state.Put(constants.ArmOSDiskVhd, *vm.Properties.StorageProfile.OsDisk.Vhd.URI) state.Put(constants.ArmOSDiskVhd, *vm.StorageProfile.OsDisk.Vhd.URI)
return multistep.ActionContinue return multistep.ActionContinue
} }

View File

@ -110,7 +110,7 @@ func createTestStateBagStepGetOSDisk() multistep.StateBag {
func createVirtualMachineFromUri(vhdUri string) compute.VirtualMachine { func createVirtualMachineFromUri(vhdUri string) compute.VirtualMachine {
vm := compute.VirtualMachine{ vm := compute.VirtualMachine{
Properties: &compute.VirtualMachineProperties{ VirtualMachineProperties: &compute.VirtualMachineProperties{
StorageProfile: &compute.StorageProfile{ StorageProfile: &compute.StorageProfile{
OsDisk: &compute.OSDisk{ OsDisk: &compute.OSDisk{
Vhd: &compute.VirtualHardDisk{ Vhd: &compute.VirtualHardDisk{

View File

@ -31,7 +31,9 @@ func NewStepPowerOffCompute(client *AzureClient, ui packer.Ui) *StepPowerOffComp
} }
func (s *StepPowerOffCompute) powerOffCompute(resourceGroupName string, computeName string, cancelCh <-chan struct{}) error { func (s *StepPowerOffCompute) powerOffCompute(resourceGroupName string, computeName string, cancelCh <-chan struct{}) error {
_, err := s.client.PowerOff(resourceGroupName, computeName, cancelCh) _, errChan := s.client.PowerOff(resourceGroupName, computeName, cancelCh)
err := <-errChan
if err != nil { if err != nil {
return err return err
} }

View File

@ -13,6 +13,7 @@ import (
"github.com/Azure/go-autorest/autorest/to" "github.com/Azure/go-autorest/autorest/to"
"github.com/hashicorp/packer/version" "github.com/hashicorp/packer/version"
"github.com/mitchellh/go-homedir" "github.com/mitchellh/go-homedir"
"github.com/Azure/go-autorest/autorest/adal"
) )
var ( var (
@ -39,13 +40,13 @@ var (
// Authenticate fetches a token from the local file cache or initiates a consent // Authenticate fetches a token from the local file cache or initiates a consent
// flow and waits for token to be obtained. // flow and waits for token to be obtained.
func Authenticate(env azure.Environment, tenantID string, say func(string)) (*azure.ServicePrincipalToken, error) { func Authenticate(env azure.Environment, tenantID string, say func(string)) (*adal.ServicePrincipalToken, error) {
clientID, ok := clientIDs[env.Name] clientID, ok := clientIDs[env.Name]
if !ok { if !ok {
return nil, fmt.Errorf("packer-azure application not set up for Azure environment %q", env.Name) return nil, fmt.Errorf("packer-azure application not set up for Azure environment %q", env.Name)
} }
oauthCfg, err := env.OAuthConfigForTenant(tenantID) oauthCfg, err := adal.NewOAuthConfig(env.ActiveDirectoryEndpoint, tenantID)
if err != nil { if err != nil {
return nil, fmt.Errorf("Failed to obtain oauth config for azure environment: %v", err) return nil, fmt.Errorf("Failed to obtain oauth config for azure environment: %v", err)
} }
@ -56,7 +57,7 @@ func Authenticate(env azure.Environment, tenantID string, say func(string)) (*az
tokenPath := tokenCachePath(tenantID) tokenPath := tokenCachePath(tenantID)
saveToken := mkTokenCallback(tokenPath) saveToken := mkTokenCallback(tokenPath)
saveTokenCallback := func(t azure.Token) error { saveTokenCallback := func(t adal.Token) error {
say("Azure token expired. Saving the refreshed token...") say("Azure token expired. Saving the refreshed token...")
return saveToken(t) return saveToken(t)
} }
@ -110,8 +111,8 @@ func Authenticate(env azure.Environment, tenantID string, say func(string)) (*az
// tokenFromFile returns a token from the specified file if it is found, otherwise // tokenFromFile returns a token from the specified file if it is found, otherwise
// returns nil. Any error retrieving or creating the token is returned as an error. // returns nil. Any error retrieving or creating the token is returned as an error.
func tokenFromFile(say func(string), oauthCfg azure.OAuthConfig, tokenPath, clientID, resource string, func tokenFromFile(say func(string), oauthCfg adal.OAuthConfig, tokenPath, clientID, resource string,
callback azure.TokenRefreshCallback) (*azure.ServicePrincipalToken, error) { callback adal.TokenRefreshCallback) (*adal.ServicePrincipalToken, error) {
say(fmt.Sprintf("Loading auth token from file: %s", tokenPath)) say(fmt.Sprintf("Loading auth token from file: %s", tokenPath))
if _, err := os.Stat(tokenPath); err != nil { if _, err := os.Stat(tokenPath); err != nil {
if os.IsNotExist(err) { // file not found if os.IsNotExist(err) { // file not found
@ -120,12 +121,12 @@ func tokenFromFile(say func(string), oauthCfg azure.OAuthConfig, tokenPath, clie
return nil, err return nil, err
} }
token, err := azure.LoadToken(tokenPath) token, err := adal.LoadToken(tokenPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("Failed to load token from file: %v", err) return nil, fmt.Errorf("Failed to load token from file: %v", err)
} }
spt, err := azure.NewServicePrincipalTokenFromManualToken(oauthCfg, clientID, resource, *token, callback) spt, err := adal.NewServicePrincipalTokenFromManualToken(oauthCfg, clientID, resource, *token, callback)
if err != nil { if err != nil {
return nil, fmt.Errorf("Error constructing service principal token: %v", err) return nil, fmt.Errorf("Error constructing service principal token: %v", err)
} }
@ -136,9 +137,9 @@ func tokenFromFile(say func(string), oauthCfg azure.OAuthConfig, tokenPath, clie
// consent application on a browser and in the meanwhile the authentication // consent application on a browser and in the meanwhile the authentication
// endpoint is polled until user gives consent, denies or the flow times out. // endpoint is polled until user gives consent, denies or the flow times out.
// Returned token must be saved. // Returned token must be saved.
func tokenFromDeviceFlow(say func(string), oauthCfg azure.OAuthConfig, clientID, resource string) (*azure.ServicePrincipalToken, error) { func tokenFromDeviceFlow(say func(string), oauthCfg adal.OAuthConfig, clientID, resource string) (*adal.ServicePrincipalToken, error) {
cl := autorest.NewClientWithUserAgent(userAgent) cl := autorest.NewClientWithUserAgent(userAgent)
deviceCode, err := azure.InitiateDeviceAuth(&cl, oauthCfg, clientID, resource) deviceCode, err := adal.InitiateDeviceAuth(&cl, oauthCfg, clientID, resource)
if err != nil { if err != nil {
return nil, fmt.Errorf("Failed to start device auth: %v", err) return nil, fmt.Errorf("Failed to start device auth: %v", err)
} }
@ -147,12 +148,12 @@ func tokenFromDeviceFlow(say func(string), oauthCfg azure.OAuthConfig, clientID,
// the code 0000000 to authenticate.” // the code 0000000 to authenticate.”
say(fmt.Sprintf("Microsoft Azure: %s", to.String(deviceCode.Message))) say(fmt.Sprintf("Microsoft Azure: %s", to.String(deviceCode.Message)))
token, err := azure.WaitForUserCompletion(&cl, deviceCode) token, err := adal.WaitForUserCompletion(&cl, deviceCode)
if err != nil { if err != nil {
return nil, fmt.Errorf("Failed to complete device auth: %v", err) return nil, fmt.Errorf("Failed to complete device auth: %v", err)
} }
spt, err := azure.NewServicePrincipalTokenFromManualToken(oauthCfg, clientID, resource, *token) spt, err := adal.NewServicePrincipalTokenFromManualToken(oauthCfg, clientID, resource, *token)
if err != nil { if err != nil {
return nil, fmt.Errorf("Error constructing service principal token: %v", err) return nil, fmt.Errorf("Error constructing service principal token: %v", err)
} }
@ -173,9 +174,9 @@ func tokenCachePath(tenantID string) string {
// mkTokenCallback returns a callback function that can be used to save the // mkTokenCallback returns a callback function that can be used to save the
// token initially or register to the Azure SDK to be called when the token is // token initially or register to the Azure SDK to be called when the token is
// refreshed. // refreshed.
func mkTokenCallback(path string) azure.TokenRefreshCallback { func mkTokenCallback(path string) adal.TokenRefreshCallback {
return func(t azure.Token) error { return func(t adal.Token) error {
if err := azure.SaveToken(path, 0600, t); err != nil { if err := adal.SaveToken(path, 0600, t); err != nil {
return err return err
} }
return nil return nil
@ -186,9 +187,9 @@ func mkTokenCallback(path string) azure.TokenRefreshCallback {
// sure if the access_token valid, if not it uses SDKs functionality to // sure if the access_token valid, if not it uses SDKs functionality to
// automatically refresh the token using refresh_token (which might have // automatically refresh the token using refresh_token (which might have
// expired). This check is essentially to make sure refresh_token is good. // expired). This check is essentially to make sure refresh_token is good.
func validateToken(env azure.Environment, token *azure.ServicePrincipalToken) error { func validateToken(env azure.Environment, token *adal.ServicePrincipalToken) error {
c := subscriptionsClient(env.ResourceManagerEndpoint) c := subscriptionsClient(env.ResourceManagerEndpoint)
c.Authorizer = token c.Authorizer = autorest.NewBearerAuthorizer(token)
_, err := c.List() _, err := c.List()
if err != nil { if err != nil {
return fmt.Errorf("Token validity check failed: %v", err) return fmt.Errorf("Token validity check failed: %v", err)
@ -230,7 +231,7 @@ func FindTenantID(env azure.Environment, subscriptionID string) (string, error)
return m[1], nil return m[1], nil
} }
func subscriptionsClient(baseURI string) subscriptions.Client { func subscriptionsClient(baseURI string) subscriptions.GroupClient {
client := subscriptions.NewClientWithBaseURI(baseURI) client := subscriptions.NewGroupClientWithBaseURI(baseURI)
return client return client
} }

View File

@ -169,7 +169,7 @@ func (s *TemplateBuilder) SetVirtualNetwork(virtualNetworkResourceGroup, virtual
strings.Contains(s, "Microsoft.Network/publicIPAddresses") strings.Contains(s, "Microsoft.Network/publicIPAddresses")
}) })
(*resource.Properties.IPConfigurations)[0].Properties.PublicIPAddress = nil (*resource.Properties.IPConfigurations)[0].PublicIPAddress = nil
return nil return nil
} }