github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/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 Importer: &schema.ResourceImporter{ 18 State: schema.ImportStatePassthrough, 19 }, 20 Schema: map[string]*schema.Schema{ 21 "dns_name": &schema.Schema{ 22 Type: schema.TypeString, 23 Required: true, 24 ForceNew: true, 25 }, 26 27 "name": &schema.Schema{ 28 Type: schema.TypeString, 29 Required: true, 30 ForceNew: true, 31 }, 32 33 "description": &schema.Schema{ 34 Type: schema.TypeString, 35 Optional: true, 36 ForceNew: true, 37 Default: "Managed by Terraform", 38 }, 39 40 "name_servers": &schema.Schema{ 41 Type: schema.TypeList, 42 Computed: true, 43 Elem: &schema.Schema{ 44 Type: schema.TypeString, 45 }, 46 }, 47 48 // Google Cloud DNS ManagedZone resources do not have a SelfLink attribute. 49 50 "project": &schema.Schema{ 51 Type: schema.TypeString, 52 Optional: true, 53 ForceNew: true, 54 }, 55 }, 56 } 57 } 58 59 func resourceDnsManagedZoneCreate(d *schema.ResourceData, meta interface{}) error { 60 config := meta.(*Config) 61 62 project, err := getProject(d, config) 63 if err != nil { 64 return err 65 } 66 67 // Build the parameter 68 zone := &dns.ManagedZone{ 69 Name: d.Get("name").(string), 70 DnsName: d.Get("dns_name").(string), 71 } 72 // Optional things 73 if v, ok := d.GetOk("description"); ok { 74 zone.Description = v.(string) 75 } 76 if v, ok := d.GetOk("dns_name"); ok { 77 zone.DnsName = v.(string) 78 } 79 80 log.Printf("[DEBUG] DNS ManagedZone create request: %#v", zone) 81 zone, err = config.clientDns.ManagedZones.Create(project, zone).Do() 82 if err != nil { 83 return fmt.Errorf("Error creating DNS ManagedZone: %s", err) 84 } 85 86 d.SetId(zone.Name) 87 88 return resourceDnsManagedZoneRead(d, meta) 89 } 90 91 func resourceDnsManagedZoneRead(d *schema.ResourceData, meta interface{}) error { 92 config := meta.(*Config) 93 94 project, err := getProject(d, config) 95 if err != nil { 96 return err 97 } 98 99 zone, err := config.clientDns.ManagedZones.Get( 100 project, d.Id()).Do() 101 if err != nil { 102 if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { 103 log.Printf("[WARN] Removing DNS Managed Zone %q because it's gone", d.Get("name").(string)) 104 // The resource doesn't exist anymore 105 d.SetId("") 106 107 return nil 108 } 109 110 return fmt.Errorf("Error reading DNS ManagedZone: %#v", err) 111 } 112 113 d.Set("name_servers", zone.NameServers) 114 d.Set("name", zone.Name) 115 d.Set("dns_name", zone.DnsName) 116 d.Set("description", zone.Description) 117 118 return nil 119 } 120 121 func resourceDnsManagedZoneDelete(d *schema.ResourceData, meta interface{}) error { 122 config := meta.(*Config) 123 124 project, err := getProject(d, config) 125 if err != nil { 126 return err 127 } 128 129 err = config.clientDns.ManagedZones.Delete(project, d.Id()).Do() 130 if err != nil { 131 return fmt.Errorf("Error deleting DNS ManagedZone: %s", err) 132 } 133 134 d.SetId("") 135 return nil 136 }