github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/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  }