diff --git a/azurerm/internal/services/kusto/kusto_cluster_resource.go b/azurerm/internal/services/kusto/kusto_cluster_resource.go index bcb69cdb468c..1c09a821c298 100644 --- a/azurerm/internal/services/kusto/kusto_cluster_resource.go +++ b/azurerm/internal/services/kusto/kusto_cluster_resource.go @@ -93,6 +93,8 @@ func resourceArmKustoCluster() *schema.Resource { }, }, + "zones": azure.SchemaZones(), + "enable_disk_encryption": { Type: schema.TypeBool, Optional: true, @@ -153,6 +155,8 @@ func resourceArmKustoClusterCreateUpdate(d *schema.ResourceData, meta interface{ return err } + zones := azure.ExpandZones(d.Get("zones").([]interface{})) + clusterProperties := kusto.ClusterProperties{ EnableDiskEncryption: utils.Bool(d.Get("enable_disk_encryption").(bool)), EnableStreamingIngest: utils.Bool(d.Get("enable_streaming_ingest").(bool)), @@ -165,6 +169,7 @@ func resourceArmKustoClusterCreateUpdate(d *schema.ResourceData, meta interface{ Name: &name, Location: &location, Sku: sku, + Zones: zones, ClusterProperties: &clusterProperties, Tags: tags.Expand(t), } @@ -223,6 +228,10 @@ func resourceArmKustoClusterRead(d *schema.ResourceData, meta interface{}) error return fmt.Errorf("Error setting `sku`: %+v", err) } + if err := d.Set("zones", azure.FlattenZones(clusterResponse.Zones)); err != nil { + return fmt.Errorf("Error setting `zones`: %+v", err) + } + if clusterProperties := clusterResponse.ClusterProperties; clusterProperties != nil { d.Set("enable_disk_encryption", clusterProperties.EnableDiskEncryption) d.Set("enable_streaming_ingest", clusterProperties.EnableStreamingIngest) diff --git a/azurerm/internal/services/kusto/tests/kusto_cluster_resource_test.go b/azurerm/internal/services/kusto/tests/kusto_cluster_resource_test.go index ff6009d0ece4..5f9205b94e8d 100644 --- a/azurerm/internal/services/kusto/tests/kusto_cluster_resource_test.go +++ b/azurerm/internal/services/kusto/tests/kusto_cluster_resource_test.go @@ -129,6 +129,26 @@ func TestAccAzureRMKustoCluster_sku(t *testing.T) { }) } +func TestAccAzureRMKustoCluster_zones(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_kusto_cluster", "test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acceptance.PreCheck(t) }, + Providers: acceptance.SupportedProviders, + CheckDestroy: testCheckAzureRMKustoClusterDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAzureRMKustoCluster_withZones(data), + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMKustoClusterExists(data.ResourceName), + resource.TestCheckResourceAttr(data.ResourceName, "zones.#", "1"), + resource.TestCheckResourceAttr(data.ResourceName, "zones.0", "1"), + ), + }, + }, + }) +} + func testAccAzureRMKustoCluster_basic(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { @@ -234,6 +254,32 @@ resource "azurerm_kusto_cluster" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomString) } +func testAccAzureRMKustoCluster_withZones(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_kusto_cluster" "test" { + name = "acctestkc%s" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + + sku { + name = "Dev(No SLA)_Standard_D11_v2" + capacity = 1 + } + + zones = ["1"] +} +`, data.RandomInteger, data.Locations.Primary, data.RandomString) +} + func testAccAzureRMKustoCluster_update(data acceptance.TestData) string { return fmt.Sprintf(` provider "azurerm" { diff --git a/website/docs/r/kusto_cluster.html.markdown b/website/docs/r/kusto_cluster.html.markdown index 91a0b95c8701..11d6bed499da 100644 --- a/website/docs/r/kusto_cluster.html.markdown +++ b/website/docs/r/kusto_cluster.html.markdown @@ -46,6 +46,8 @@ The following arguments are supported: * `sku` - (Required) A `sku` block as defined below. +* `zones` - (Optional) A list of Availability Zones in which the cluster instances should be created in. Changing this forces a new resource to be created. + * `enable_disk_encryption` - (Optional) Specifies if the cluster's disks are encrypted. * `enable_streaming_ingest` - (Optional) Specifies if the streaming ingest is enabled.