From 9abf68434478b17e1b70389761539ecf1dc28db0 Mon Sep 17 00:00:00 2001 From: Maxime Legault-Venne Date: Sat, 5 Oct 2019 03:05:31 -0400 Subject: [PATCH] Make kubernetes log analytics workspace optional (#4513) This fixes #3239 --- azurerm/resource_arm_kubernetes_cluster.go | 4 +- .../resource_arm_kubernetes_cluster_test.go | 128 ++++++++++++++++++ .../docs/r/kubernetes_cluster.html.markdown | 2 +- 3 files changed, 131 insertions(+), 3 deletions(-) diff --git a/azurerm/resource_arm_kubernetes_cluster.go b/azurerm/resource_arm_kubernetes_cluster.go index 9759c8f16e84..cfc1cb15e8cc 100644 --- a/azurerm/resource_arm_kubernetes_cluster.go +++ b/azurerm/resource_arm_kubernetes_cluster.go @@ -276,7 +276,7 @@ func resourceArmKubernetesCluster() *schema.Resource { }, "log_analytics_workspace_id": { Type: schema.TypeString, - Required: true, + Optional: true, ValidateFunc: azure.ValidateResourceID, }, }, @@ -1006,7 +1006,7 @@ func expandKubernetesClusterAddonProfiles(d *schema.ResourceData) map[string]*co config := make(map[string]*string) enabled := value["enabled"].(bool) - if workspaceId, ok := value["log_analytics_workspace_id"]; ok { + if workspaceId, ok := value["log_analytics_workspace_id"]; ok && workspaceId != "" { config["logAnalyticsWorkspaceResourceID"] = utils.String(workspaceId.(string)) } diff --git a/azurerm/resource_arm_kubernetes_cluster_test.go b/azurerm/resource_arm_kubernetes_cluster_test.go index 3ee78bdd04cb..51d2102a794d 100644 --- a/azurerm/resource_arm_kubernetes_cluster_test.go +++ b/azurerm/resource_arm_kubernetes_cluster_test.go @@ -389,6 +389,58 @@ func TestAccAzureRMKubernetesCluster_addonProfileOMS(t *testing.T) { }) } +func TestAccAzureRMKubernetesCluster_addonProfileOMSToggle(t *testing.T) { + resourceName := "azurerm_kubernetes_cluster.test" + ri := tf.AccRandTimeInt() + clientId := os.Getenv("ARM_CLIENT_ID") + clientSecret := os.Getenv("ARM_CLIENT_SECRET") + location := testLocation() + enablingConfig := testAccAzureRMKubernetesCluster_addonProfileOMS(ri, clientId, clientSecret, location) + disablingConfig := testAccAzureRMKubernetesCluster_addonProfileOMSDisabled(ri, clientId, clientSecret, location) + scaleDownConfig := testAccAzureRMKubernetesCluster_addonProfileOMSScaleWithoutBlock(ri, clientId, clientSecret, location) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckAzureRMKubernetesClusterDestroy, + Steps: []resource.TestStep{ + { + Config: enablingConfig, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMKubernetesClusterExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.http_application_routing.#", "0"), + resource.TestCheckResourceAttr(resourceName, "agent_pool_profile.0.count", "1"), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.oms_agent.#", "1"), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.oms_agent.0.enabled", "true"), + resource.TestCheckResourceAttrSet(resourceName, "addon_profile.0.oms_agent.0.log_analytics_workspace_id"), + ), + }, + { + Config: disablingConfig, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMKubernetesClusterExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.http_application_routing.#", "0"), + resource.TestCheckResourceAttr(resourceName, "agent_pool_profile.0.count", "1"), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.oms_agent.#", "1"), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.oms_agent.0.enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.oms_agent.0.log_analytics_workspace_id", ""), + ), + }, + { + Config: scaleDownConfig, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMKubernetesClusterExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.http_application_routing.#", "0"), + resource.TestCheckResourceAttr(resourceName, "agent_pool_profile.0.count", "2"), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.oms_agent.#", "1"), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.oms_agent.0.enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "addon_profile.0.oms_agent.0.log_analytics_workspace_id", ""), + ), + }, + }, + }) +} + func TestAccAzureRMKubernetesCluster_addonProfileRouting(t *testing.T) { resourceName := "azurerm_kubernetes_cluster.test" ri := tf.AccRandTimeInt() @@ -1450,6 +1502,82 @@ resource "azurerm_kubernetes_cluster" "test" { `, rInt, location, rInt, rInt, rInt, rInt, clientId, clientSecret) } +func testAccAzureRMKubernetesCluster_addonProfileOMSDisabled(rInt int, clientId string, clientSecret string, location string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_kubernetes_cluster" "test" { + name = "acctestaks%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + dns_prefix = "acctestaks%d" + + linux_profile { + admin_username = "acctestuser%d" + + ssh_key { + key_data = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqaZoyiz1qbdOQ8xEf6uEu1cCwYowo5FHtsBhqLoDnnp7KUTEBN+L2NxRIfQ781rxV6Iq5jSav6b2Q8z5KiseOlvKA/RF2wqU0UPYqQviQhLmW6THTpmrv/YkUCuzxDpsH7DUDhZcwySLKVVe0Qm3+5N2Ta6UYH3lsDf9R9wTP2K/+vAnflKebuypNlmocIvakFWoZda18FOmsOoIVXQ8HWFNCuw9ZCunMSN62QGamCe3dL5cXlkgHYv7ekJE15IA9aOJcM7e90oeTqo+7HTcWfdu0qQqPWY5ujyMw/llas8tsXY85LFqRnr3gJ02bAscjc477+X+j/gkpFoN1QEmt terraform@demo.tld" + } + } + + agent_pool_profile { + name = "default" + count = "1" + vm_size = "Standard_DS2_v2" + } + + service_principal { + client_id = "%s" + client_secret = "%s" + } + + addon_profile { + oms_agent { + enabled = false + } + } +} +`, rInt, location, rInt, rInt, rInt, clientId, clientSecret) +} + +func testAccAzureRMKubernetesCluster_addonProfileOMSScaleWithoutBlock(rInt int, clientId string, clientSecret string, location string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_kubernetes_cluster" "test" { + name = "acctestaks%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + dns_prefix = "acctestaks%d" + + linux_profile { + admin_username = "acctestuser%d" + + ssh_key { + key_data = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqaZoyiz1qbdOQ8xEf6uEu1cCwYowo5FHtsBhqLoDnnp7KUTEBN+L2NxRIfQ781rxV6Iq5jSav6b2Q8z5KiseOlvKA/RF2wqU0UPYqQviQhLmW6THTpmrv/YkUCuzxDpsH7DUDhZcwySLKVVe0Qm3+5N2Ta6UYH3lsDf9R9wTP2K/+vAnflKebuypNlmocIvakFWoZda18FOmsOoIVXQ8HWFNCuw9ZCunMSN62QGamCe3dL5cXlkgHYv7ekJE15IA9aOJcM7e90oeTqo+7HTcWfdu0qQqPWY5ujyMw/llas8tsXY85LFqRnr3gJ02bAscjc477+X+j/gkpFoN1QEmt terraform@demo.tld" + } + } + + agent_pool_profile { + name = "default" + count = "2" + vm_size = "Standard_DS2_v2" + } + + service_principal { + client_id = "%s" + client_secret = "%s" + } +} +`, rInt, location, rInt, rInt, rInt, clientId, clientSecret) +} + func testAccAzureRMKubernetesCluster_addonProfileRouting(rInt int, clientId string, clientSecret string, location string) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" { diff --git a/website/docs/r/kubernetes_cluster.html.markdown b/website/docs/r/kubernetes_cluster.html.markdown index e70f4ae123bc..e0554fb39352 100644 --- a/website/docs/r/kubernetes_cluster.html.markdown +++ b/website/docs/r/kubernetes_cluster.html.markdown @@ -241,7 +241,7 @@ A `oms_agent` block supports the following: * `enabled` - (Required) Is the OMS Agent Enabled? -* `log_analytics_workspace_id` - (Required) The ID of the Log Analytics Workspace which the OMS Agent should send data to. +* `log_analytics_workspace_id` - (Optional) The ID of the Log Analytics Workspace which the OMS Agent should send data to. Must be present if `enabled` is `true`. ---