github.com/odise/terraform@v0.6.9-0.20160401223921-f7d1e0390da7/builtin/providers/google/resource_dns_managed_zone.go (about) 1 package google 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/hashicorp/terraform/helper/schema" 8 "google.golang.org/api/dns/v1" 9 "google.golang.org/api/googleapi" 10 ) 11 12 func resourceDnsManagedZone() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceDnsManagedZoneCreate, 15 Read: resourceDnsManagedZoneRead, 16 Delete: resourceDnsManagedZoneDelete, 17 18 Schema: map[string]*schema.Schema{ 19 "name": &schema.Schema{ 20 Type: schema.TypeString, 21 Required: true, 22 ForceNew: true, 23 }, 24 25 "dns_name": &schema.Schema{ 26 Type: schema.TypeString, 27 Required: true, 28 ForceNew: true, 29 }, 30 31 "description": &schema.Schema{ 32 Type: schema.TypeString, 33 Optional: true, 34 ForceNew: true, 35 Default: "Managed by Terraform", 36 }, 37 38 "name_servers": &schema.Schema{ 39 Type: schema.TypeList, 40 Computed: true, 41 Elem: &schema.Schema{ 42 Type: schema.TypeString, 43 }, 44 }, 45 46 // Google Cloud DNS ManagedZone resources do not have a SelfLink attribute. 47 }, 48 } 49 } 50 51 func resourceDnsManagedZoneCreate(d *schema.ResourceData, meta interface{}) error { 52 config := meta.(*Config) 53 54 // Build the parameter 55 zone := &dns.ManagedZone{ 56 Name: d.Get("name").(string), 57 DnsName: d.Get("dns_name").(string), 58 } 59 // Optional things 60 if v, ok := d.GetOk("description"); ok { 61 zone.Description = v.(string) 62 } 63 if v, ok := d.GetOk("dns_name"); ok { 64 zone.DnsName = v.(string) 65 } 66 67 log.Printf("[DEBUG] DNS ManagedZone create request: %#v", zone) 68 zone, err := config.clientDns.ManagedZones.Create(config.Project, zone).Do() 69 if err != nil { 70 return fmt.Errorf("Error creating DNS ManagedZone: %s", err) 71 } 72 73 d.SetId(zone.Name) 74 75 return resourceDnsManagedZoneRead(d, meta) 76 } 77 78 func resourceDnsManagedZoneRead(d *schema.ResourceData, meta interface{}) error { 79 config := meta.(*Config) 80 81 zone, err := config.clientDns.ManagedZones.Get( 82 config.Project, d.Id()).Do() 83 if err != nil { 84 if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { 85 log.Printf("[WARN] Removing DNS Managed Zone %q because it's gone", d.Get("name").(string)) 86 // The resource doesn't exist anymore 87 d.SetId("") 88 89 return nil 90 } 91 92 return fmt.Errorf("Error reading DNS ManagedZone: %#v", err) 93 } 94 95 d.Set("name_servers", zone.NameServers) 96 97 return nil 98 } 99 100 func resourceDnsManagedZoneDelete(d *schema.ResourceData, meta interface{}) error { 101 config := meta.(*Config) 102 103 err := config.clientDns.ManagedZones.Delete(config.Project, d.Id()).Do() 104 if err != nil { 105 return fmt.Errorf("Error deleting DNS ManagedZone: %s", err) 106 } 107 108 d.SetId("") 109 return nil 110 }