diff --git a/powerdns/client.go b/powerdns/client.go index 14d8817..a8f25ce 100644 --- a/powerdns/client.go +++ b/powerdns/client.go @@ -33,10 +33,11 @@ type Client struct { CacheEnable bool // Enable/Disable chache for REST API requests Cache *freecache.Cache CacheTTL int + ZC string } // NewClient returns a new PowerDNS client -func NewClient(serverURL string, apiKey string, configTLS *tls.Config, cacheEnable bool, cacheSizeMB string, cacheTTL int) (*Client, error) { +func NewClient(serverURL string, apiKey string, configTLS *tls.Config, cacheEnable bool, cacheSizeMB string, cacheTTL int, zC string) (*Client, error) { cleanURL, err := sanitizeURL(serverURL) @@ -63,6 +64,7 @@ func NewClient(serverURL string, apiKey string, configTLS *tls.Config, cacheEnab CacheEnable: cacheEnable, Cache: freecache.NewCache(DefaultCacheSize), CacheTTL: cacheTTL, + ZC: zC, } if err := client.setServerVersion(); err != nil { @@ -285,7 +287,7 @@ func (client *Client) detectAPIVersion() (int, error) { // ListZones returns all Zones of server, without records func (client *Client) ListZones() ([]ZoneInfo, error) { - req, err := client.newRequest("GET", "/servers/localhost/zones", nil) + req, err := client.newRequest("GET", fmt.Sprintf("/servers/%s/zones", client.ZC), nil) if err != nil { return nil, err } @@ -308,7 +310,7 @@ func (client *Client) ListZones() ([]ZoneInfo, error) { // GetZone gets a zone func (client *Client) GetZone(name string) (ZoneInfo, error) { - req, err := client.newRequest("GET", fmt.Sprintf("/servers/localhost/zones/%s", name), nil) + req, err := client.newRequest("GET", fmt.Sprintf("/servers/%s/zones/%s", client.ZC, name), nil) if err != nil { return ZoneInfo{}, err } @@ -338,7 +340,7 @@ func (client *Client) GetZone(name string) (ZoneInfo, error) { // ZoneExists checks if requested zone exists func (client *Client) ZoneExists(name string) (bool, error) { - req, err := client.newRequest("GET", fmt.Sprintf("/servers/localhost/zones/%s", name), nil) + req, err := client.newRequest("GET", fmt.Sprintf("/servers/%s/zones/%s", client.ZC, name), nil) if err != nil { return false, err } @@ -367,7 +369,7 @@ func (client *Client) CreateZone(zoneInfo ZoneInfo) (ZoneInfo, error) { return ZoneInfo{}, err } - req, err := client.newRequest("POST", "/servers/localhost/zones", body) + req, err := client.newRequest("POST", fmt.Sprintf("/servers/%s/zones", client.ZC), body) if err != nil { return ZoneInfo{}, err } @@ -402,7 +404,7 @@ func (client *Client) UpdateZone(name string, zoneInfo ZoneInfoUpd) error { return err } - req, err := client.newRequest("PUT", fmt.Sprintf("/servers/localhost/zones/%s", name), body) + req, err := client.newRequest("PUT", fmt.Sprintf("/servers/%s/zones/%s", client.ZC, name), body) if err != nil { return err } @@ -426,7 +428,7 @@ func (client *Client) UpdateZone(name string, zoneInfo ZoneInfoUpd) error { // DeleteZone deletes a zone func (client *Client) DeleteZone(name string) error { - req, err := client.newRequest("DELETE", fmt.Sprintf("/servers/localhost/zones/%s", name), nil) + req, err := client.newRequest("DELETE", fmt.Sprintf("/servers/%s/zones/%s", client.ZC, name), nil) if err != nil { return err } @@ -474,7 +476,7 @@ func (client *Client) ListRecords(zone string) ([]Record, error) { } if zoneInfo == nil { - req, err := client.newRequest("GET", fmt.Sprintf("/servers/localhost/zones/%s", zone), nil) + req, err := client.newRequest("GET", fmt.Sprintf("/servers/%s/zones/%s", client.ZC, zone), nil) if err != nil { return nil, err } @@ -579,7 +581,7 @@ func (client *Client) ReplaceRecordSet(zone string, rrSet ResourceRecordSet) (st RecordSets: []ResourceRecordSet{rrSet}, }) - req, err := client.newRequest("PATCH", fmt.Sprintf("/servers/localhost/zones/%s", zone), reqBody) + req, err := client.newRequest("PATCH", fmt.Sprintf("/servers/%s/zones/%s", client.ZC, zone), reqBody) if err != nil { return "", err } @@ -612,7 +614,7 @@ func (client *Client) DeleteRecordSet(zone string, name string, tpe string) erro }, }) - req, err := client.newRequest("PATCH", fmt.Sprintf("/servers/localhost/zones/%s", zone), reqBody) + req, err := client.newRequest("PATCH", fmt.Sprintf("/servers/%s/zones/%s", client.ZC, zone), reqBody) if err != nil { return err } @@ -643,7 +645,7 @@ func (client *Client) DeleteRecordSetByID(zone string, recID string) error { } func (client *Client) setServerVersion() error { - req, err := client.newRequest("GET", "/servers/localhost", nil) + req, err := client.newRequest("GET", fmt.Sprintf("/servers/%s", client.ZC), nil) if err != nil { return err } diff --git a/powerdns/config.go b/powerdns/config.go index cd5977b..c01fe4a 100644 --- a/powerdns/config.go +++ b/powerdns/config.go @@ -18,6 +18,7 @@ type Config struct { CacheEnable bool CacheMemorySize string CacheTTL int + ZC string } // Client returns a new client for accessing PowerDNS @@ -39,7 +40,7 @@ func (c *Config) Client() (*Client, error) { tlsConfig.InsecureSkipVerify = c.InsecureHTTPS - client, err := NewClient(c.ServerURL, c.APIKey, tlsConfig, c.CacheEnable, c.CacheMemorySize, c.CacheTTL) + client, err := NewClient(c.ServerURL, c.APIKey, tlsConfig, c.CacheEnable, c.CacheMemorySize, c.CacheTTL, c.ZC) if err != nil { return nil, fmt.Errorf("Error setting up PowerDNS client: %s", err) diff --git a/powerdns/provider.go b/powerdns/provider.go index d8d2040..5d0e656 100644 --- a/powerdns/provider.go +++ b/powerdns/provider.go @@ -21,6 +21,12 @@ func Provider() terraform.ResourceProvider { DefaultFunc: schema.EnvDefaultFunc("PDNS_SERVER_URL", nil), Description: "Location of PowerDNS server", }, + "zone_control": { + Type: schema.TypeString, + Optional: true, + DefaultFunc: schema.EnvDefaultFunc("PDNS_ZONE_CONTROL", "localhost"), + Description: "Location of PowerDNS Zone Control server", + }, "insecure_https": { Type: schema.TypeBool, Optional: true, @@ -66,6 +72,7 @@ func providerConfigure(data *schema.ResourceData) (interface{}, error) { config := Config{ APIKey: data.Get("api_key").(string), ServerURL: data.Get("server_url").(string), + ZC: data.Get("zone_control").(string), InsecureHTTPS: data.Get("insecure_https").(bool), CACertificate: data.Get("ca_certificate").(string), CacheEnable: data.Get("cache_requests").(bool),