Skip to content

Commit 3bd6030

Browse files
authored
feat: updated the modules used by the instances DA. When upgrading from a previous version, the logs will show several messages about resource addresses being moved. This is expected and can be ignored.<br>- The Activity Tracker / COS service to service auth policy is now scoped to the exact COS bucket. When updating from an older version you will see the destroy and re-create of the auth policy, however the new policy will be created before the old one is deleted so there will be no disruption to every day services (#350)
1 parent fddafa9 commit 3bd6030

File tree

8 files changed

+141
-108
lines changed

8 files changed

+141
-108
lines changed

solutions/instances/main.tf

Lines changed: 55 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ locals {
6464
rules = [{
6565
action = "send"
6666
targets = [{
67-
id = module.observability_instance.metrics_router_targets[local.metric_router_target_name].id
67+
id = module.metrics_router.metrics_router_targets[local.metric_router_target_name].id
6868
}]
6969
inclusion_filters = []
7070
}]
@@ -127,13 +127,13 @@ locals {
127127
at_cos_route = var.enable_at_event_routing_to_cos_bucket ? [{
128128
route_name = local.at_cos_route_name
129129
locations = ["*", "global"]
130-
target_ids = [module.observability_instance.activity_tracker_targets[local.cos_target_name].id]
130+
target_ids = [module.activity_tracker.activity_tracker_targets[local.cos_target_name].id]
131131
}] : []
132132

133133
at_cloud_logs_route = var.enable_at_event_routing_to_cloud_logs ? [{
134134
route_name = local.at_cloud_logs_route_name
135135
locations = ["*", "global"]
136-
target_ids = [module.observability_instance.activity_tracker_targets[local.cloud_logs_target_name].id]
136+
target_ids = [module.activity_tracker.activity_tracker_targets[local.cloud_logs_target_name].id]
137137
}] : []
138138

139139
apply_auth_policy = (var.skip_cos_kms_auth_policy || (length(coalesce(local.buckets_config, [])) == 0)) ? 0 : 1
@@ -249,31 +249,33 @@ module "cloud_monitoring_crn_parser" {
249249
crn = var.existing_cloud_monitoring_crn
250250
}
251251

252-
module "observability_instance" {
253-
depends_on = [time_sleep.wait_for_atracker_cos_authorization_policy]
254-
source = "terraform-ibm-modules/observability-instances/ibm"
255-
version = "3.5.2"
252+
module "cloud_monitoring" {
253+
count = var.cloud_monitoring_provision ? 1 : 0
254+
source = "terraform-ibm-modules/cloud-monitoring/ibm"
255+
version = "1.2.1"
256+
region = var.region
257+
resource_group_id = module.resource_group.resource_group_id
258+
instance_name = local.cloud_monitoring_instance_name
259+
plan = var.cloud_monitoring_plan
260+
resource_tags = var.cloud_monitoring_tags
261+
access_tags = [] # TODO: Add support
262+
enable_platform_metrics = var.enable_platform_metrics
263+
service_endpoints = "public-and-private"
264+
}
265+
266+
module "cloud_logs" {
267+
count = var.cloud_logs_provision ? 1 : 0
268+
source = "terraform-ibm-modules/cloud-logs/ibm"
269+
version = "1.3.0"
256270
region = var.region
257271
resource_group_id = module.resource_group.resource_group_id
258-
259-
# IBM Cloud Monitoring
260-
cloud_monitoring_provision = var.cloud_monitoring_provision
261-
cloud_monitoring_instance_name = local.cloud_monitoring_instance_name
262-
cloud_monitoring_plan = var.cloud_monitoring_plan
263-
cloud_monitoring_tags = var.cloud_monitoring_tags
264-
cloud_monitoring_service_endpoints = "public-and-private"
265-
enable_platform_metrics = var.enable_platform_metrics
266-
267-
# IBM Cloud Logs
268-
cloud_logs_provision = var.cloud_logs_provision
269-
cloud_logs_instance_name = local.cloud_logs_instance_name
270-
cloud_logs_plan = "standard"
271-
cloud_logs_access_tags = var.cloud_logs_access_tags
272-
cloud_logs_tags = var.cloud_logs_tags
273-
cloud_logs_service_endpoints = "public-and-private"
274-
cloud_logs_retention_period = var.cloud_logs_retention_period
275-
cloud_logs_policies = var.cloud_logs_policies
276-
cloud_logs_data_storage = var.cloud_logs_provision ? {
272+
instance_name = local.cloud_logs_instance_name
273+
plan = "standard"
274+
resource_tags = var.cloud_logs_tags
275+
access_tags = var.cloud_logs_access_tags
276+
retention_period = var.cloud_logs_retention_period
277+
service_endpoints = "public-and-private"
278+
data_storage = var.cloud_logs_provision ? {
277279
logs_data = {
278280
enabled = true
279281
bucket_crn = local.cloud_logs_data_bucket_crn
@@ -297,17 +299,37 @@ module "observability_instance" {
297299
skip_cos_auth_policy = nonsensitive(var.ibmcloud_cos_api_key) != null ? true : var.skip_cloud_logs_cos_auth_policy
298300
}
299301
} : null
300-
cloud_logs_existing_en_instances = [for index, _ in local.cloud_logs_existing_en_instances : {
302+
existing_event_notifications_instances = [for index, _ in local.cloud_logs_existing_en_instances : {
301303
en_instance_id = module.en_crn_parser[index]["service_instance"]
302304
en_region = module.en_crn_parser[index]["region"]
303305
en_integration_name = try("${local.prefix}-${local.cloud_logs_existing_en_instances[index]["integration_name"]}", local.cloud_logs_existing_en_instances[index]["integration_name"])
304306
skip_en_auth_policy = local.cloud_logs_existing_en_instances[index]["skip_en_auth_policy"]
305307
}]
306-
skip_logs_routing_auth_policy = var.skip_logs_routing_auth_policy
307308
logs_routing_tenant_regions = var.logs_routing_tenant_regions
309+
skip_logs_routing_auth_policy = var.skip_logs_routing_auth_policy
310+
policies = var.cloud_logs_policies
311+
}
312+
313+
module "metrics_router" {
314+
source = "terraform-ibm-modules/cloud-monitoring/ibm//modules/metrics_routing"
315+
version = "1.2.1"
316+
metrics_router_targets = var.enable_metrics_routing_to_cloud_monitoring ? [
317+
{
318+
destination_crn = var.cloud_monitoring_provision ? module.cloud_monitoring[0].crn : var.existing_cloud_monitoring_crn
319+
target_name = local.metric_router_target_name
320+
target_region = var.cloud_monitoring_provision ? var.region : module.cloud_monitoring_crn_parser[0].region
321+
skip_metrics_router_auth_policy = false
322+
}
323+
] : []
324+
metrics_router_routes = var.enable_metrics_routing_to_cloud_monitoring ? (length(var.metrics_router_routes) != 0 ? var.metrics_router_routes : local.default_metrics_router_route) : []
325+
metrics_router_settings = var.enable_metrics_routing_to_cloud_monitoring ? (var.metrics_router_settings != null ? var.metrics_router_settings : local.metrics_router_settings) : null
326+
}
308327

309-
# Activity Tracker
310-
at_cos_targets = var.enable_at_event_routing_to_cos_bucket ? [
328+
module "activity_tracker" {
329+
depends_on = [time_sleep.wait_for_atracker_cos_authorization_policy]
330+
source = "terraform-ibm-modules/activity-tracker/ibm"
331+
version = "1.0.0"
332+
cos_targets = var.enable_at_event_routing_to_cos_bucket ? [
311333
{
312334
bucket_name = local.cos_target_bucket_name
313335
endpoint = local.cos_target_bucket_endpoint
@@ -318,32 +340,14 @@ module "observability_instance" {
318340
service_to_service_enabled = true
319341
}
320342
] : []
321-
322-
at_cloud_logs_targets = var.enable_at_event_routing_to_cloud_logs ? [
343+
cloud_logs_targets = var.enable_at_event_routing_to_cloud_logs ? [
323344
{
324-
instance_id = module.observability_instance.cloud_logs_crn
345+
instance_id = module.cloud_logs[0].crn
325346
target_region = var.region
326347
target_name = local.cloud_logs_target_name
327348
}
328349
] : []
329-
330-
# Routes
331350
activity_tracker_routes = local.at_routes
332-
333-
# IBM Cloud Metrics Routing
334-
335-
metrics_router_targets = var.enable_metrics_routing_to_cloud_monitoring ? [
336-
{
337-
destination_crn = var.cloud_monitoring_provision ? module.observability_instance.cloud_monitoring_crn : var.existing_cloud_monitoring_crn
338-
target_name = local.metric_router_target_name
339-
target_region = var.cloud_monitoring_provision ? var.region : module.cloud_monitoring_crn_parser[0].region
340-
skip_mrouter_sysdig_iam_auth_policy = false
341-
}
342-
] : []
343-
344-
metrics_router_routes = var.enable_metrics_routing_to_cloud_monitoring ? (length(var.metrics_router_routes) != 0 ? var.metrics_router_routes : local.default_metrics_router_route) : []
345-
346-
metrics_router_settings = var.enable_metrics_routing_to_cloud_monitoring ? (var.metrics_router_settings != null ? var.metrics_router_settings : local.metrics_router_settings) : null
347351
}
348352

349353
resource "time_sleep" "wait_for_atracker_cos_authorization_policy" {
@@ -510,7 +514,7 @@ module "cos_bucket" {
510514
usage_metrics_enabled = true
511515
request_metrics_enabled = true
512516
# if DA is creating monitoring instance, use that. If its passing existing instance, use that. If neither, pass null, meaning metrics are sent to the instance associated to the container's location unless otherwise specified in the Metrics Router service configuration.
513-
metrics_monitoring_crn = var.cloud_monitoring_provision ? module.observability_instance.cloud_monitoring_crn : var.existing_cloud_monitoring_crn != null ? var.existing_cloud_monitoring_crn : null
517+
metrics_monitoring_crn = var.cloud_monitoring_provision ? module.cloud_monitoring[0].crn : var.existing_cloud_monitoring_crn != null ? var.existing_cloud_monitoring_crn : null
514518
}
515519
activity_tracking = {
516520
read_data_events = true

solutions/instances/moved.tf

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
moved {
2+
from = module.observability_instance.module.metric_routing
3+
to = module.metrics_router
4+
}
5+
6+
moved {
7+
from = module.observability_instance.module.cloud_logs[0]
8+
to = module.cloud_logs[0]
9+
}
10+
11+
moved {
12+
from = module.observability_instance.module.cloud_monitoring[0].ibm_resource_instance.cloud_monitoring[0]
13+
to = module.cloud_monitoring[0].ibm_resource_instance.cloud_monitoring
14+
}
15+
16+
moved {
17+
from = module.observability_instance.module.cloud_monitoring[0].ibm_resource_key.resource_key[0]
18+
to = module.cloud_monitoring[0].ibm_resource_key.resource_key
19+
}
20+
21+
moved {
22+
from = module.observability_instance.module.cloud_monitoring[0].ibm_resource_tag.cloud_monitoring_tag
23+
to = module.cloud_monitoring[0].ibm_resource_tag.cloud_monitoring_tag
24+
}
25+
26+
moved {
27+
from = module.observability_instance.module.activity_tracker
28+
to = module.activity_tracker
29+
}

solutions/instances/outputs.tf

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,59 +15,59 @@ output "resource_group_id" {
1515

1616
## Cloud logs
1717
output "cloud_logs_crn" {
18-
value = var.cloud_logs_provision ? module.observability_instance.cloud_logs_crn : null
18+
value = var.cloud_logs_provision ? module.cloud_logs[0].crn : null
1919
description = "The id of the provisioned Cloud Logs instance."
2020
}
2121

2222
output "cloud_logs_guid" {
23-
value = var.cloud_logs_provision ? module.observability_instance.cloud_logs_guid : null
23+
value = var.cloud_logs_provision ? module.cloud_logs[0].guid : null
2424
description = "The guid of the provisioned Cloud Logs instance."
2525
}
2626

2727
output "cloud_logs_name" {
28-
value = var.cloud_logs_provision ? module.observability_instance.cloud_logs_name : null
28+
value = var.cloud_logs_provision ? module.cloud_logs[0].name : null
2929
description = "The name of the provisioned Cloud Logs instance."
3030
}
3131

3232
output "cloud_logs_resource_group_id" {
33-
value = var.cloud_logs_provision ? module.observability_instance.cloud_logs_resource_group_id : null
33+
value = var.cloud_logs_provision ? module.cloud_logs[0].resource_group_id : null
3434
description = "The resource group where Cloud Logs instance resides."
3535
}
3636

3737
output "cloud_logs_ingress_endpoint" {
38-
value = var.cloud_logs_provision ? module.observability_instance.cloud_logs_ingress_endpoint : null
38+
value = var.cloud_logs_provision ? module.cloud_logs[0].ingress_endpoint : null
3939
description = "The public ingress endpoint of the provisioned Cloud Logs instance."
4040
}
4141

4242
output "cloud_logs_ingress_private_endpoint" {
43-
value = var.cloud_logs_provision ? module.observability_instance.cloud_logs_ingress_private_endpoint : null
43+
value = var.cloud_logs_provision ? module.cloud_logs[0].ingress_private_endpoint : null
4444
description = "The private ingress endpoint of the provisioned Cloud Logs instance."
4545
}
4646

4747
## Cloud logs policies
4848
output "logs_policies_details" {
49-
value = length(var.cloud_logs_policies) > 0 ? module.observability_instance.logs_policies_details : null
49+
value = length(var.cloud_logs_policies) > 0 ? module.cloud_logs[0].logs_policies_details : null
5050
description = "The details of the Cloud logs policies created."
5151
}
5252

5353
## Cloud Monitoring
5454
output "cloud_monitoring_name" {
55-
value = var.cloud_monitoring_provision ? module.observability_instance.cloud_monitoring_name : (var.existing_cloud_monitoring_crn != null ? module.cloud_monitoring_crn_parser[0].service_name : null)
55+
value = var.cloud_monitoring_provision ? module.cloud_monitoring[0].name : (var.existing_cloud_monitoring_crn != null ? module.cloud_monitoring_crn_parser[0].service_name : null)
5656
description = "The name of the provisioned IBM cloud monitoring instance."
5757
}
5858

5959
output "cloud_monitoring_crn" {
60-
value = var.cloud_monitoring_provision ? module.observability_instance.cloud_monitoring_crn : (var.existing_cloud_monitoring_crn != null ? var.existing_cloud_monitoring_crn : null)
60+
value = var.cloud_monitoring_provision ? module.cloud_monitoring[0].crn : (var.existing_cloud_monitoring_crn != null ? var.existing_cloud_monitoring_crn : null)
6161
description = "The id of the provisioned IBM cloud monitoring instance."
6262
}
6363

6464
output "cloud_monitoring_guid" {
65-
value = var.cloud_monitoring_provision ? module.observability_instance.cloud_monitoring_guid : var.existing_cloud_monitoring_crn != null ? module.cloud_monitoring_crn_parser[0].service_instance : null
65+
value = var.cloud_monitoring_provision ? module.cloud_monitoring[0].guid : var.existing_cloud_monitoring_crn != null ? module.cloud_monitoring_crn_parser[0].service_instance : null
6666
description = "The guid of the provisioned IBM cloud monitoring instance."
6767
}
6868

6969
output "cloud_monitoring_access_key" {
70-
value = var.cloud_monitoring_provision ? module.observability_instance.cloud_monitoring_access_key : null
70+
value = var.cloud_monitoring_provision ? module.cloud_monitoring[0].access_key : null
7171
description = "IBM cloud monitoring access key for agents to use"
7272
sensitive = true
7373
}
@@ -116,12 +116,12 @@ output "cloud_log_metrics_bucket_name" {
116116

117117
## Activity Tracker
118118
output "at_targets" {
119-
value = module.observability_instance.activity_tracker_targets
119+
value = module.activity_tracker.activity_tracker_targets
120120
description = "The map of created activity_tracker targets"
121121
}
122122

123123
output "at_routes" {
124-
value = module.observability_instance.activity_tracker_routes
124+
value = module.activity_tracker.activity_tracker_routes
125125
description = "The map of created activity_tracker routes"
126126
}
127127

@@ -140,10 +140,10 @@ output "kms_keys" {
140140

141141
output "metrics_router_targets" {
142142
description = "The map of created metrics routing targets."
143-
value = var.enable_metrics_routing_to_cloud_monitoring ? module.observability_instance.metrics_router_targets : null
143+
value = var.enable_metrics_routing_to_cloud_monitoring ? module.metrics_router.metrics_router_targets : null
144144
}
145145

146146
output "metrics_router_routes" {
147147
description = "The map of created metrics routing routes."
148-
value = var.enable_metrics_routing_to_cloud_monitoring ? module.observability_instance.metrics_router_routes : null
148+
value = var.enable_metrics_routing_to_cloud_monitoring ? module.metrics_router.metrics_router_routes : null
149149
}

solutions/instances/variables.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ variable "metrics_router_settings" {
239239
id = string
240240
})))
241241
})
242-
description = "Global settings for Metrics Routing. [Learn more](https://github.com/terraform-ibm-modules/terraform-ibm-observability-da/blob/main/solutions/instances/DA-types.md#metrics-router-settings-)"
242+
description = "Global settings for Metrics Routing. [Learn more](https://github.com/terraform-ibm-modules/terraform-ibm-observability-da/blob/main/solutions/instances/DA-types.md#metrics-router-settings-)."
243243
default = null
244244
}
245245

tests/pr_test.go

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@ const solutionAgentsDADir = "solutions/agents"
2929
const solutionTenantsDADir = "solutions/logs-routing"
3030
const agentsKubeconfigDir = "solutions/agents/kubeconfig"
3131

32+
var IgnoreInstanceUpdates = []string{
33+
// Need to ignore this since primary_metadata_region might be updating in the dev account due to tests using different regions
34+
"module.metrics_router.ibm_metrics_router_settings.metrics_router_settings[0]",
35+
}
36+
37+
var IgnoreAgentsUpdates = []string{
38+
"module.observability_agents.module.logs_agent[0].helm_release.logs_agent",
39+
"module.observability_agents.helm_release.cloud_monitoring_agent[0]",
40+
}
41+
3242
// Currently only including regions that Event Notification support
3343
var validRegions = []string{
3444
"au-syd",
@@ -73,10 +83,7 @@ func TestInstancesInSchematics(t *testing.T) {
7383
DeleteWorkspaceOnFail: false,
7484
WaitJobCompleteMinutes: 60,
7585
IgnoreUpdates: testhelper.Exemptions{
76-
List: []string{
77-
// Need to ignore this since primary_metadata_region might be updating in the dev account due to tests using different regions
78-
"module.observability_instance.module.metric_routing.ibm_metrics_router_settings.metrics_router_settings[0]",
79-
},
86+
List: IgnoreInstanceUpdates,
8087
},
8188
})
8289

@@ -110,10 +117,7 @@ func TestRunUpgradeSolutionInstances(t *testing.T) {
110117
Region: region,
111118
Prefix: "obs-ins-upg",
112119
IgnoreUpdates: testhelper.Exemptions{
113-
List: []string{
114-
// Need to ignore this since primary_metadata_region might be updating in the dev account due to tests using different regions
115-
"module.observability_instance.module.metric_routing.ibm_metrics_router_settings.metrics_router_settings[0]",
116-
},
120+
List: IgnoreInstanceUpdates,
117121
},
118122
})
119123

@@ -199,10 +203,7 @@ func TestAgentsSolutionInSchematics(t *testing.T) {
199203
WaitJobCompleteMinutes: 60,
200204
Region: region,
201205
IgnoreUpdates: testhelper.Exemptions{ // Ignore for consistency check
202-
List: []string{
203-
"module.observability_agents.module.logs_agent[0].helm_release.logs_agent",
204-
"module.observability_agents.helm_release.cloud_monitoring_agent[0]",
205-
},
206+
List: IgnoreAgentsUpdates,
206207
},
207208
})
208209

@@ -303,10 +304,7 @@ func TestRunExistingResourcesInstancesSchematics(t *testing.T) {
303304
WaitJobCompleteMinutes: 60,
304305
Region: region,
305306
IgnoreUpdates: testhelper.Exemptions{
306-
List: []string{
307-
// Need to ignore this since primary_metadata_region might be updating in the dev account due to tests using different regions
308-
"module.observability_instance.module.metric_routing.ibm_metrics_router_settings.metrics_router_settings[0]",
309-
},
307+
List: IgnoreInstanceUpdates,
310308
},
311309
})
312310

@@ -350,10 +348,7 @@ func TestRunExistingResourcesInstancesSchematics(t *testing.T) {
350348
WaitJobCompleteMinutes: 60,
351349
Region: region,
352350
IgnoreUpdates: testhelper.Exemptions{
353-
List: []string{
354-
// Need to ignore this since primary_metadata_region might be updating in the dev account due to tests using different regions
355-
"module.observability_instance.module.metric_routing.ibm_metrics_router_settings.metrics_router_settings[0]",
356-
},
351+
List: IgnoreInstanceUpdates,
357352
},
358353
})
359354

0 commit comments

Comments
 (0)