Added Storage Queue resource.
This commit is contained in:
parent
329424c04b
commit
ebfbef0d52
|
@ -38,6 +38,7 @@ func Provider() terraform.ResourceProvider {
|
||||||
"azure_storage_service": resourceAzureStorageService(),
|
"azure_storage_service": resourceAzureStorageService(),
|
||||||
"azure_storage_container": resourceAzureStorageContainer(),
|
"azure_storage_container": resourceAzureStorageContainer(),
|
||||||
"azure_storage_blob": resourceAzureStorageBlob(),
|
"azure_storage_blob": resourceAzureStorageBlob(),
|
||||||
|
"azure_storage_queue": resourceAzureStorageQueue(),
|
||||||
"azure_virtual_network": resourceAzureVirtualNetwork(),
|
"azure_virtual_network": resourceAzureVirtualNetwork(),
|
||||||
"azure_dns_server": resourceAzureDnsServer(),
|
"azure_dns_server": resourceAzureDnsServer(),
|
||||||
"azure_local_network_connection": resourceAzureLocalNetworkConnection(),
|
"azure_local_network_connection": resourceAzureLocalNetworkConnection(),
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
package azure
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
)
|
||||||
|
|
||||||
|
// resourceAzureStorageQueue returns the *schema.Resource associated
|
||||||
|
// to a storage queue on Azure.
|
||||||
|
func resourceAzureStorageQueue() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
Create: resourceAzureStorageQueueCreate,
|
||||||
|
Read: resourceAzureStorageQueueRead,
|
||||||
|
Delete: resourceAzureStorageQueueDelete,
|
||||||
|
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"name": &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Required: true,
|
||||||
|
ForceNew: true,
|
||||||
|
Description: parameterDescriptions["name"],
|
||||||
|
},
|
||||||
|
"storage_service_name": &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Required: true,
|
||||||
|
ForceNew: true,
|
||||||
|
Description: parameterDescriptions["storage_service_name"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// resourceAzureStorageQueueCreate does all the necessary API calls to
|
||||||
|
// create a storage queue on Azure.
|
||||||
|
func resourceAzureStorageQueueCreate(d *schema.ResourceData, meta interface{}) error {
|
||||||
|
mgmtClient := meta.(*Client).mgmtClient
|
||||||
|
storServName := d.Get("storage_service_name").(string)
|
||||||
|
queueClient, err := getStorageServiceQueueClient(mgmtClient, storServName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the queue:
|
||||||
|
log.Println("Sending Storage Queue creation request to Azure.")
|
||||||
|
name := d.Get("name").(string)
|
||||||
|
err = queueClient.CreateQueue(name)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error creation Storage Queue on Azure: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
d.SetId(name)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// resourceAzureStorageQueueRead does all the necessary API calls to
|
||||||
|
// read the state of the storage queue off Azure.
|
||||||
|
func resourceAzureStorageQueueRead(d *schema.ResourceData, meta interface{}) error {
|
||||||
|
mgmtClient := meta.(*Client).mgmtClient
|
||||||
|
storServName := d.Get("storage_service_name").(string)
|
||||||
|
queueClient, err := getStorageServiceQueueClient(mgmtClient, storServName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// check for queue's existence:
|
||||||
|
log.Println("[INFO] Sending Storage Queue existence query to Azure.")
|
||||||
|
name := d.Get("name").(string)
|
||||||
|
exists, err := queueClient.QueueExists(name)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error checking for Storage Queue existence: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the queue has been deleted in the meantime;
|
||||||
|
// untrack the resource from the schema.
|
||||||
|
if !exists {
|
||||||
|
d.SetId("")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// resourceAzureStorageQueueDelete does all the necessary API calls to
|
||||||
|
// delete the storage queue off Azure.
|
||||||
|
func resourceAzureStorageQueueDelete(d *schema.ResourceData, meta interface{}) error {
|
||||||
|
mgmtClient := meta.(*Client).mgmtClient
|
||||||
|
storServName := d.Get("storage_service_name").(string)
|
||||||
|
queueClient, err := getStorageServiceQueueClient(mgmtClient, storServName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// issue the deletion of the storage queue:
|
||||||
|
log.Println("[INFO] Sending Storage Queue deletion request to Azure.")
|
||||||
|
name := d.Get("name").(string)
|
||||||
|
err = queueClient.DeleteQueue(name)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error deleting Storage queue off Azure: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,93 @@
|
||||||
|
package azure
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAccAzureStorageQueue(t *testing.T) {
|
||||||
|
name := "azure_storage_queue.foo"
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckAzureStorageQueueDeleted,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: testAccAzureStorageQueueConfig,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckAzureStorageQueueExists(name),
|
||||||
|
resource.TestCheckResourceAttr(name, "name", "terraform-queue"),
|
||||||
|
resource.TestCheckResourceAttr(name, "storage_service_name", testAccStorageServiceName),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func testAccCheckAzureStorageQueueExists(name string) resource.TestCheckFunc {
|
||||||
|
return func(s *terraform.State) error {
|
||||||
|
resource, ok := s.RootModule().Resources[name]
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("Azure Storage Queue resource '%s' is missing.", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resource.Primary.ID == "" {
|
||||||
|
return fmt.Errorf("Azure Storage Service Queue ID %s is missing.", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
mgmtClient := testAccProvider.Meta().(*Client).mgmtClient
|
||||||
|
queueClient, err := getStorageServiceQueueClient(mgmtClient, testAccStorageServiceName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
exists, err := queueClient.QueueExists(resource.Primary.ID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error querying Azure for Storage Queue existence: %s", err)
|
||||||
|
}
|
||||||
|
if !exists {
|
||||||
|
return fmt.Errorf("Azure Storage Queue %s doesn't exist!", resource.Primary.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testAccCheckAzureStorageQueueDeleted(s *terraform.State) error {
|
||||||
|
for _, resource := range s.RootModule().Resources {
|
||||||
|
if resource.Type != "azure_storage_queue" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if resource.Primary.ID == "" {
|
||||||
|
return fmt.Errorf("Azure Storage Service Queue ID %s is missing.", resource.Primary.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
mgmtClient := testAccProvider.Meta().(*Client).mgmtClient
|
||||||
|
queueClient, err := getStorageServiceQueueClient(mgmtClient, testAccStorageServiceName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
exists, err := queueClient.QueueExists(resource.Primary.ID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error querying Azure for Storage Queue existence: %s", err)
|
||||||
|
}
|
||||||
|
if exists {
|
||||||
|
return fmt.Errorf("Azure Storage Queue %s still exists!", resource.Primary.ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var testAccAzureStorageQueueConfig = fmt.Sprintf(`
|
||||||
|
resource "azure_storage_queue" "foo" {
|
||||||
|
name = "terraform-queue"
|
||||||
|
storage_service_name = "%s"
|
||||||
|
}
|
||||||
|
`, testAccStorageServiceName)
|
|
@ -2,30 +2,49 @@ package azure
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/management"
|
"github.com/Azure/azure-sdk-for-go/management"
|
||||||
"github.com/Azure/azure-sdk-for-go/management/storageservice"
|
"github.com/Azure/azure-sdk-for-go/management/storageservice"
|
||||||
"github.com/Azure/azure-sdk-for-go/storage"
|
"github.com/Azure/azure-sdk-for-go/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
// getStorageServiceBlobClient is a helper function which returns the
|
// getStorageClientForStorageService is helper function which returns the
|
||||||
// storage.BlobStorageClient associated to the given storage account name.
|
// storage.Client associated to the given storage service name.
|
||||||
func getStorageServiceBlobClient(mgmtClient management.Client, serviceName string) (storage.BlobStorageClient, error) {
|
func getStorageClientForStorageService(mgmtClient management.Client, serviceName string) (storage.Client, error) {
|
||||||
log.Println("[INFO] Begun generating Azure Storage Service Blob client.")
|
var storageClient storage.Client
|
||||||
var blobClient storage.BlobStorageClient
|
|
||||||
|
|
||||||
storageServiceClient := storageservice.NewClient(mgmtClient)
|
storageServiceClient := storageservice.NewClient(mgmtClient)
|
||||||
|
|
||||||
keys, err := storageServiceClient.GetStorageServiceKeys(serviceName)
|
keys, err := storageServiceClient.GetStorageServiceKeys(serviceName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return blobClient, fmt.Errorf("Error reading Storage Service %s's keys from Azure: %s", serviceName, err)
|
return storageClient, fmt.Errorf("Failed getting Storage Service keys for %s: %s", serviceName, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
storageClient, err := storage.NewBasicClient(serviceName, keys.PrimaryKey)
|
storageClient, err = storage.NewBasicClient(serviceName, keys.PrimaryKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return blobClient, fmt.Errorf("Error creating Storage Service Client for %s: %s", serviceName, err)
|
return storageClient, fmt.Errorf("Failed creating Storage Service client for %s: %s", serviceName, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return storageClient, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// getStorageServiceBlobClient is a helper function which returns the
|
||||||
|
// storage.BlobStorageClient associated to the given storage service name.
|
||||||
|
func getStorageServiceBlobClient(mgmtClient management.Client, serviceName string) (storage.BlobStorageClient, error) {
|
||||||
|
storageClient, err := getStorageClientForStorageService(mgmtClient, serviceName)
|
||||||
|
if err != nil {
|
||||||
|
return storage.BlobStorageClient{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return storageClient.GetBlobService(), nil
|
return storageClient.GetBlobService(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getStorageServiceQueueClient is a helper function which returns the
|
||||||
|
// storage.QueueServiceClient associated to the given storage service name.
|
||||||
|
func getStorageServiceQueueClient(mgmtClient management.Client, serviceName string) (storage.QueueServiceClient, error) {
|
||||||
|
storageClient, err := getStorageClientForStorageService(mgmtClient, serviceName)
|
||||||
|
if err != nil {
|
||||||
|
return storage.QueueServiceClient{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return storageClient.GetQueueService(), err
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
layout: "azure"
|
||||||
|
page_title: "Azure: azure_storage_queue"
|
||||||
|
sidebar_current: "docs-azure-storage-queue"
|
||||||
|
description: |-
|
||||||
|
Creates a new storage queue within a given storage service on Azure.
|
||||||
|
---
|
||||||
|
|
||||||
|
# azure\_storage\_queue
|
||||||
|
|
||||||
|
Creates a new storage queue within a given storage service on Azure.
|
||||||
|
|
||||||
|
## Example Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
resource "azure_storage_queue" "stor-queue" {
|
||||||
|
name = "terraform-storage-queue"
|
||||||
|
storage_service_name = "tfstorserv"
|
||||||
|
}
|
||||||
|
````
|
||||||
|
|
||||||
|
## Argument Reference
|
||||||
|
|
||||||
|
The following arguments are supported:
|
||||||
|
|
||||||
|
* `name` - (Required) The name of the storage queue. Must be unique within
|
||||||
|
the storage service the queue is located.
|
||||||
|
|
||||||
|
* `storage_service_name` - (Required) The name of the storage service within
|
||||||
|
which the storage queue should be created.
|
||||||
|
|
||||||
|
## Attributes Reference
|
||||||
|
|
||||||
|
The following attributes are exported:
|
||||||
|
|
||||||
|
* `id` - The storage queue ID. Coincides with the given `name`.
|
|
@ -49,6 +49,10 @@
|
||||||
<a href="/docs/providers/azure/r/storage_container.html">azure_storage_container</a>
|
<a href="/docs/providers/azure/r/storage_container.html">azure_storage_container</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
<li<%= sidebar_current("docs-azure-resource-storage-queue") %>>
|
||||||
|
<a href="/docs/providers/azure/r/storage_queue.html">azure_storage_queue</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li<%= sidebar_current("docs-azure-resource-storage-service") %>>
|
<li<%= sidebar_current("docs-azure-resource-storage-service") %>>
|
||||||
<a href="/docs/providers/azure/r/storage_service.html">azure_storage_service</a>
|
<a href="/docs/providers/azure/r/storage_service.html">azure_storage_service</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
Loading…
Reference in New Issue