53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package openstack
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/hashicorp/terraform/helper/resource"
|
|
|
|
"github.com/gophercloud/gophercloud"
|
|
"github.com/gophercloud/gophercloud/openstack/dns/v2/zones"
|
|
)
|
|
|
|
// ZoneCreateOpts represents the attributes used when creating a new DNS zone.
|
|
type ZoneCreateOpts struct {
|
|
zones.CreateOpts
|
|
ValueSpecs map[string]string `json:"value_specs,omitempty"`
|
|
}
|
|
|
|
// ToZoneCreateMap casts a CreateOpts struct to a map.
|
|
// It overrides zones.ToZoneCreateMap to add the ValueSpecs field.
|
|
func (opts ZoneCreateOpts) ToZoneCreateMap() (map[string]interface{}, error) {
|
|
b, err := BuildRequest(opts, "")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if m, ok := b[""].(map[string]interface{}); ok {
|
|
if opts.TTL > 0 {
|
|
m["ttl"] = opts.TTL
|
|
}
|
|
|
|
return m, nil
|
|
}
|
|
|
|
return nil, fmt.Errorf("Expected map but got %T", b[""])
|
|
}
|
|
|
|
func dnsZoneV2RefreshFunc(dnsClient *gophercloud.ServiceClient, zoneId string) resource.StateRefreshFunc {
|
|
return func() (interface{}, string, error) {
|
|
zone, err := zones.Get(dnsClient, zoneId).Extract()
|
|
if err != nil {
|
|
if _, ok := err.(gophercloud.ErrDefault404); ok {
|
|
return zone, "DELETED", nil
|
|
}
|
|
|
|
return nil, "", err
|
|
}
|
|
|
|
log.Printf("[DEBUG] openstack_dns_zone_v2 %s current status: %s", zone.ID, zone.Status)
|
|
return zone, zone.Status, nil
|
|
}
|
|
}
|