Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions examples/named_cluster/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,15 @@ resource "azurerm_user_assigned_identity" "test" {
resource_group_name = local.resource_group.name
}

# Just for demo purpose, not necessary to named cluster.
resource "azurerm_log_analytics_workspace" "main" {
location = local.resource_group.location
name = "prefix-workspace"
resource_group_name = local.resource_group.name
retention_in_days = 30
sku = "PerGB2018"
}

module "aks_cluster_name" {
source = "../.."

Expand All @@ -50,6 +59,10 @@ module "aks_cluster_name" {
identity_ids = [azurerm_user_assigned_identity.test.id]
identity_type = "UserAssigned"
log_analytics_workspace_enabled = true
log_analytics_workspace = {
id = azurerm_log_analytics_workspace.main.id
name = azurerm_log_analytics_workspace.main.name
}
maintenance_window = {
allowed = [
{
Expand Down
21 changes: 21 additions & 0 deletions locals.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
locals {
# Abstract the decision whether to create an Analytics Workspace or not.
create_analytics_solution = var.log_analytics_workspace_enabled && var.log_analytics_solution_id == null
create_analytics_workspace = var.log_analytics_workspace_enabled && var.log_analytics_workspace == null
# Abstract the decision whether to use an Analytics Workspace supplied via vars, provision one ourselves or leave it null.
# This guarantees that local.log_analytics_workspace will contain a valid `id` and `name` IFF log_analytics_workspace_enabled
# is set to `true`.
log_analytics_workspace = var.log_analytics_workspace_enabled ? (
# The Log Analytics Workspace should be enabled:
var.log_analytics_workspace == null ? {
# `log_analytics_workspace_enabled` is `true` but `log_analytics_workspace` was not supplied.
# Create an `azurerm_log_analytics_workspace` resource and use that.
id = local.azurerm_log_analytics_workspace_id
name = local.azurerm_log_analytics_workspace_name
} : {
# `log_analytics_workspace` is supplied. Let's use that.
id = var.log_analytics_workspace.id
name = var.log_analytics_workspace.name
}
) : null # Finally, the Log Analytics Workspace should be disabled.
}
29 changes: 5 additions & 24 deletions main.tf
Original file line number Diff line number Diff line change
@@ -1,27 +1,3 @@
locals {

# Abstract the decision whether to create an Analytics Workspace or not.
create_analytics_solution = var.log_analytics_workspace_enabled && var.log_analytics_solution_id == null
create_analytics_workspace = var.log_analytics_workspace_enabled && var.log_analytics_workspace == null
# Abstract the decision whether to use an Analytics Workspace supplied via vars, provision one ourselves or leave it null.
# This guarantees that local.log_analytics_workspace will contain a valid `id` and `name` IFF log_analytics_workspace_enabled
# is set to `true`.
log_analytics_workspace = var.log_analytics_workspace_enabled ? (
# The Log Analytics Workspace should be enabled:
var.log_analytics_workspace == null ? {
# `log_analytics_workspace_enabled` is `true` but `log_analytics_workspace` was not supplied.
# Create an `azurerm_log_analytics_workspace` resource and use that.
id = azurerm_log_analytics_workspace.main[0].id
name = azurerm_log_analytics_workspace.main[0].name
} : {
# `log_analytics_workspace` is supplied. Let's use that.
id = var.log_analytics_workspace.id
name = var.log_analytics_workspace.name
}
) : null # Finally, the Log Analytics Workspace should be disabled.

}

data "azurerm_resource_group" "main" {
name = var.resource_group_name
}
Expand Down Expand Up @@ -255,6 +231,11 @@ resource "azurerm_log_analytics_workspace" "main" {
tags = var.tags
}

locals {
azurerm_log_analytics_workspace_id = try(azurerm_log_analytics_workspace.main[0].id, null)
azurerm_log_analytics_workspace_name = try(azurerm_log_analytics_workspace.main[0].name, null)
}

resource "azurerm_log_analytics_solution" "main" {
count = local.create_analytics_solution ? 1 : 0

Expand Down
113 changes: 113 additions & 0 deletions test/unit/unit_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package unit

import (
"testing"

test_helper "github.com/Azure/terraform-module-test-helper"
"github.com/gruntwork-io/terratest/modules/terraform"
"github.com/stretchr/testify/assert"
)

func TestDisableLogAnalyticsWorkspaceShouldNotCreateWorkspaceNorSolution(t *testing.T) {
vars := dummyRequiredVariables()
vars["log_analytics_workspace_enabled"] = false
test_helper.RunE2ETest(t, "../../", "unit-test-fixture", terraform.Options{
Upgrade: false,
Vars: vars,
}, func(t *testing.T, output test_helper.TerraformOutput) {
createSolution, ok := output["create_analytics_solution"].(bool)
assert.True(t, ok)
assert.False(t, createSolution)
createWorkspace, ok := output["create_analytics_workspace"].(bool)
assert.True(t, ok)
assert.False(t, createWorkspace)
_, ok = output["log_analytics_workspace"]
assert.False(t, ok)
})
}

func TestLogAnalyticsWorkspaceEnabledButWorkspaceIdProvidedShouldNotCreateWorkspace(t *testing.T) {
vars := dummyRequiredVariables()
dummyWorkspace := struct {
id string
name string
}{
id: "dummyId",
name: "dummyName",
}
vars["log_analytics_workspace_enabled"] = true
vars["log_analytics_workspace"] = map[string]interface{}{
"id": dummyWorkspace.id,
"name": dummyWorkspace.name,
}
test_helper.RunE2ETest(t, "../../", "unit-test-fixture", terraform.Options{
Upgrade: false,
Vars: vars,
}, func(t *testing.T, output test_helper.TerraformOutput) {
createWorkspace, ok := output["create_analytics_workspace"].(bool)
assert.True(t, ok)
assert.False(t, createWorkspace)
workspace, ok := output["log_analytics_workspace"].(map[string]interface{})
assert.True(t, ok)
assert.Equal(t, dummyWorkspace.id, workspace["id"])
assert.Equal(t, dummyWorkspace.name, workspace["name"])
})
}

func TestLogAnalyticsWorkspaceEnabledNoWorkspaceProvidedShouldCreateWorkspace(t *testing.T) {
vars := dummyRequiredVariables()
expected := struct {
id string
name string
}{
id: "azurerm_log_analytics_workspace_id",
name: "azurerm_log_analytics_workspace_name",
}
vars["log_analytics_workspace_enabled"] = true
test_helper.RunE2ETest(t, "../../", "unit-test-fixture", terraform.Options{
Upgrade: false,
Vars: vars,
}, func(t *testing.T, output test_helper.TerraformOutput) {
createWorkspace, ok := output["create_analytics_workspace"].(bool)
assert.True(t, ok)
assert.True(t, createWorkspace)
workspace, ok := output["log_analytics_workspace"].(map[string]interface{})
assert.True(t, ok)
assert.Equal(t, expected.id, workspace["id"])
assert.Equal(t, expected.name, workspace["name"])
})
}

func TestLogAnalyticsWorkspaceEnabledNoSolutionProvidedShouldCreateSolution(t *testing.T) {
vars := dummyRequiredVariables()
vars["log_analytics_workspace_enabled"] = true
test_helper.RunE2ETest(t, "../../", "unit-test-fixture", terraform.Options{
Upgrade: false,
Vars: vars,
}, func(t *testing.T, output test_helper.TerraformOutput) {
createSolution, ok := output["create_analytics_solution"].(bool)
assert.True(t, ok)
assert.True(t, createSolution)
})
}

func TestLogAnalyticsWorkspaceEnabledSolutionProvidedShouldNotCreateSolution(t *testing.T) {
vars := dummyRequiredVariables()
vars["log_analytics_workspace_enabled"] = true
vars["log_analytics_solution_id"] = "dummySolutionId"
test_helper.RunE2ETest(t, "../../", "unit-test-fixture", terraform.Options{
Upgrade: false,
Vars: vars,
}, func(t *testing.T, output test_helper.TerraformOutput) {
createSolution, ok := output["create_analytics_solution"].(bool)
assert.True(t, ok)
assert.False(t, createSolution)
})
}

func dummyRequiredVariables() map[string]interface{} {
return map[string]interface{}{
"prefix": "foo",
"resource_group_name": "bar",
}
}
4 changes: 4 additions & 0 deletions unit-test-fixture/alt_locals.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
locals {
azurerm_log_analytics_workspace_id = "azurerm_log_analytics_workspace_id"
azurerm_log_analytics_workspace_name = "azurerm_log_analytics_workspace_name"
}
1 change: 1 addition & 0 deletions unit-test-fixture/locals.tf
11 changes: 11 additions & 0 deletions unit-test-fixture/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
output "create_analytics_solution" {
value = local.create_analytics_solution
}

output "create_analytics_workspace" {
value = local.create_analytics_workspace
}

output "log_analytics_workspace" {
value = local.log_analytics_workspace
}
1 change: 1 addition & 0 deletions unit-test-fixture/variables.tf