github.com/peterbale/terraform@v0.9.0-beta2.0.20170315142748-5723acd55547/builtin/providers/azurerm/resource_arm_dns_a_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 resourceArmDnsARecord() *schema.Resource { 12 return &schema.Resource{ 13 Create: resourceArmDnsARecordCreate, 14 Read: resourceArmDnsARecordRead, 15 Update: resourceArmDnsARecordCreate, 16 Delete: resourceArmDnsARecordDelete, 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.TypeSet, 41 Required: true, 42 Elem: &schema.Schema{Type: schema.TypeString}, 43 Set: schema.HashString, 44 }, 45 46 "ttl": &schema.Schema{ 47 Type: schema.TypeInt, 48 Required: true, 49 }, 50 51 "tags": tagsSchema(), 52 }, 53 } 54 } 55 56 func resourceArmDnsARecordCreate(d *schema.ResourceData, meta interface{}) error { 57 client := meta.(*ArmClient) 58 rivieraClient := client.rivieraClient 59 60 tags := d.Get("tags").(map[string]interface{}) 61 expandedTags := expandTags(tags) 62 63 createCommand := &dns.CreateARecordSet{ 64 Name: d.Get("name").(string), 65 Location: "global", 66 ResourceGroupName: d.Get("resource_group_name").(string), 67 ZoneName: d.Get("zone_name").(string), 68 TTL: d.Get("ttl").(int), 69 Tags: *expandedTags, 70 } 71 72 recordStrings := d.Get("records").(*schema.Set).List() 73 records := make([]dns.ARecord, len(recordStrings)) 74 for i, v := range recordStrings { 75 records[i] = dns.ARecord{ 76 IPv4Address: v.(string), 77 } 78 } 79 createCommand.ARecords = records 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 A Record: %s", err) 87 } 88 if !createResponse.IsSuccessful() { 89 return fmt.Errorf("Error creating DNS A Record: %s", createResponse.Error) 90 } 91 92 readRequest := rivieraClient.NewRequest() 93 readRequest.Command = &dns.GetARecordSet{ 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 A Record: %s", err) 102 } 103 if !readResponse.IsSuccessful() { 104 return fmt.Errorf("Error reading DNS A Record: %s", readResponse.Error) 105 } 106 107 resp := readResponse.Parsed.(*dns.GetARecordSetResponse) 108 d.SetId(resp.ID) 109 110 return resourceArmDnsARecordRead(d, meta) 111 } 112 113 func resourceArmDnsARecordRead(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.GetARecordSet{} 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.GetARecordSetResponse) 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 142 if resp.ARecords != nil { 143 records := make([]string, 0, len(resp.ARecords)) 144 for _, record := range resp.ARecords { 145 records = append(records, record.IPv4Address) 146 } 147 148 if err := d.Set("records", records); err != nil { 149 return err 150 } 151 } 152 153 flattenAndSetTags(d, &resp.Tags) 154 155 return nil 156 } 157 158 func resourceArmDnsARecordDelete(d *schema.ResourceData, meta interface{}) error { 159 client := meta.(*ArmClient) 160 rivieraClient := client.rivieraClient 161 162 deleteRequest := rivieraClient.NewRequestForURI(d.Id()) 163 deleteRequest.Command = &dns.DeleteRecordSet{ 164 RecordSetType: "A", 165 } 166 167 deleteResponse, err := deleteRequest.Execute() 168 if err != nil { 169 return fmt.Errorf("Error deleting DNS A Record: %s", err) 170 } 171 if !deleteResponse.IsSuccessful() { 172 return fmt.Errorf("Error deleting DNS A Record: %s", deleteResponse.Error) 173 } 174 175 return nil 176 }