github.com/joshgarnett/terraform@v0.5.4-0.20160219181435-92dc20bb3594/builtin/providers/cloudflare/resource_cloudflare_record.go (about) 1 package cloudflare 2 3 import ( 4 "fmt" 5 "log" 6 "strings" 7 8 "github.com/hashicorp/terraform/helper/schema" 9 "github.com/pearkes/cloudflare" 10 ) 11 12 func resourceCloudFlareRecord() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceCloudFlareRecordCreate, 15 Read: resourceCloudFlareRecordRead, 16 Update: resourceCloudFlareRecordUpdate, 17 Delete: resourceCloudFlareRecordDelete, 18 19 Schema: map[string]*schema.Schema{ 20 "domain": &schema.Schema{ 21 Type: schema.TypeString, 22 Required: true, 23 }, 24 25 "name": &schema.Schema{ 26 Type: schema.TypeString, 27 Required: true, 28 }, 29 30 "hostname": &schema.Schema{ 31 Type: schema.TypeString, 32 Computed: true, 33 }, 34 35 "type": &schema.Schema{ 36 Type: schema.TypeString, 37 Required: true, 38 }, 39 40 "value": &schema.Schema{ 41 Type: schema.TypeString, 42 Required: true, 43 }, 44 45 "ttl": &schema.Schema{ 46 Type: schema.TypeString, 47 Optional: true, 48 Computed: true, 49 }, 50 51 "priority": &schema.Schema{ 52 Type: schema.TypeString, 53 Optional: true, 54 }, 55 }, 56 } 57 } 58 59 func resourceCloudFlareRecordCreate(d *schema.ResourceData, meta interface{}) error { 60 client := meta.(*cloudflare.Client) 61 62 // Create the new record 63 newRecord := &cloudflare.CreateRecord{ 64 Name: d.Get("name").(string), 65 Type: d.Get("type").(string), 66 Content: d.Get("value").(string), 67 } 68 69 if ttl, ok := d.GetOk("ttl"); ok { 70 newRecord.Ttl = ttl.(string) 71 } 72 73 if priority, ok := d.GetOk("priority"); ok { 74 newRecord.Priority = priority.(string) 75 } 76 77 log.Printf("[DEBUG] CloudFlare Record create configuration: %#v", newRecord) 78 79 rec, err := client.CreateRecord(d.Get("domain").(string), newRecord) 80 81 if err != nil { 82 return fmt.Errorf("Failed to create CloudFlare Record: %s", err) 83 } 84 85 d.SetId(rec.Id) 86 log.Printf("[INFO] CloudFlare Record ID: %s", d.Id()) 87 88 return resourceCloudFlareRecordRead(d, meta) 89 } 90 91 func resourceCloudFlareRecordRead(d *schema.ResourceData, meta interface{}) error { 92 client := meta.(*cloudflare.Client) 93 94 rec, err := client.RetrieveRecord(d.Get("domain").(string), d.Id()) 95 if err != nil { 96 if strings.Contains(err.Error(), "not found") { 97 d.SetId("") 98 return nil 99 } 100 101 return fmt.Errorf( 102 "Couldn't find CloudFlare Record ID (%s) for domain (%s): %s", 103 d.Id(), d.Get("domain").(string), err) 104 } 105 106 d.Set("name", rec.Name) 107 d.Set("hostname", rec.FullName) 108 d.Set("type", rec.Type) 109 d.Set("value", rec.Value) 110 d.Set("ttl", rec.Ttl) 111 d.Set("priority", rec.Priority) 112 113 return nil 114 } 115 116 func resourceCloudFlareRecordUpdate(d *schema.ResourceData, meta interface{}) error { 117 client := meta.(*cloudflare.Client) 118 119 // CloudFlare requires we send all values for an update request 120 updateRecord := &cloudflare.UpdateRecord{ 121 Name: d.Get("name").(string), 122 Type: d.Get("type").(string), 123 Content: d.Get("value").(string), 124 } 125 126 if ttl, ok := d.GetOk("ttl"); ok { 127 updateRecord.Ttl = ttl.(string) 128 } 129 130 if priority, ok := d.GetOk("priority"); ok { 131 updateRecord.Priority = priority.(string) 132 } 133 134 log.Printf("[DEBUG] CloudFlare Record update configuration: %#v", updateRecord) 135 136 err := client.UpdateRecord(d.Get("domain").(string), d.Id(), updateRecord) 137 if err != nil { 138 return fmt.Errorf("Failed to update CloudFlare Record: %s", err) 139 } 140 141 return resourceCloudFlareRecordRead(d, meta) 142 } 143 144 func resourceCloudFlareRecordDelete(d *schema.ResourceData, meta interface{}) error { 145 client := meta.(*cloudflare.Client) 146 147 log.Printf("[INFO] Deleting CloudFlare Record: %s, %s", d.Get("domain").(string), d.Id()) 148 149 err := client.DestroyRecord(d.Get("domain").(string), d.Id()) 150 151 if err != nil { 152 return fmt.Errorf("Error deleting CloudFlare Record: %s", err) 153 } 154 155 return nil 156 }