From c938de68f262c057542d44bcb67ef961cefcc60e Mon Sep 17 00:00:00 2001 From: bzub Date: Tue, 8 Jan 2019 07:39:12 -0600 Subject: [PATCH] Use GCE_PROJECT for project always, if specified (#750) --- providers/dns/gcloud/googlecloud.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/providers/dns/gcloud/googlecloud.go b/providers/dns/gcloud/googlecloud.go index 9d0651740b..c0d1d91804 100644 --- a/providers/dns/gcloud/googlecloud.go +++ b/providers/dns/gcloud/googlecloud.go @@ -55,10 +55,12 @@ type DNSProvider struct { // Project name must be passed in the environment variable: GCE_PROJECT. // A Service Account file can be passed in the environment variable: GCE_SERVICE_ACCOUNT_FILE func NewDNSProvider() (*DNSProvider, error) { + // Use a service account file if specified via environment variable. if saFile, ok := os.LookupEnv("GCE_SERVICE_ACCOUNT_FILE"); ok { return NewDNSProviderServiceAccount(saFile) } + // Use default credentials. project := os.Getenv("GCE_PROJECT") return NewDNSProviderCredentials(project) } @@ -94,15 +96,20 @@ func NewDNSProviderServiceAccount(saFile string) (*DNSProvider, error) { return nil, fmt.Errorf("googlecloud: unable to read Service Account file: %v", err) } - // read project id from service account file - var datJSON struct { - ProjectID string `json:"project_id"` - } - err = json.Unmarshal(dat, &datJSON) - if err != nil || datJSON.ProjectID == "" { - return nil, fmt.Errorf("googlecloud: project ID not found in Google Cloud Service Account file") + // If GCE_PROJECT is non-empty it overrides the project in the service + // account file. + project := os.Getenv("GCE_PROJECT") + if project != "" { + // read project id from service account file + var datJSON struct { + ProjectID string `json:"project_id"` + } + err = json.Unmarshal(dat, &datJSON) + if err != nil || datJSON.ProjectID == "" { + return nil, fmt.Errorf("googlecloud: project ID not found in Google Cloud Service Account file") + } + project = datJSON.ProjectID } - project := datJSON.ProjectID conf, err := google.JWTConfigFromJSON(dat, dns.NdevClouddnsReadwriteScope) if err != nil {