From 91cb3e283348a16cd2a1199ab45288fa27c723fe Mon Sep 17 00:00:00 2001 From: Paul Stack Date: Tue, 1 Nov 2016 10:15:37 +0000 Subject: [PATCH] provider/azurerm: Bump jen20/riviera SDK (#9765) Fixes #9400 --- .../github.com/jen20/riviera/azure/client.go | 7 ++- .../jen20/riviera/azure/endpoints.go | 43 ++++++++++++++++ .../jen20/riviera/azure/locations.go | 51 +++++++++++-------- .../github.com/jen20/riviera/azure/request.go | 10 ++-- .../github.com/jen20/riviera/azure/token.go | 15 +++--- .../jen20/riviera/sql/get_database.go | 42 +++++++-------- vendor/vendor.json | 24 ++++----- 7 files changed, 122 insertions(+), 70 deletions(-) create mode 100644 vendor/github.com/jen20/riviera/azure/endpoints.go diff --git a/vendor/github.com/jen20/riviera/azure/client.go b/vendor/github.com/jen20/riviera/azure/client.go index 937760dc2..f7d2c885a 100644 --- a/vendor/github.com/jen20/riviera/azure/client.go +++ b/vendor/github.com/jen20/riviera/azure/client.go @@ -4,14 +4,14 @@ import ( "io/ioutil" "log" - "github.com/hashicorp/go-retryablehttp" "net/http" + + "github.com/hashicorp/go-retryablehttp" ) type Client struct { logger *log.Logger - BaseURL string subscriptionID string tokenRequester *tokenRequester @@ -27,7 +27,6 @@ func NewClient(creds *AzureResourceManagerCredentials) (*Client, error) { tr := newTokenRequester(httpClient, creds.ClientID, creds.ClientSecret, creds.TenantID) return &Client{ - BaseURL: "https://management.azure.com", subscriptionID: creds.SubscriptionID, httpClient: httpClient, tokenRequester: tr, @@ -35,7 +34,7 @@ func NewClient(creds *AzureResourceManagerCredentials) (*Client, error) { }, nil } -func (c *Client) SetRequestLoggingHook(hook func (*log.Logger, *http.Request, int)) { +func (c *Client) SetRequestLoggingHook(hook func(*log.Logger, *http.Request, int)) { c.httpClient.RequestLogHook = hook } diff --git a/vendor/github.com/jen20/riviera/azure/endpoints.go b/vendor/github.com/jen20/riviera/azure/endpoints.go new file mode 100644 index 000000000..e88eb66c3 --- /dev/null +++ b/vendor/github.com/jen20/riviera/azure/endpoints.go @@ -0,0 +1,43 @@ +package azure + +import ( + "reflect" + "strings" +) + +type Endpoints struct { + resourceManagerEndpointUrl string + activeDirectoryEndpointUrl string +} + +var ( + ChineseEndpoints = Endpoints{"https://management.chinacloudapi.cn", "https://login.chinacloudapi.cn"} + DefaultEndpoints = Endpoints{"https://management.azure.com", "https://login.microsoftonline.com"} + GermanEndpoints = Endpoints{"https://management.microsoftazure.de", "https://login.microsoftonline.de"} + USGovEndpoints = Endpoints{"https://management.usgovcloudapi.net", "https://login.microsoftonline.com"} +) + +func GetEndpointsForLocation(location string) Endpoints { + location = strings.Replace(strings.ToLower(location), " ", "", -1) + + switch location { + case GermanyCentral, GermanyEast: + return GermanEndpoints + case ChinaEast, ChinaNorth: + return ChineseEndpoints + case USGovIowa, USGovVirginia: + return USGovEndpoints + default: + return DefaultEndpoints + } +} + +func GetEndpointsForCommand(command APICall) Endpoints { + locationField := reflect.Indirect(reflect.ValueOf(command)).FieldByName("Location") + if locationField.IsValid() { + location := locationField.Interface().(string) + return GetEndpointsForLocation(location) + } + + return DefaultEndpoints +} diff --git a/vendor/github.com/jen20/riviera/azure/locations.go b/vendor/github.com/jen20/riviera/azure/locations.go index fb72bb357..c52c7c1bd 100644 --- a/vendor/github.com/jen20/riviera/azure/locations.go +++ b/vendor/github.com/jen20/riviera/azure/locations.go @@ -1,26 +1,33 @@ package azure const ( - Global = "global" - CentralUS = "centralus" - EastUS = "eastus" - EastUS2 = "eastus2" - USGovIowa = "usgoviowa" - USGovVirginia = "usgovvirginia" - NorthCentralUS = "northcentralus" - SouthCentralUS = "southcentralus" - WestUS = "westus" - NorthEurope = "northeurope" - WestEurope = "westeurope" - EastAsia = "eastasia" - SoutheastAsia = "southeastasia" - JapanEast = "japaneast" - JapanWest = "japanwest" - BrazilSouth = "brazilsouth" - AustraliaEast = "australiaeast" - Australia = "australia" - CentralIndia = "centralindia" - SouthIndia = "southindia" - WestIndia = "westindia" - ChinaEast = "chinaeast" + Global = "global" + CentralUS = "centralus" + EastUS = "eastus" + EastUS2 = "eastus2" + USGovIowa = "usgoviowa" + USGovVirginia = "usgovvirginia" + NorthCentralUS = "northcentralus" + SouthCentralUS = "southcentralus" + WestUS = "westus" + NorthEurope = "northeurope" + WestEurope = "westeurope" + EastAsia = "eastasia" + SoutheastAsia = "southeastasia" + JapanEast = "japaneast" + JapanWest = "japanwest" + BrazilSouth = "brazilsouth" + AustraliaEast = "australiaeast" + AustraliaSouthEast = "australiasoutheast" + CentralIndia = "centralindia" + SouthIndia = "southindia" + WestIndia = "westindia" + ChinaEast = "chinaeast" + ChinaNorth = "chinanorth" + UKSouth = "uksouth" + UKWest = "ukwest" + CanadaCentral = "canadacentral" + CanadaEast = "canadaeast" + GermanyCentral = "germanycentral" + GermanyEast = "germanyeast" ) diff --git a/vendor/github.com/jen20/riviera/azure/request.go b/vendor/github.com/jen20/riviera/azure/request.go index a7546a751..0bf412477 100644 --- a/vendor/github.com/jen20/riviera/azure/request.go +++ b/vendor/github.com/jen20/riviera/azure/request.go @@ -75,7 +75,8 @@ func (request *Request) pollForAsynchronousResponse(acceptedResponse *http.Respo return nil, err } - err = request.client.tokenRequester.addAuthorizationToRequest(req) + endpoints := GetEndpointsForCommand(request.Command) + err = request.client.tokenRequester.addAuthorizationToRequest(req, endpoints) if err != nil { return nil, err } @@ -115,10 +116,11 @@ func defaultARMRequestSerialize(body interface{}) (io.ReadSeeker, error) { func (request *Request) Execute() (*Response, error) { apiInfo := request.Command.APIInfo() + endpoints := GetEndpointsForCommand(request.Command) + var urlString string - // Base URL should already be validated by now so Parse is safe without error handling - urlObj, _ := url.Parse(request.client.BaseURL) + urlObj, _ := url.Parse(endpoints.resourceManagerEndpointUrl) // Determine whether to use the URLPathFunc or the URI explicitly set in the request if request.URI == nil { @@ -164,7 +166,7 @@ func (request *Request) Execute() (*Response, error) { req.Header.Add("Content-Type", "application/json") } - err = request.client.tokenRequester.addAuthorizationToRequest(req) + err = request.client.tokenRequester.addAuthorizationToRequest(req, endpoints) if err != nil { return nil, err } diff --git a/vendor/github.com/jen20/riviera/azure/token.go b/vendor/github.com/jen20/riviera/azure/token.go index cf99c17ab..e608fc1c5 100644 --- a/vendor/github.com/jen20/riviera/azure/token.go +++ b/vendor/github.com/jen20/riviera/azure/token.go @@ -5,6 +5,7 @@ import ( "fmt" "net/url" "strconv" + "strings" "sync" "time" @@ -43,8 +44,8 @@ func newTokenRequester(client *retryablehttp.Client, clientID, clientSecret, ten // addAuthorizationToRequest adds an Authorization header to an http.Request, having ensured // that the token is sufficiently fresh. This may invoke network calls, so should not be // relied on to return quickly. -func (tr *tokenRequester) addAuthorizationToRequest(request *retryablehttp.Request) error { - token, err := tr.getUsableToken() +func (tr *tokenRequester) addAuthorizationToRequest(request *retryablehttp.Request, endpoints Endpoints) error { + token, err := tr.getUsableToken(endpoints) if err != nil { return fmt.Errorf("Error obtaining authorization token: %s", err) } @@ -53,7 +54,7 @@ func (tr *tokenRequester) addAuthorizationToRequest(request *retryablehttp.Reque return nil } -func (tr *tokenRequester) getUsableToken() (*token, error) { +func (tr *tokenRequester) getUsableToken(endpoints Endpoints) (*token, error) { tr.l.Lock() defer tr.l.Unlock() @@ -61,7 +62,7 @@ func (tr *tokenRequester) getUsableToken() (*token, error) { return tr.currentToken, nil } - newToken, err := tr.refreshToken() + newToken, err := tr.refreshToken(endpoints) if err != nil { return nil, fmt.Errorf("Error refreshing token: %s", err) } @@ -70,14 +71,14 @@ func (tr *tokenRequester) getUsableToken() (*token, error) { return newToken, nil } -func (tr *tokenRequester) refreshToken() (*token, error) { - oauthURL := fmt.Sprintf("https://login.microsoftonline.com/%s/oauth2/%s?api-version=1.0", tr.tenantID, "token") +func (tr *tokenRequester) refreshToken(endpoints Endpoints) (*token, error) { + oauthURL := fmt.Sprintf("%s/%s/oauth2/%s?api-version=1.0", endpoints.activeDirectoryEndpointUrl, tr.tenantID, "token") v := url.Values{} v.Set("client_id", tr.clientID) v.Set("client_secret", tr.clientSecret) v.Set("grant_type", "client_credentials") - v.Set("resource", "https://management.azure.com/") + v.Set("resource", strings.TrimSuffix(endpoints.resourceManagerEndpointUrl, "/")+"/") var newToken token response, err := tr.httpClient.PostForm(oauthURL, v) diff --git a/vendor/github.com/jen20/riviera/sql/get_database.go b/vendor/github.com/jen20/riviera/sql/get_database.go index ed6a72aea..d8bbdd42e 100644 --- a/vendor/github.com/jen20/riviera/sql/get_database.go +++ b/vendor/github.com/jen20/riviera/sql/get_database.go @@ -3,27 +3,27 @@ package sql import "github.com/jen20/riviera/azure" type GetDatabaseResponse struct { - ID *string `mapstructure:"id"` - Name *string `mapstructure:"name"` - Location *string `mapstructure:"location"` - Tags *map[string]string `mapstructure:"tags"` - Kind *string `mapstructure:"kind"` - DatabaseID *string `mapstructure:"databaseId"` - DatabaseName *string `mapstructure:"databaseName"` - Status *string `mapstructure:"status"` - Collation *string `mapstructure:"collation"` - Edition *string `mapstructure:"edition"` - ServiceLevelObjective *string `mapstructure:"serviceLevelObjective"` - MaxSizeInBytes *string `mapstructure:"maxSizeInBytes"` - CreationDate *string `mapstructure:"creationDate"` - CurrentServiceLevelObjectiveID *string `mapstructure:"currentServiceLevelObjectiveId"` - RequestedServiceObjectiveID *string `mapstructure:"requestedServiceObjectiveId"` - RequestedServiceObjectiveName *string `mapstructure:"requestedServiceObjectiveName"` - DefaultSecondaryLocation *string `mapstructure:"defaultSecondaryLocation"` - Encryption *string `mapstructure:"encryption"` - EarliestRestoreDate *string `mapstructure:"earliestRestoreDate"` - ElasticPoolName *string `mapstructure:"elasticPoolName"` - ContainmentState *string `mapstructure:"containmentState"` + ID *string `mapstructure:"id"` + Name *string `mapstructure:"name"` + Location *string `mapstructure:"location"` + Tags *map[string]*string `mapstructure:"tags"` + Kind *string `mapstructure:"kind"` + DatabaseID *string `mapstructure:"databaseId"` + DatabaseName *string `mapstructure:"databaseName"` + Status *string `mapstructure:"status"` + Collation *string `mapstructure:"collation"` + Edition *string `mapstructure:"edition"` + ServiceLevelObjective *string `mapstructure:"serviceLevelObjective"` + MaxSizeInBytes *string `mapstructure:"maxSizeInBytes"` + CreationDate *string `mapstructure:"creationDate"` + CurrentServiceLevelObjectiveID *string `mapstructure:"currentServiceLevelObjectiveId"` + RequestedServiceObjectiveID *string `mapstructure:"requestedServiceObjectiveId"` + RequestedServiceObjectiveName *string `mapstructure:"requestedServiceObjectiveName"` + DefaultSecondaryLocation *string `mapstructure:"defaultSecondaryLocation"` + Encryption *string `mapstructure:"encryption"` + EarliestRestoreDate *string `mapstructure:"earliestRestoreDate"` + ElasticPoolName *string `mapstructure:"elasticPoolName"` + ContainmentState *string `mapstructure:"containmentState"` } type GetDatabase struct { diff --git a/vendor/vendor.json b/vendor/vendor.json index cd6674c05..43db85910 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1451,34 +1451,34 @@ "revisionTime": "2016-09-29T21:48:42Z" }, { - "checksumSHA1": "oPpOfZn11Ef6DWOoETxSW9Venzs=", + "checksumSHA1": "tRK0n/cIjBCYjnumPiP9cCS2CnA=", "path": "github.com/jen20/riviera/azure", - "revision": "1159d86fc8144abafeb29ee7c5a3e2e85af336ba", - "revisionTime": "2016-06-30T14:11:29Z" + "revision": "04d3aa8ac7df6c05dbfeaf5344f754f31a7e711f", + "revisionTime": "2016-11-01T10:00:17Z" }, { "checksumSHA1": "ncdT+1PFEF5ly0niXuQc9/pKzT0=", "path": "github.com/jen20/riviera/dns", - "revision": "1159d86fc8144abafeb29ee7c5a3e2e85af336ba", - "revisionTime": "2016-06-30T14:11:29Z" + "revision": "04d3aa8ac7df6c05dbfeaf5344f754f31a7e711f", + "revisionTime": "2016-11-01T10:00:17Z" }, { "checksumSHA1": "zVXx6ha3bt0N4ukRbRHXjSl91S4=", "path": "github.com/jen20/riviera/search", - "revision": "1159d86fc8144abafeb29ee7c5a3e2e85af336ba", - "revisionTime": "2016-06-30T14:11:29Z" + "revision": "04d3aa8ac7df6c05dbfeaf5344f754f31a7e711f", + "revisionTime": "2016-11-01T10:00:17Z" }, { - "checksumSHA1": "KfquDaeBPGchw92QnojlJFsJKgk=", + "checksumSHA1": "mD+brnqSfkLheYdGzTUqUi6VWgw=", "path": "github.com/jen20/riviera/sql", - "revision": "1159d86fc8144abafeb29ee7c5a3e2e85af336ba", - "revisionTime": "2016-06-30T14:11:29Z" + "revision": "04d3aa8ac7df6c05dbfeaf5344f754f31a7e711f", + "revisionTime": "2016-11-01T10:00:17Z" }, { "checksumSHA1": "nKUCquNpJ9ifHgkXoT4K3Xar6R8=", "path": "github.com/jen20/riviera/storage", - "revision": "1159d86fc8144abafeb29ee7c5a3e2e85af336ba", - "revisionTime": "2016-06-30T14:11:29Z" + "revision": "04d3aa8ac7df6c05dbfeaf5344f754f31a7e711f", + "revisionTime": "2016-11-01T10:00:17Z" }, { "comment": "0.2.2-2-gc01cf91",