From 70410f616d6848306762d0608af9718be822316a Mon Sep 17 00:00:00 2001 From: stack72 Date: Tue, 24 May 2016 15:28:23 +0100 Subject: [PATCH] provider/azurerm: Add support for storage container name validation --- .../azurerm/resource_arm_storage_container.go | 26 +++++++++++++++-- .../resource_arm_storage_container_test.go | 28 +++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/builtin/providers/azurerm/resource_arm_storage_container.go b/builtin/providers/azurerm/resource_arm_storage_container.go index a87e44ec3562..093345399fb5 100644 --- a/builtin/providers/azurerm/resource_arm_storage_container.go +++ b/builtin/providers/azurerm/resource_arm_storage_container.go @@ -7,6 +7,7 @@ import ( "github.com/Azure/azure-sdk-for-go/storage" "github.com/hashicorp/terraform/helper/schema" + "regexp" ) func resourceArmStorageContainer() *schema.Resource { @@ -18,9 +19,10 @@ func resourceArmStorageContainer() *schema.Resource { Schema: map[string]*schema.Schema{ "name": &schema.Schema{ - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validateArmStorageContainerName, }, "resource_group_name": &schema.Schema{ Type: schema.TypeString, @@ -47,6 +49,24 @@ func resourceArmStorageContainer() *schema.Resource { } } +func validateArmStorageContainerName(v interface{}, k string) (ws []string, errors []error) { + value := v.(string) + if !regexp.MustCompile(`^[0-9a-z-]+$`).MatchString(value) { + errors = append(errors, fmt.Errorf( + "only lowercase alphanumeric characters and hyphens allowed in %q: %q", + k, value)) + } + if len(value) < 3 || len(value) > 63 { + errors = append(errors, fmt.Errorf( + "%q must be between 3 and 63 characters: %q", k, value)) + } + if regexp.MustCompile(`^-`).MatchString(value) { + errors = append(errors, fmt.Errorf( + "%q cannot begin with a hyphen: %q", k, value)) + } + return +} + func validateArmStorageContainerAccessType(v interface{}, k string) (ws []string, errors []error) { value := strings.ToLower(v.(string)) validTypes := map[string]struct{}{ diff --git a/builtin/providers/azurerm/resource_arm_storage_container_test.go b/builtin/providers/azurerm/resource_arm_storage_container_test.go index cd6dcb07d994..48cc57491dd7 100644 --- a/builtin/providers/azurerm/resource_arm_storage_container_test.go +++ b/builtin/providers/azurerm/resource_arm_storage_container_test.go @@ -120,6 +120,34 @@ func testCheckAzureRMStorageContainerDestroy(s *terraform.State) error { return nil } +func TestValidateArmStorageContainerName(t *testing.T) { + validNames := []string{ + "valid-name", + "valid02-name", + } + for _, v := range validNames { + _, errors := validateArmStorageContainerName(v, "name") + if len(errors) != 0 { + t.Fatalf("%q should be a valid Storage Container Name: %q", v, errors) + } + } + + invalidNames := []string{ + "InvalidName1", + "-invalidname1", + "invalid_name", + "invalid!", + "ww", + strings.Repeat("w", 65), + } + for _, v := range invalidNames { + _, errors := validateArmStorageContainerName(v, "name") + if len(errors) == 0 { + t.Fatalf("%q should be an invalid Storage Container Name", v) + } + } +} + var testAccAzureRMStorageContainer_basic = ` resource "azurerm_resource_group" "test" { name = "acctestrg-%d"