github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/azure/resource_azure_storage_queue.go (about)

     1  package azure
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  )
     9  
    10  // resourceAzureStorageQueue returns the *schema.Resource associated
    11  // to a storage queue on Azure.
    12  func resourceAzureStorageQueue() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceAzureStorageQueueCreate,
    15  		Read:   resourceAzureStorageQueueRead,
    16  		Delete: resourceAzureStorageQueueDelete,
    17  
    18  		Schema: map[string]*schema.Schema{
    19  			"name": &schema.Schema{
    20  				Type:        schema.TypeString,
    21  				Required:    true,
    22  				ForceNew:    true,
    23  				Description: parameterDescriptions["name"],
    24  			},
    25  			"storage_service_name": &schema.Schema{
    26  				Type:        schema.TypeString,
    27  				Required:    true,
    28  				ForceNew:    true,
    29  				Description: parameterDescriptions["storage_service_name"],
    30  			},
    31  		},
    32  	}
    33  }
    34  
    35  // resourceAzureStorageQueueCreate does all the necessary API calls to
    36  // create a storage queue on Azure.
    37  func resourceAzureStorageQueueCreate(d *schema.ResourceData, meta interface{}) error {
    38  	azureClient := meta.(*Client)
    39  	storServName := d.Get("storage_service_name").(string)
    40  	queueClient, err := azureClient.getStorageServiceQueueClient(storServName)
    41  	if err != nil {
    42  		return err
    43  	}
    44  
    45  	// create the queue:
    46  	log.Println("Sending Storage Queue creation request to Azure.")
    47  	name := d.Get("name").(string)
    48  	err = queueClient.CreateQueue(name)
    49  	if err != nil {
    50  		return fmt.Errorf("Error creation Storage Queue on Azure: %s", err)
    51  	}
    52  
    53  	d.SetId(name)
    54  	return nil
    55  }
    56  
    57  // resourceAzureStorageQueueRead does all the necessary API calls to
    58  // read the state of the storage queue off Azure.
    59  func resourceAzureStorageQueueRead(d *schema.ResourceData, meta interface{}) error {
    60  	azureClient := meta.(*Client)
    61  	storServName := d.Get("storage_service_name").(string)
    62  	queueClient, err := azureClient.getStorageServiceQueueClient(storServName)
    63  	if err != nil {
    64  		return err
    65  	}
    66  
    67  	// check for queue's existence:
    68  	log.Println("[INFO] Sending Storage Queue existence query to Azure.")
    69  	name := d.Get("name").(string)
    70  	exists, err := queueClient.QueueExists(name)
    71  	if err != nil {
    72  		return fmt.Errorf("Error checking for Storage Queue existence: %s", err)
    73  	}
    74  
    75  	// If the queue has been deleted in the meantime;
    76  	// untrack the resource from the schema.
    77  	if !exists {
    78  		d.SetId("")
    79  	}
    80  
    81  	return nil
    82  }
    83  
    84  // resourceAzureStorageQueueDelete does all the necessary API calls to
    85  // delete the storage queue off Azure.
    86  func resourceAzureStorageQueueDelete(d *schema.ResourceData, meta interface{}) error {
    87  	azureClient := meta.(*Client)
    88  	storServName := d.Get("storage_service_name").(string)
    89  	queueClient, err := azureClient.getStorageServiceQueueClient(storServName)
    90  	if err != nil {
    91  		return err
    92  	}
    93  
    94  	// issue the deletion of the storage queue:
    95  	log.Println("[INFO] Sending Storage Queue deletion request to Azure.")
    96  	name := d.Get("name").(string)
    97  	err = queueClient.DeleteQueue(name)
    98  	if err != nil {
    99  		return fmt.Errorf("Error deleting Storage queue off Azure: %s", err)
   100  	}
   101  
   102  	return nil
   103  }