github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/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 ForceNew: true, 39 }, 40 41 "value": &schema.Schema{ 42 Type: schema.TypeString, 43 Required: true, 44 }, 45 46 "ttl": &schema.Schema{ 47 Type: schema.TypeString, 48 Optional: true, 49 Computed: true, 50 }, 51 52 "priority": &schema.Schema{ 53 Type: schema.TypeString, 54 Optional: true, 55 }, 56 }, 57 } 58 } 59 60 func resourceCloudFlareRecordCreate(d *schema.ResourceData, meta interface{}) error { 61 client := meta.(*cloudflare.Client) 62 63 // Create the new record 64 newRecord := &cloudflare.CreateRecord{ 65 Name: d.Get("name").(string), 66 Type: d.Get("type").(string), 67 Content: d.Get("value").(string), 68 } 69 70 if ttl, ok := d.GetOk("ttl"); ok { 71 newRecord.Ttl = ttl.(string) 72 } 73 74 if priority, ok := d.GetOk("priority"); ok { 75 newRecord.Priority = priority.(string) 76 } 77 78 log.Printf("[DEBUG] CloudFlare Record create configuration: %#v", newRecord) 79 80 rec, err := client.CreateRecord(d.Get("domain").(string), newRecord) 81 82 if err != nil { 83 return fmt.Errorf("Failed to create CloudFlare Record: %s", err) 84 } 85 86 d.SetId(rec.Id) 87 log.Printf("[INFO] CloudFlare Record ID: %s", d.Id()) 88 89 return resourceCloudFlareRecordRead(d, meta) 90 } 91 92 func resourceCloudFlareRecordRead(d *schema.ResourceData, meta interface{}) error { 93 client := meta.(*cloudflare.Client) 94 95 rec, err := client.RetrieveRecord(d.Get("domain").(string), d.Id()) 96 if err != nil { 97 if strings.Contains(err.Error(), "not found") { 98 d.SetId("") 99 return nil 100 } 101 102 return fmt.Errorf( 103 "Couldn't find CloudFlare Record ID (%s) for domain (%s): %s", 104 d.Id(), d.Get("domain").(string), err) 105 } 106 107 d.Set("name", rec.Name) 108 d.Set("hostname", rec.FullName) 109 d.Set("type", rec.Type) 110 d.Set("value", rec.Value) 111 d.Set("ttl", rec.Ttl) 112 d.Set("priority", rec.Priority) 113 114 return nil 115 } 116 117 func resourceCloudFlareRecordUpdate(d *schema.ResourceData, meta interface{}) error { 118 client := meta.(*cloudflare.Client) 119 120 // CloudFlare requires we send all values for an update request 121 updateRecord := &cloudflare.UpdateRecord{ 122 Name: d.Get("name").(string), 123 Type: d.Get("type").(string), 124 Content: d.Get("value").(string), 125 } 126 127 if ttl, ok := d.GetOk("ttl"); ok { 128 updateRecord.Ttl = ttl.(string) 129 } 130 131 if priority, ok := d.GetOk("priority"); ok { 132 updateRecord.Priority = priority.(string) 133 } 134 135 log.Printf("[DEBUG] CloudFlare Record update configuration: %#v", updateRecord) 136 137 err := client.UpdateRecord(d.Get("domain").(string), d.Id(), updateRecord) 138 if err != nil { 139 return fmt.Errorf("Failed to update CloudFlare Record: %s", err) 140 } 141 142 return resourceCloudFlareRecordRead(d, meta) 143 } 144 145 func resourceCloudFlareRecordDelete(d *schema.ResourceData, meta interface{}) error { 146 client := meta.(*cloudflare.Client) 147 148 log.Printf("[INFO] Deleting CloudFlare Record: %s, %s", d.Get("domain").(string), d.Id()) 149 150 err := client.DestroyRecord(d.Get("domain").(string), d.Id()) 151 152 if err != nil { 153 return fmt.Errorf("Error deleting CloudFlare Record: %s", err) 154 } 155 156 return nil 157 }