forked from TrueCloudLab/lego
Fix gcloud naming inconsistency; parse projectID (#425)
This commit fixes the naming inconsistency of Google Cloud DNS being named `googlecloud` in the source and `gcloud` in the user interface. Furthermore, improving my previous commit, I realized that the project ID is stored in the service account file. We can save one environment variable when using service account file (e.g. in automation applications).
This commit is contained in:
parent
e7fd871a9c
commit
0593b64674
3 changed files with 20 additions and 11 deletions
|
@ -20,9 +20,9 @@ import (
|
||||||
"github.com/xenolf/lego/providers/dns/fastdns"
|
"github.com/xenolf/lego/providers/dns/fastdns"
|
||||||
"github.com/xenolf/lego/providers/dns/gandi"
|
"github.com/xenolf/lego/providers/dns/gandi"
|
||||||
"github.com/xenolf/lego/providers/dns/gandiv5"
|
"github.com/xenolf/lego/providers/dns/gandiv5"
|
||||||
|
"github.com/xenolf/lego/providers/dns/gcloud"
|
||||||
"github.com/xenolf/lego/providers/dns/glesys"
|
"github.com/xenolf/lego/providers/dns/glesys"
|
||||||
"github.com/xenolf/lego/providers/dns/godaddy"
|
"github.com/xenolf/lego/providers/dns/godaddy"
|
||||||
"github.com/xenolf/lego/providers/dns/googlecloud"
|
|
||||||
"github.com/xenolf/lego/providers/dns/lightsail"
|
"github.com/xenolf/lego/providers/dns/lightsail"
|
||||||
"github.com/xenolf/lego/providers/dns/linode"
|
"github.com/xenolf/lego/providers/dns/linode"
|
||||||
"github.com/xenolf/lego/providers/dns/namecheap"
|
"github.com/xenolf/lego/providers/dns/namecheap"
|
||||||
|
@ -75,7 +75,7 @@ func NewDNSChallengeProviderByName(name string) (acme.ChallengeProvider, error)
|
||||||
case "glesys":
|
case "glesys":
|
||||||
provider, err = glesys.NewDNSProvider()
|
provider, err = glesys.NewDNSProvider()
|
||||||
case "gcloud":
|
case "gcloud":
|
||||||
provider, err = googlecloud.NewDNSProvider()
|
provider, err = gcloud.NewDNSProvider()
|
||||||
case "godaddy":
|
case "godaddy":
|
||||||
provider, err = godaddy.NewDNSProvider()
|
provider, err = godaddy.NewDNSProvider()
|
||||||
case "lightsail":
|
case "lightsail":
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
// Package googlecloud implements a DNS provider for solving the DNS-01
|
// Package gcloud implements a DNS provider for solving the DNS-01
|
||||||
// challenge using Google Cloud DNS.
|
// challenge using Google Cloud DNS.
|
||||||
package googlecloud
|
package gcloud
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
@ -27,10 +28,10 @@ type DNSProvider struct {
|
||||||
// A Service Account file can be passed in the environment variable:
|
// A Service Account file can be passed in the environment variable:
|
||||||
// GCE_SERVICE_ACCOUNT_FILE
|
// GCE_SERVICE_ACCOUNT_FILE
|
||||||
func NewDNSProvider() (*DNSProvider, error) {
|
func NewDNSProvider() (*DNSProvider, error) {
|
||||||
project := os.Getenv("GCE_PROJECT")
|
|
||||||
if saFile, ok := os.LookupEnv("GCE_SERVICE_ACCOUNT_FILE"); ok {
|
if saFile, ok := os.LookupEnv("GCE_SERVICE_ACCOUNT_FILE"); ok {
|
||||||
return NewDNSProviderServiceAccount(project, saFile)
|
return NewDNSProviderServiceAccount(saFile)
|
||||||
}
|
}
|
||||||
|
project := os.Getenv("GCE_PROJECT")
|
||||||
return NewDNSProviderCredentials(project)
|
return NewDNSProviderCredentials(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,10 +58,7 @@ func NewDNSProviderCredentials(project string) (*DNSProvider, error) {
|
||||||
|
|
||||||
// NewDNSProviderServiceAccount uses the supplied service account JSON file to
|
// NewDNSProviderServiceAccount uses the supplied service account JSON file to
|
||||||
// return a DNSProvider instance configured for Google Cloud DNS.
|
// return a DNSProvider instance configured for Google Cloud DNS.
|
||||||
func NewDNSProviderServiceAccount(project string, saFile string) (*DNSProvider, error) {
|
func NewDNSProviderServiceAccount(saFile string) (*DNSProvider, error) {
|
||||||
if project == "" {
|
|
||||||
return nil, fmt.Errorf("Google Cloud project name missing")
|
|
||||||
}
|
|
||||||
if saFile == "" {
|
if saFile == "" {
|
||||||
return nil, fmt.Errorf("Google Cloud Service Account file missing")
|
return nil, fmt.Errorf("Google Cloud Service Account file missing")
|
||||||
}
|
}
|
||||||
|
@ -69,6 +67,17 @@ func NewDNSProviderServiceAccount(project string, saFile string) (*DNSProvider,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Unable to read Service Account file: %v", err)
|
return nil, fmt.Errorf("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("Project ID not found in Google Cloud Service Account file")
|
||||||
|
}
|
||||||
|
project := datJSON.ProjectID
|
||||||
|
|
||||||
conf, err := google.JWTConfigFromJSON(dat, dns.NdevClouddnsReadwriteScope)
|
conf, err := google.JWTConfigFromJSON(dat, dns.NdevClouddnsReadwriteScope)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Unable to acquire config: %v", err)
|
return nil, fmt.Errorf("Unable to acquire config: %v", err)
|
|
@ -1,4 +1,4 @@
|
||||||
package googlecloud
|
package gcloud
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
Loading…
Reference in a new issue