diff --git a/builtin/providers/azurerm/resource_arm_availability_set.go b/builtin/providers/azurerm/resource_arm_availability_set.go index 3e5f57d90..a51ff0446 100644 --- a/builtin/providers/azurerm/resource_arm_availability_set.go +++ b/builtin/providers/azurerm/resource_arm_availability_set.go @@ -4,6 +4,7 @@ import ( "fmt" "log" "net/http" + "strings" "github.com/Azure/azure-sdk-for-go/arm/compute" "github.com/hashicorp/terraform/helper/schema" @@ -65,6 +66,13 @@ func resourceArmAvailabilitySet() *schema.Resource { }, }, + "managed": { + Type: schema.TypeBool, + Optional: true, + Default: false, + ForceNew: true, + }, + "tags": tagsSchema(), }, } @@ -82,6 +90,7 @@ func resourceArmAvailabilitySetCreate(d *schema.ResourceData, meta interface{}) updateDomainCount := d.Get("platform_update_domain_count").(int) faultDomainCount := d.Get("platform_fault_domain_count").(int) tags := d.Get("tags").(map[string]interface{}) + managed := d.Get("managed").(bool) availSet := compute.AvailabilitySet{ Name: &name, @@ -93,6 +102,13 @@ func resourceArmAvailabilitySetCreate(d *schema.ResourceData, meta interface{}) Tags: expandTags(tags), } + if managed == true { + n := "Aligned" + availSet.Sku = &compute.Sku{ + Name: &n, + } + } + resp, err := availSetClient.CreateOrUpdate(resGroup, name, availSet) if err != nil { return err @@ -129,6 +145,10 @@ func resourceArmAvailabilitySetRead(d *schema.ResourceData, meta interface{}) er d.Set("name", resp.Name) d.Set("location", resp.Location) + if resp.Sku != nil && resp.Sku.Name != nil { + d.Set("managed", strings.EqualFold(*resp.Sku.Name, "Aligned")) + } + flattenAndSetTags(d, resp.Tags) return nil diff --git a/builtin/providers/azurerm/resource_arm_availability_set_test.go b/builtin/providers/azurerm/resource_arm_availability_set_test.go index 257357956..5e1b77912 100644 --- a/builtin/providers/azurerm/resource_arm_availability_set_test.go +++ b/builtin/providers/azurerm/resource_arm_availability_set_test.go @@ -122,6 +122,27 @@ func TestAccAzureRMAvailabilitySet_withDomainCounts(t *testing.T) { }) } +func TestAccAzureRMAvailabilitySet_managed(t *testing.T) { + ri := acctest.RandInt() + config := fmt.Sprintf(testAccAzureRMVAvailabilitySet_managed, ri, ri) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckAzureRMAvailabilitySetDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: config, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMAvailabilitySetExists("azurerm_availability_set.test"), + resource.TestCheckResourceAttr( + "azurerm_availability_set.test", "managed", "true"), + ), + }, + }, + }) +} + func testCheckAzureRMAvailabilitySetExists(name string) resource.TestCheckFunc { return func(s *terraform.State) error { // Ensure we have enough information in state to look up in API @@ -224,8 +245,8 @@ resource "azurerm_availability_set" "test" { resource_group_name = "${azurerm_resource_group.test.name}" tags { - environment = "Production" - cost_center = "MSFT" + environment = "Production" + cost_center = "MSFT" } } ` @@ -241,7 +262,7 @@ resource "azurerm_availability_set" "test" { resource_group_name = "${azurerm_resource_group.test.name}" tags { - environment = "staging" + environment = "staging" } } ` @@ -259,3 +280,18 @@ resource "azurerm_availability_set" "test" { platform_fault_domain_count = 1 } ` + +var testAccAzureRMVAvailabilitySet_managed = ` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "West US" +} +resource "azurerm_availability_set" "test" { + name = "acctestavset-%d" + location = "West US" + resource_group_name = "${azurerm_resource_group.test.name}" + platform_update_domain_count = 10 + platform_fault_domain_count = 1 + managed = true +} +`