Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
54f8846
add get primary metadata region
Nov 11, 2025
a43b8ac
update DA
Nov 11, 2025
b301550
update main
Nov 11, 2025
8fac738
resolve comments
Nov 12, 2025
122c9e5
resolve pc and update description
Nov 12, 2025
0fd4610
update script
Nov 12, 2025
f548b68
Merge branch 'main' of https://github.com/terraform-ibm-modules/terra…
Nov 12, 2025
ba89546
update script to handle custome endpoint
Nov 13, 2025
d453c4c
update readme
Nov 13, 2025
348010d
resolve comments
Nov 17, 2025
a3ddb62
Merge branch 'main' into 16324-pmr
iamar7 Nov 17, 2025
5393d26
Merge branch 'main' of https://github.com/terraform-ibm-modules/terra…
Nov 17, 2025
1afd1e3
Merge branch '16324-pmr' of https://github.com/terraform-ibm-modules/…
Nov 17, 2025
25c0686
update readme
Nov 17, 2025
27bc9a2
update tests
Nov 17, 2025
cf97a21
update test
Nov 17, 2025
d5042cf
update test
Nov 17, 2025
518cc8c
Merge branch 'main' of https://github.com/terraform-ibm-modules/terra…
Nov 17, 2025
8d7357d
SKIP UPGRADE TEST
Nov 18, 2025
872ac2b
resolve comments
Nov 19, 2025
fe253f2
Merge branch 'main' of https://github.com/terraform-ibm-modules/terra…
Nov 19, 2025
c1ac16a
resolve comments
Nov 24, 2025
0216d12
update script and resolve pc
Nov 24, 2025
4d987dd
update script and add cda
Nov 26, 2025
0bd87d6
update cdev
Nov 26, 2025
deddcef
update script and tests
iamar7 Nov 27, 2025
a6491c8
update script
Nov 27, 2025
d7e5965
remove commented code
Nov 27, 2025
dcbce81
resolve pc
iamar7 Nov 27, 2025
db446f3
add debug logs
Nov 28, 2025
6399cf4
Merge branch '16324-pmr' of https://github.com/terraform-ibm-modules/…
Nov 28, 2025
00f101d
update script
Nov 28, 2025
f7c9d65
update script
Nov 28, 2025
69ae786
update script
Nov 28, 2025
145dbb7
update script
Nov 28, 2025
dab2dfc
Merge branch 'main' of https://github.com/terraform-ibm-modules/terra…
Dec 1, 2025
de2a40b
remove debugger
Dec 1, 2025
e42b25a
run pc
iamar7 Dec 1, 2025
c98e038
resolved comments
Dec 5, 2025
057719b
Merge branch '16324-pmr' of https://github.com/terraform-ibm-modules/…
Dec 5, 2025
f592025
updated get function
Dec 5, 2025
3fe7c24
remove twice logging
Dec 5, 2025
368ba04
resolve pc
iamar7 Dec 5, 2025
6ab14c3
resolve comments
Dec 8, 2025
43f4b6a
Merge branch '16324-pmr' of https://github.com/terraform-ibm-modules/…
Dec 8, 2025
754e957
update IAM permission
Dec 8, 2025
2fef70f
test IAM permission
Dec 8, 2025
abaeea1
resolve comments and remove testing code
Dec 8, 2025
c5cce23
resolve pc
Dec 8, 2025
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
2 changes: 1 addition & 1 deletion common-dev-assets
1 change: 1 addition & 0 deletions modules/get_primary_metadata_region/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Metrics Router module
20 changes: 20 additions & 0 deletions modules/get_primary_metadata_region/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
########################################################################
# IBM Cloud Metric Routing
#########################################################################

resource "time_sleep" "wait_iam_token" {
create_duration = "5s"
}

data "external" "get_primary_metadata_region" {
depends_on = [time_sleep.wait_iam_token]
program = ["bash", "${path.module}/scripts/get_primary_metadata_region.sh"]

query = {
IBM_API_KEY = var.ibmcloud_api_key
region = var.region
use_private_endpoint = var.use_private_endpoint
}
}


8 changes: 8 additions & 0 deletions modules/get_primary_metadata_region/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
########################################################################
# Metric Routing Account Settings
#########################################################################

