From 09bce57891980a749a0ccd42205414e097c3dd7e Mon Sep 17 00:00:00 2001 From: Miikka Koskinen Date: Tue, 6 Aug 2019 11:35:24 +0300 Subject: [PATCH 1/2] azurerm_container_group - allow empty log_type This is not documented anywhere, as far as I can tell, but if you leave out `logType` when creating the container, you get the behavior of both `ContainerInsights` and `ContainerInstanceLogs` at once. If `logType` is not set, metadata can't be set either. --- azurerm/resource_arm_container_group.go | 31 +++++++++++--------- website/docs/r/container_group.html.markdown | 2 +- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/azurerm/resource_arm_container_group.go b/azurerm/resource_arm_container_group.go index 366e207d9f61..c3b014fc95fd 100755 --- a/azurerm/resource_arm_container_group.go +++ b/azurerm/resource_arm_container_group.go @@ -382,7 +382,7 @@ func resourceArmContainerGroup() *schema.Resource { "log_type": { Type: schema.TypeString, - Required: true, + Optional: true, ForceNew: true, ValidateFunc: validation.StringInSlice([]string{ string(containerinstance.ContainerInsights), @@ -1241,23 +1241,26 @@ func expandContainerGroupDiagnostics(input []interface{}) *containerinstance.Con workspaceId := analyticsV["workspace_id"].(string) workspaceKey := analyticsV["workspace_key"].(string) - logType := containerinstance.LogAnalyticsLogType(analyticsV["log_type"].(string)) - metadataMap := analyticsV["metadata"].(map[string]interface{}) - metadata := make(map[string]*string) - for k, v := range metadataMap { - strValue := v.(string) - metadata[k] = &strValue + logAnalytics := containerinstance.LogAnalytics{ + WorkspaceID: utils.String(workspaceId), + WorkspaceKey: utils.String(workspaceKey), } - return &containerinstance.ContainerGroupDiagnostics{ - LogAnalytics: &containerinstance.LogAnalytics{ - WorkspaceID: utils.String(workspaceId), - WorkspaceKey: utils.String(workspaceKey), - LogType: logType, - Metadata: metadata, - }, + if logType := analyticsV["log_type"].(string); logType != "" { + logAnalytics.LogType = containerinstance.LogAnalyticsLogType(logType) + + metadataMap := analyticsV["metadata"].(map[string]interface{}) + metadata := make(map[string]*string) + for k, v := range metadataMap { + strValue := v.(string) + metadata[k] = &strValue + } + + logAnalytics.Metadata = metadata } + + return &containerinstance.ContainerGroupDiagnostics{LogAnalytics: &logAnalytics} } func flattenContainerGroupDiagnostics(d *schema.ResourceData, input *containerinstance.ContainerGroupDiagnostics) []interface{} { diff --git a/website/docs/r/container_group.html.markdown b/website/docs/r/container_group.html.markdown index cc6b95b91267..2a988a982ac9 100644 --- a/website/docs/r/container_group.html.markdown +++ b/website/docs/r/container_group.html.markdown @@ -149,7 +149,7 @@ A `image_registry_credential` block supports: A `log_analytics` block supports: -* `log_type` - (Required) The log type which should be used. Possible values are `ContainerInsights` and `ContainerInstanceLogs`. Changing this forces a new resource to be created. +* `log_type` - (Optional) The log type which should be used. Possible values are `ContainerInsights` and `ContainerInstanceLogs`. Changing this forces a new resource to be created. * `workspace_id` - (Required) The Workspace ID of the Log Analytics Workspace. Changing this forces a new resource to be created. From 2a88977127188708cb477b5175bc25fdbf532f2e Mon Sep 17 00:00:00 2001 From: Miikka Koskinen Date: Tue, 6 Aug 2019 16:05:53 +0300 Subject: [PATCH 2/2] azurem_container_group - add a test for unset log_type --- azurerm/resource_arm_container_group_test.go | 75 ++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/azurerm/resource_arm_container_group_test.go b/azurerm/resource_arm_container_group_test.go index 7569a0efa550..27b667c463c2 100755 --- a/azurerm/resource_arm_container_group_test.go +++ b/azurerm/resource_arm_container_group_test.go @@ -182,6 +182,38 @@ func TestAccAzureRMContainerGroup_imageRegistryCredentialsUpdate(t *testing.T) { }) } +func TestAccAzureRMContainerGroup_logTypeUnset(t *testing.T) { + resourceName := "azurerm_container_group.test" + ri := tf.AccRandTimeInt() + config := testAccAzureRMContainerGroup_logTypeUnset(ri, testLocation()) + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testCheckAzureRMContainerGroupDestroy, + Steps: []resource.TestStep{ + { + Config: config, + Check: resource.ComposeTestCheckFunc( + testCheckAzureRMContainerGroupExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "diagnostics.0.log_analytics.#", "1"), + resource.TestCheckResourceAttr(resourceName, "diagnostics.0.log_analytics.0.log_type", ""), + resource.TestCheckResourceAttr(resourceName, "diagnostics.0.log_analytics.0.metadata.%", "0"), + resource.TestCheckResourceAttrSet(resourceName, "diagnostics.0.log_analytics.0.workspace_id"), + resource.TestCheckResourceAttrSet(resourceName, "diagnostics.0.log_analytics.0.workspace_key"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{ + "diagnostics.0.log_analytics.0.workspace_key", + }, + }, + }, + }) +} + func TestAccAzureRMContainerGroup_linuxBasic(t *testing.T) { resourceName := "azurerm_container_group.test" ri := tf.AccRandTimeInt() @@ -721,6 +753,49 @@ resource "azurerm_container_group" "test" { `, ri, location, ri) } +func testAccAzureRMContainerGroup_logTypeUnset(ri int, location string) string { + return fmt.Sprintf(` +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_log_analytics_workspace" "test" { + name = "acctestLAW-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + sku = "PerGB2018" +} + +resource "azurerm_container_group" "test" { + name = "acctestcontainergroup-%d" + location = "${azurerm_resource_group.test.location}" + resource_group_name = "${azurerm_resource_group.test.name}" + ip_address_type = "public" + os_type = "Linux" + + container { + name = "hw" + image = "microsoft/aci-helloworld:latest" + cpu = "0.5" + memory = "0.5" + port = 80 + } + + diagnostics { + log_analytics { + workspace_id = "${azurerm_log_analytics_workspace.test.workspace_id}" + workspace_key = "${azurerm_log_analytics_workspace.test.primary_shared_key}" + } + } + + tags = { + environment = "Testing" + } +} +`, ri, location, ri, ri) +} + func testAccAzureRMContainerGroup_linuxBasicUpdated(ri int, location string) string { return fmt.Sprintf(` resource "azurerm_resource_group" "test" {