github.com/peterbale/terraform@v0.9.0-beta2.0.20170315142748-5723acd55547/builtin/providers/azurerm/resource_arm_dns_cname_record.go (about) 1 package azurerm 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/hashicorp/terraform/helper/schema" 8 "github.com/jen20/riviera/dns" 9 ) 10 11 func resourceArmDnsCNameRecord() *schema.Resource { 12 return &schema.Resource{ 13 Create: resourceArmDnsCNameRecordCreate, 14 Read: resourceArmDnsCNameRecordRead, 15 Update: resourceArmDnsCNameRecordCreate, 16 Delete: resourceArmDnsCNameRecordDelete, 17 Importer: &schema.ResourceImporter{ 18 State: schema.ImportStatePassthrough, 19 }, 20 21 Schema: map[string]*schema.Schema{ 22 "name": &schema.Schema{ 23 Type: schema.TypeString, 24 Required: true, 25 ForceNew: true, 26 }, 27 28 "resource_group_name": &schema.Schema{ 29 Type: schema.TypeString, 30 Required: true, 31 ForceNew: true, 32 }, 33 34 "zone_name": &schema.Schema{ 35 Type: schema.TypeString, 36 Required: true, 37 }, 38 39 "records": &schema.Schema{ 40 Type: schema.TypeString, 41 Optional: true, 42 Elem: &schema.Schema{Type: schema.TypeString}, 43 Set: schema.HashString, 44 Removed: "Use `record` instead. This attribute will be removed in a future version", 45 }, 46 47 "record": &schema.Schema{ 48 Type: schema.TypeString, 49 Required: true, 50 }, 51 52 "ttl": &schema.Schema{ 53 Type: schema.TypeInt, 54 Required: true, 55 }, 56 57 "tags": tagsSchema(), 58 }, 59 } 60 } 61 62 func resourceArmDnsCNameRecordCreate(d *schema.ResourceData, meta interface{}) error { 63 client := meta.(*ArmClient) 64 rivieraClient := client.rivieraClient 65 66 tags := d.Get("tags").(map[string]interface{}) 67 expandedTags := expandTags(tags) 68 69 createCommand := &dns.CreateCNAMERecordSet{ 70 Name: d.Get("name").(string), 71 Location: "global", 72 ResourceGroupName: d.Get("resource_group_name").(string), 73 ZoneName: d.Get("zone_name").(string), 74 TTL: d.Get("ttl").(int), 75 Tags: *expandedTags, 76 CNAMERecord: dns.CNAMERecord{ 77 CNAME: d.Get("record").(string), 78 }, 79 } 80 81 createRequest := rivieraClient.NewRequest() 82 createRequest.Command = createCommand 83 84 createResponse, err := createRequest.Execute() 85 if err != nil { 86 return fmt.Errorf("Error creating DNS CName Record: %s", err) 87 } 88 if !createResponse.IsSuccessful() { 89 return fmt.Errorf("Error creating DNS CName Record: %s", createResponse.Error) 90 } 91 92 readRequest := rivieraClient.NewRequest() 93 readRequest.Command = &dns.GetCNAMERecordSet{ 94 Name: d.Get("name").(string), 95 ResourceGroupName: d.Get("resource_group_name").(string), 96 ZoneName: d.Get("zone_name").(string), 97 } 98 99 readResponse, err := readRequest.Execute() 100 if err != nil { 101 return fmt.Errorf("Error reading DNS CName Record: %s", err) 102 } 103 if !readResponse.IsSuccessful() { 104 return fmt.Errorf("Error reading DNS CName Record: %s", readResponse.Error) 105 } 106 107 resp := readResponse.Parsed.(*dns.GetCNAMERecordSetResponse) 108 d.SetId(resp.ID) 109 110 return resourceArmDnsCNameRecordRead(d, meta) 111 } 112 113 func resourceArmDnsCNameRecordRead(d *schema.ResourceData, meta interface{}) error { 114 client := meta.(*ArmClient) 115 rivieraClient := client.rivieraClient 116 117 id, err := parseAzureResourceID(d.Id()) 118 if err != nil { 119 return err 120 } 121 122 readRequest := rivieraClient.NewRequestForURI(d.Id()) 123 readRequest.Command = &dns.GetCNAMERecordSet{} 124 125 readResponse, err := readRequest.Execute() 126 if err != nil { 127 return fmt.Errorf("Error reading DNS A Record: %s", err) 128 } 129 if !readResponse.IsSuccessful() { 130 log.Printf("[INFO] Error reading DNS A Record %q - removing from state", d.Id()) 131 d.SetId("") 132 return fmt.Errorf("Error reading DNS A Record: %s", readResponse.Error) 133 } 134 135 resp := readResponse.Parsed.(*dns.GetCNAMERecordSetResponse) 136 137 d.Set("name", resp.Name) 138 d.Set("resource_group_name", id.ResourceGroup) 139 d.Set("zone_name", id.Path["dnszones"]) 140 d.Set("ttl", resp.TTL) 141 d.Set("record", resp.CNAMERecord.CNAME) 142 143 flattenAndSetTags(d, &resp.Tags) 144 145 return nil 146 } 147 148 func resourceArmDnsCNameRecordDelete(d *schema.ResourceData, meta interface{}) error { 149 client := meta.(*ArmClient) 150 rivieraClient := client.rivieraClient 151 152 deleteRequest := rivieraClient.NewRequestForURI(d.Id()) 153 deleteRequest.Command = &dns.DeleteRecordSet{ 154 RecordSetType: "CNAME", 155 } 156 157 deleteResponse, err := deleteRequest.Execute() 158 if err != nil { 159 return fmt.Errorf("Error deleting DNS CName Record: %s", err) 160 } 161 if !deleteResponse.IsSuccessful() { 162 return fmt.Errorf("Error deleting DNS CName Record: %s", deleteResponse.Error) 163 } 164 165 return nil 166 }