output "primary_metadata_region" {
value = nonsensitive(data.external.get_primary_metadata_region.result.primary_metadata_region)
description = "Primary metadata region for IBM Cloud Metrics Router"
}
4 changes: 4 additions & 0 deletions modules/get_primary_metadata_region/provider.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
provider "ibm" {
ibmcloud_api_key = var.ibmcloud_api_key
region = var.region
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/bin/bash
set -euo pipefail

input=$(cat)
IBM_API_KEY=$(echo "$input" | jq -r '.IBM_API_KEY')
REGION=$(echo "$input" | jq -r '.region')
USE_PRIVATE_ENDPOINT=$(echo "$input" | jq -r '.use_private_endpoint')


if [[ -z "$IBM_API_KEY" || "$IBM_API_KEY" == "null" ]]; then
echo "Error: IBM_API_KEY is missing" >&2
exit 1
fi

if [[ -z "$REGION" || "$REGION" == "null" ]]; then
echo "Error: region is missing" >&2
exit 1
fi

IAM_TOKEN=$(curl -s -X POST "https://iam.cloud.ibm.com/identity/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=${IBM_API_KEY}" \
| jq -r '.access_token')

if [[ -z "$IAM_TOKEN" || "$IAM_TOKEN" == "null" ]]; then
echo "Error: Failed to obtain IAM token" >&2
exit 1
fi

if [[ "$USE_PRIVATE_ENDPOINT" == "true" ]]; then
BASE_URL="https://${REGION}.metrics-router.private.cloud.ibm.com"
else
BASE_URL="https://${REGION}.metrics-router.cloud.ibm.com"
fi

URL="${BASE_URL}/api/v3/settings"

max_retries=5
retry_delay=3

for ((i=1; i<=max_retries; i++)); do
response=$(curl -s -X GET "$URL" -H "Authorization: Bearer ${IAM_TOKEN}" || true)
if echo "$response" | jq -e '.primary_metadata_region' >/dev/null; then
break
fi
echo "Attempt $i failed, retrying in ${retry_delay}s..." >&2
sleep "$retry_delay"
done

# Extract region value
primary_region=$(echo "$response" | jq -r '.primary_metadata_region // empty')

if [[ -z "$primary_region" ]]; then
echo "Error: primary_metadata_region not found in response" >&2
exit 1
fi

# Output valid JSON for Terraform
jq -n --arg primary_region "$primary_region" '{primary_metadata_region: $primary_region}'
21 changes: 21 additions & 0 deletions modules/get_primary_metadata_region/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
##############################################################################
# Input Variables
##############################################################################

variable "ibmcloud_api_key" {
description = "The IBM Cloud API Key."
type = string
sensitive = true
}

variable "region" {
description = "The IBM Cloud region."
type = string
default = "us-south"
}

variable "use_private_endpoint" {
type = bool
description = "Make true to hit the private endpoint."
default = false
}
21 changes: 21 additions & 0 deletions modules/get_primary_metadata_region/version.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
terraform {
required_version = ">= 1.9.0"
required_providers {
time = {
source = "hashicorp/time"
version = ">= 0.9.1, < 1.0.0"
}
external = {
source = "hashicorp/external"
version = "2.3.5"
}
ibm = {
source = "ibm-cloud/ibm"
version = ">= 1.78.2, < 2.0.0"
}
null = {
source = "hashicorp/null"
version = ">= 3.2.1, < 4.0.0"
}
}
}
9 changes: 8 additions & 1 deletion solutions/fully-configurable/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -72,5 +72,12 @@ module "metrics_routing" {
]

metrics_router_routes = length(var.metrics_router_routes) != 0 ? var.metrics_router_routes : local.default_metrics_router_route
metrics_router_settings = var.enable_primary_metadata_region ? { primary_metadata_region = var.region } : null
metrics_router_settings = module.primary_metadata_region.primary_metadata_region != null ? null : { primary_metadata_region = var.region }
}

module "primary_metadata_region" {
source = "../../modules/get_primary_metadata_region"
ibmcloud_api_key = var.ibmcloud_api_key
region = var.region
use_private_endpoint = var.use_private_endpoint
}
6 changes: 6 additions & 0 deletions solutions/fully-configurable/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,12 @@ variable "enable_platform_metrics" {
# Metrics Routing
########################################################################################################################

variable "use_private_endpoint" {
type = bool
description = "Make true to hit the private endpoint."
default = false
}

variable "metrics_routing_target_name" {
type = string
description = "The name of the IBM Cloud Metrics Routing target where metrics are collected. If the prefix variable is passed, the name of the target is prefixed to the value in the `<prefix>-value` format."
Expand Down