From 80ed9f69185b1c2f689cc569f75901090edf14c3 Mon Sep 17 00:00:00 2001 From: Fidel Ruiz Date: Fri, 5 Dec 2025 11:50:20 -0500 Subject: [PATCH] feat(metrics-route): support managed_by field Signed-off-by: Fidel Ruiz --- .gitignore | 3 +- examples/ibm-metrics-router/README.md | 169 +++++++------ examples/ibm-metrics-router/main.tf | 30 ++- examples/ibm-metrics-router/outputs.tf | 12 +- examples/ibm-metrics-router/variables.tf | 14 +- examples/ibm-metrics-router/versions.tf | 9 +- go.mod | 23 +- go.sum | 48 ++-- .../data_source_ibm_metrics_router_routes.go | 34 ++- ...a_source_ibm_metrics_router_routes_test.go | 213 ++++++++++++++++- .../data_source_ibm_metrics_router_targets.go | 20 +- ..._source_ibm_metrics_router_targets_test.go | 52 +++- .../resource_ibm_metrics_router_route.go | 57 +++-- .../resource_ibm_metrics_router_route_test.go | 226 +++++++++++++++++- .../resource_ibm_metrics_router_settings.go | 14 +- ...source_ibm_metrics_router_settings_test.go | 43 +++- .../resource_ibm_metrics_router_target.go | 30 ++- ...resource_ibm_metrics_router_target_test.go | 16 +- .../d/metrics_router_routes.html.markdown | 27 ++- .../d/metrics_router_targets.html.markdown | 21 +- .../docs/r/metrics_router_route.html.markdown | 153 +++--------- .../r/metrics_router_settings.html.markdown | 124 ++-------- .../r/metrics_router_target.html.markdown | 79 ++---- 23 files changed, 943 insertions(+), 474 deletions(-) diff --git a/.gitignore b/.gitignore index a2c867b0784..e1d0aa0febd 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ website/vendor *.old vendor/ *.lock.hcl +.envrc # Test exclusions !command/test-fixtures/**/*.tfstate @@ -46,4 +47,4 @@ vendor/ !deleteaddon.sh !deletecrd.sh !updatecrd.sh -!updateodf.sh \ No newline at end of file +!updateodf.sh diff --git a/examples/ibm-metrics-router/README.md b/examples/ibm-metrics-router/README.md index 0fd3a4be07e..fbfbd9046ba 100644 --- a/examples/ibm-metrics-router/README.md +++ b/examples/ibm-metrics-router/README.md @@ -1,16 +1,19 @@ -# Example for IBM Cloud Metrics Routing +# Examples for Metrics Routing API Version 3 -This example illustrates how to use the MetricsRouterV3 +These examples illustrate how to use the resources and data sources associated with Metrics Routing API Version 3. -These types of resources are supported: +The following resources are supported: +* ibm_metrics_router_target +* ibm_metrics_router_route +* ibm_metrics_router_settings -* metrics_router_target -* metrics_router_route -* metrics_router_settings +The following data sources are supported: +* ibm_metrics_router_targets +* ibm_metrics_router_routes ## Usage -To run this example you need to execute: +To run this example, execute the following commands: ```bash $ terraform init @@ -20,30 +23,69 @@ $ terraform apply Run `terraform destroy` when you don't need these resources. +## Metrics Routing API Version 3 resources -## MetricsRouterV3 resources - -metrics_router_target resource: +### Resource: ibm_metrics_router_target ```hcl -resource "metrics_router_target" "metrics_router_target_instance" { +resource "ibm_metrics_router_target" "metrics_router_target_instance" { name = var.metrics_router_target_name destination_crn = var.metrics_router_target_destination_crn region = var.metrics_router_target_region + managed_by = var.metrics_router_target_managed_by } ``` -metrics_router_route resource: + +#### Inputs + +| Name | Description | Type | Required | +|------|-------------|------|---------| +| ibmcloud\_api\_key | IBM Cloud API key | `string` | true | +| name | The name of the target resource. | `string` | true | +| destination_crn | Cloud Resource Name (CRN) of the destination resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. See [service-to-service authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details. | `string` | true | +| region | Include this optional field if you used it to create a target in a different region other than the one you are connected. | `string` | false | +| managed_by | Present when the target is enterprise-managed (`managed_by: enterprise`). For account-managed targets this field is omitted. | `string` | false | + +#### Outputs + +| Name | Description | +|------|-------------| +| crn | The crn of the target resource. | +| target_type | The type of the target. | +| created_at | The timestamp of the target creation time. | +| updated_at | The timestamp of the target last updated time. | + +### Resource: ibm_metrics_router_route ```hcl -resource "metrics_router_route" "metrics_router_route_instance" { +resource "ibm_metrics_router_route" "metrics_router_route_instance" { name = var.metrics_router_route_name rules = var.metrics_router_route_rules + managed_by = var.metrics_router_route_managed_by } ``` -metrics_router_settings resource: + +#### Inputs + +| Name | Description | Type | Required | +|------|-------------|------|---------| +| ibmcloud\_api\_key | IBM Cloud API key | `string` | true | +| name | The name of the route. | `string` | true | +| rules | The routing rules that will be evaluated in their order of the array. Once a rule is matched, the remaining rules in the route definition will be skipped. | `list()` | true | +| managed_by | Present when the route is enterprise-managed (`managed_by: enterprise`). | `string` | false | + +#### Outputs + +| Name | Description | +|------|-------------| +| crn | The crn of the route resource. | +| created_at | The timestamp of the route creation time. | +| updated_at | The timestamp of the route last updated time. | + +### Resource: ibm_metrics_router_settings ```hcl -resource "metrics_router_settings" "metrics_router_settings_instance" { +resource "ibm_metrics_router_settings" "metrics_router_settings_instance" { default_targets = var.metrics_router_settings_default_targets permitted_target_regions = var.metrics_router_settings_permitted_target_regions primary_metadata_region = var.metrics_router_settings_primary_metadata_region @@ -52,23 +94,59 @@ resource "metrics_router_settings" "metrics_router_settings_instance" { } ``` -## MetricsRouterV3 Data sources +#### Inputs + +| Name | Description | Type | Required | +|------|-------------|------|---------| +| ibmcloud\_api\_key | IBM Cloud API key | `string` | true | +| default_targets | A list of default target references. Enterprise-managed targets are not supported. | `list()` | false | +| permitted_target_regions | If present then only these regions may be used to define a target. | `list(string)` | false | +| primary_metadata_region | To store all your meta data in a single region. | `string` | false | +| backup_metadata_region | To backup all your meta data in a different region. | `string` | false | +| private_api_endpoint_only | If you set this true then you cannot access api through public network. | `bool` | false | + +## Metrics Routing API Version 3 data sources -metrics_router_targets data source: +### Data source: ibm_metrics_router_targets ```hcl -data "metrics_router_targets" "metrics_router_targets_instance" { +data "ibm_metrics_router_targets" "metrics_router_targets_instance" { name = var.metrics_router_targets_name } ``` -metrics_router_routes data source: + +#### Inputs + +| Name | Description | Type | Required | +|------|-------------|------|---------| +| name | The name of the target resource. | `string` | false | + +#### Outputs + +| Name | Description | +|------|-------------| +| targets | A list of target resources. | + +### Data source: ibm_metrics_router_routes ```hcl -data "metrics_router_routes" "metrics_router_routes_instance" { +data "ibm_metrics_router_routes" "metrics_router_routes_instance" { name = var.metrics_router_routes_name } ``` +#### Inputs + +| Name | Description | Type | Required | +|------|-------------|------|---------| +| name | The name of the route. | `string` | false | + +#### Outputs + +| Name | Description | +|------|-------------| +| routes | A list of route resources. | + ## Assumptions 1. TODO @@ -88,54 +166,3 @@ data "metrics_router_routes" "metrics_router_routes_instance" { | Name | Version | |------|---------| | ibm | 1.13.1 | - -## Inputs - -### Target - -| Name | Description | Type | Required | -|------|-------------|------|---------| -| ibmcloud\_api\_key | IBM Cloud API key | `string` | true | -| name | The name of the target. The name must be 1000 characters or less, and cannot include any special characters other than `(space) - . _ :`. Do not include any personal identifying information (PII) in any resource names. | `string` | true | -| destination_crn | The CRN of the destination resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. Read [S2S authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details.| `string` | true | -| region | Include this optional field if you want to create a target in a different region other than the one you are connected. | `string` | false | - -### Route - -| Name | Description | Type | Required | -|------|-------------|------|---------| -| name | The name of the route. The name must be 1000 characters or less and cannot include any special characters other than `(space) - . _ :`. Do not include any personal identifying information (PII) in any resource names. | `string` | true | -| rules | Routing rules that will be evaluated in their order of the array. | `list()` | true | - -### Settings - -| Name | Description | Type | Required | -|------|-------------|------|---------| -| default_targets | A list of default target references. | `list()` | false | -| permitted_target_regions | If present then only these regions may be used to define a target. | `list(string)` | false | -| primary_metadata_region | To store all your meta data in a single region. For new accounts, all target / route creation will fail until primary_metadata_region is set. | `string` | false | -| backup_metadata_region | To backup all your meta data in a different region. | `string` | false | -| private_api_endpoint_only | If you set this true then you cannot access api through public network. | `bool` | false | - -### Data Source For Target - -| Name | Description | Type | Required | -|------|-------------|------|---------| -| name | The name of the target resource. | `string` | false | - -### Data Source For Route - -| Name | Description | Type | Required | -|------|-------------|------|---------| -| name | The name of the route. | `string` | false | - -## Outputs - - -| Name | Description | -|------|-------------| -| metrics_router_target | metrics_router_target object | -| metrics_router_route | metrics_router_route object | -| metrics_router_settings | metrics_router_settings object | -| metrics_router_targets | metrics_router_targets object | -| metrics_router_routes | metrics_router_routes object | diff --git a/examples/ibm-metrics-router/main.tf b/examples/ibm-metrics-router/main.tf index e7eebc8e0e0..0fc917b75a8 100644 --- a/examples/ibm-metrics-router/main.tf +++ b/examples/ibm-metrics-router/main.tf @@ -2,11 +2,14 @@ provider "ibm" { ibmcloud_api_key = var.ibmcloud_api_key } + + // Provision metrics_router_target resource instance resource "ibm_metrics_router_target" "metrics_router_target_instance" { name = var.metrics_router_target_name destination_crn = var.metrics_router_target_destination_crn region = var.metrics_router_target_region + } // Provision metrics_router_route resource instance @@ -25,10 +28,35 @@ resource "ibm_metrics_router_route" "metrics_router_route_instance" { } } +// Provision metrics_router_target resource instance +resource "ibm_metrics_router_target" "metrics_router_target_instance_enterprise" { + name = var.metrics_router_target_name + destination_crn = var.metrics_router_target_destination_crn + region = var.metrics_router_target_region + managed_by = "enterprise" +} + +// Provision metrics_router_route resource instance +resource "ibm_metrics_router_route" "metrics_router_route_instanc_enterprise" { + name = var.metrics_router_route_name + rules { + action = "send" + targets { + id = ibm_metrics_router_target.metrics_router_target_instance.id + } + inclusion_filters { + operand = "location" + operator = "is" + values = [ "us-south" ] + } + } + managed_by = "enterprise" +} + // Provision metrics_router_settings resource instance resource "ibm_metrics_router_settings" "metrics_router_settings_instance" { default_targets { - id = ibm_metrics_router_target.metrics_router_target_instance.id + id = ibm_metrics_router_target.metrics_router_target_instance.id } permitted_target_regions = var.metrics_router_settings_permitted_target_regions primary_metadata_region = var.metrics_router_settings_primary_metadata_region diff --git a/examples/ibm-metrics-router/outputs.tf b/examples/ibm-metrics-router/outputs.tf index 6581bec3bf7..6d744b6f25d 100644 --- a/examples/ibm-metrics-router/outputs.tf +++ b/examples/ibm-metrics-router/outputs.tf @@ -1,17 +1,17 @@ -// This allows metrics_router_target data to be referenced by other resources and the terraform CLI -// Modify this if only certain data should be exposed +// This output allows metrics_router_target data to be referenced by other resources and the terraform CLI +// Modify this output if only certain data should be exposed output "ibm_metrics_router_target" { value = ibm_metrics_router_target.metrics_router_target_instance description = "metrics_router_target resource instance" } -// This allows metrics_router_route data to be referenced by other resources and the terraform CLI -// Modify this if only certain data should be exposed +// This output allows metrics_router_route data to be referenced by other resources and the terraform CLI +// Modify this output if only certain data should be exposed output "ibm_metrics_router_route" { value = ibm_metrics_router_route.metrics_router_route_instance description = "metrics_router_route resource instance" } -// This allows metrics_router_settings data to be referenced by other resources and the terraform CLI -// Modify this if only certain data should be exposed +// This output allows metrics_router_settings data to be referenced by other resources and the terraform CLI +// Modify this output if only certain data should be exposed output "ibm_metrics_router_settings" { value = ibm_metrics_router_settings.metrics_router_settings_instance description = "metrics_router_settings resource instance" diff --git a/examples/ibm-metrics-router/variables.tf b/examples/ibm-metrics-router/variables.tf index 7f172313fb8..992cad7476c 100644 --- a/examples/ibm-metrics-router/variables.tf +++ b/examples/ibm-metrics-router/variables.tf @@ -5,28 +5,34 @@ variable "ibmcloud_api_key" { // Resource arguments for metrics_router_target variable "metrics_router_target_name" { - description = "The name of the target. The name must be 1000 characters or less, and cannot include any special characters other than `(space) - . _ :`. Do not include any personal identifying information (PII) in any resource names." + description = "The name of the target resource." type = string default = "my-mr-target" } variable "metrics_router_target_destination_crn" { - description = "The CRN of a destination service instance or resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. Read [S2S authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details." + description = "Cloud Resource Name (CRN) of the destination resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. See [service-to-service authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details." type = string default = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" } variable "metrics_router_target_region" { - description = "Include this optional field if you want to create a target in a different region other than the one you are connected." + description = "Include this optional field if you used it to create a target in a different region other than the one you are connected." type = string default = "us-south" } +variable "metrics_router_target_managed_by" { + description = "Present when the target is enterprise-managed (`managed_by: enterprise`). For account-managed targets this field is omitted." + type = string + default = "enterprise" +} // Resource arguments for metrics_router_route variable "metrics_router_route_name" { - description = "The name of the route. The name must be 1000 characters or less and cannot include any special characters other than `(space) - . _ :`. Do not include any personal identifying information (PII) in any resource names." + description = "The name of the route." type = string default = "my-route" } + // Resource arguments for metrics_router_settings variable "metrics_router_settings_permitted_target_regions" { description = "If present then only these regions may be used to define a target." diff --git a/examples/ibm-metrics-router/versions.tf b/examples/ibm-metrics-router/versions.tf index ee0f9705a2d..bf67a9e279d 100644 --- a/examples/ibm-metrics-router/versions.tf +++ b/examples/ibm-metrics-router/versions.tf @@ -1,3 +1,8 @@ terraform { - required_version = ">= 0.12" -} \ No newline at end of file + required_version = ">= 1.0" + required_providers { + ibm = { + source = "IBM-Cloud/ibm" + } + } +} diff --git a/go.mod b/go.mod index 6edf0b84eee..da6a26981ff 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/IBM/continuous-delivery-go-sdk/v2 v2.0.6 github.com/IBM/event-notifications-go-admin-sdk v0.21.0 github.com/IBM/eventstreams-go-sdk v1.4.0 - github.com/IBM/go-sdk-core/v5 v5.21.0 + github.com/IBM/go-sdk-core/v5 v5.21.2 github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5 github.com/IBM/ibm-cos-sdk-go v1.12.2 github.com/IBM/ibm-cos-sdk-go-config/v2 v2.3.0 @@ -30,7 +30,7 @@ require ( github.com/IBM/logs-router-go-sdk v1.0.8 github.com/IBM/mqcloud-go-sdk v0.4.0 github.com/IBM/networking-go-sdk v0.51.14 - github.com/IBM/platform-services-go-sdk v0.90.0 + github.com/IBM/platform-services-go-sdk v0.90.4 github.com/IBM/project-go-sdk v0.4.0 github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 github.com/IBM/sarama v1.45.0 @@ -46,13 +46,14 @@ require ( github.com/akamai/AkamaiOPEN-edgegrid-golang/v5 v5.0.0 github.com/apache/openwhisk-client-go v0.0.0-20200201143223-a804fb82d105 github.com/apparentlymart/go-cidr v1.1.0 - github.com/go-openapi/strfmt v0.24.1-0.20250928163735-5c9b6bdeb47c + github.com/go-openapi/strfmt v0.25.0 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 github.com/hashicorp/go-uuid v1.0.3 github.com/hashicorp/go-version v1.7.0 github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1 + github.com/hashicorp/terraform-plugin-testing v1.14.0 github.com/jinzhu/copier v0.3.2 github.com/minsikl/netscaler-nitro-go v0.0.0-20170827154432-5b14ce3643e3 github.com/mitchellh/go-homedir v1.1.0 @@ -95,13 +96,13 @@ require ( github.com/evanphx/json-patch/v5 v5.9.0 // indirect github.com/fatih/color v1.16.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.9 // indirect + github.com/gabriel-vasile/mimetype v1.4.11 // indirect github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 // indirect github.com/go-jose/go-jose/v4 v4.1.1 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/analysis v0.23.0 // indirect - github.com/go-openapi/errors v0.22.3 // indirect + github.com/go-openapi/errors v0.22.4 // indirect github.com/go-openapi/jsonpointer v0.21.1 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/loads v0.22.0 // indirect @@ -112,7 +113,7 @@ require ( github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.27.0 // indirect + github.com/go-playground/validator/v10 v10.28.0 // indirect github.com/go-test/deep v1.1.0 // indirect github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -138,10 +139,10 @@ require ( github.com/hashicorp/hcl v1.0.1-vault-7 // indirect github.com/hashicorp/hcl/v2 v2.24.0 // indirect github.com/hashicorp/logutils v1.0.0 // indirect - github.com/hashicorp/terraform-exec v0.23.1 // indirect - github.com/hashicorp/terraform-json v0.27.1 // indirect + github.com/hashicorp/terraform-exec v0.24.0 // indirect + github.com/hashicorp/terraform-json v0.27.2 // indirect github.com/hashicorp/terraform-plugin-go v0.29.0 // indirect - github.com/hashicorp/terraform-plugin-log v0.9.0 // indirect + github.com/hashicorp/terraform-plugin-log v0.10.0 // indirect github.com/hashicorp/terraform-registry-address v0.4.0 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect github.com/hashicorp/vault/api v1.16.0 // indirect @@ -194,7 +195,7 @@ require ( github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/zclconf/go-cty v1.17.0 // indirect - go.mongodb.org/mongo-driver v1.17.4 // indirect + go.mongodb.org/mongo-driver v1.17.6 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/otel v1.37.0 // indirect go.opentelemetry.io/otel/metric v1.37.0 // indirect @@ -202,7 +203,7 @@ require ( go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect go.uber.org/zap v1.27.0 // indirect - go.yaml.in/yaml/v2 v2.4.2 // indirect + go.yaml.in/yaml/v2 v2.4.3 // indirect golang.org/x/mod v0.29.0 // indirect golang.org/x/net v0.47.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect diff --git a/go.sum b/go.sum index 4265895aaa2..cd456a21d8a 100644 --- a/go.sum +++ b/go.sum @@ -125,8 +125,8 @@ github.com/IBM/go-sdk-core/v5 v5.6.3/go.mod h1:tt/B9rxLkRtglE7pvqLuYikgCXaZFL3bt github.com/IBM/go-sdk-core/v5 v5.9.5/go.mod h1:YlOwV9LeuclmT/qi/LAK2AsobbAP42veV0j68/rlZsE= github.com/IBM/go-sdk-core/v5 v5.10.2/go.mod h1:WZPFasUzsKab/2mzt29xPcfruSk5js2ywAPwW4VJjdI= github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns= -github.com/IBM/go-sdk-core/v5 v5.21.0 h1:DUnYhvC4SoC8T84rx5omnhY3+xcQg/Whyoa3mDPIMkk= -github.com/IBM/go-sdk-core/v5 v5.21.0/go.mod h1:Q3BYO6iDA2zweQPDGbNTtqft5tDcEpm6RTuqMlPcvbw= +github.com/IBM/go-sdk-core/v5 v5.21.2 h1:mJ5QbLPOm4g5qhZiVB6wbSllfpeUExftGoyPek2hk4M= +github.com/IBM/go-sdk-core/v5 v5.21.2/go.mod h1:ngpMgwkjur1VNUjqn11LPk3o5eCyOCRbcfg/0YAY7Hc= github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5 h1:bVf67pkGi5dp8SQXMcam8c1JrEwNRkXVcz3FkaalmYg= github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5/go.mod h1:m+7lHOrXJwYPbrdxMmKl96tT7OJMMhpyKnQgnaCcy+w= github.com/IBM/ibm-cos-sdk-go v1.12.2 h1:71A4tDl8u6BZ548h71ecEe7fw5bBA7ECTVqYmeSQWQA= @@ -148,8 +148,8 @@ github.com/IBM/mqcloud-go-sdk v0.4.0 h1:BuZNXA6iYEg5OEPr13CMGrhH0ew4rH/4L56b1nFt github.com/IBM/mqcloud-go-sdk v0.4.0/go.mod h1:7zigCUz6k3eRrNE8KOcDkY72oPppEmoQifF+SB0NPRM= github.com/IBM/networking-go-sdk v0.51.14 h1:WYUdTmFZKeEDYctOk4YpNHNtjN3OOvV8/JDcrmglh4A= github.com/IBM/networking-go-sdk v0.51.14/go.mod h1:TAXWyBUk3C3R7aS1m84EfKdnDcBMZMAClwLfDj/SYZc= -github.com/IBM/platform-services-go-sdk v0.90.0 h1:hsUkgZZBGYK+szFb0tF9Q7uy1VjMY+VlYAPgPwFPMrg= -github.com/IBM/platform-services-go-sdk v0.90.0/go.mod h1:aGD045m6I8pfcB77wft8w2cHqWOJjcM3YSSV55BX0Js= +github.com/IBM/platform-services-go-sdk v0.90.4 h1:60oLi1S/9C23/BidRSC1MWNlQVEezk+x4giOb9NkEPQ= +github.com/IBM/platform-services-go-sdk v0.90.4/go.mod h1:KAnBhxKaYsu9It2aVXV6oCPEj78imvTs2qSG0ScZKpM= github.com/IBM/project-go-sdk v0.4.0 h1:72pEtVHJn434+MYRawER7Hk/kblapdfotoLBBhjv/jo= github.com/IBM/project-go-sdk v0.4.0/go.mod h1:FOJM9ihQV3EEAY6YigcWiTNfVCThtdY8bLC/nhQHFvo= github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 h1:NPUhkoOCRuv3OFWt19PmwjXGGTKlvmbuPg9fUrBUNe4= @@ -361,8 +361,8 @@ github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8 github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= -github.com/gabriel-vasile/mimetype v1.4.9 h1:5k+WDwEsD9eTLL8Tz3L0VnmVh9QxGjRmjBvAG7U/oYY= -github.com/gabriel-vasile/mimetype v1.4.9/go.mod h1:WnSQhFKJuBlRyLiKohA/2DtIlPFAbguNaG7QCHcyGok= +github.com/gabriel-vasile/mimetype v1.4.11 h1:AQvxbp830wPhHTqc1u7nzoLT+ZFxGY7emj5DR5DYFik= +github.com/gabriel-vasile/mimetype v1.4.11/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -413,8 +413,8 @@ github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpX github.com/go-openapi/errors v0.20.0/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.21.0/go.mod h1:jxNTMUxRCKj65yb/okJGEtahVd7uvWnuWfj53bse4ho= -github.com/go-openapi/errors v0.22.3 h1:k6Hxa5Jg1TUyZnOwV2Lh81j8ayNw5VVYLvKrp4zFKFs= -github.com/go-openapi/errors v0.22.3/go.mod h1:+WvbaBBULWCOna//9B9TbLNGSFOfF8lY9dw4hGiEiKQ= +github.com/go-openapi/errors v0.22.4 h1:oi2K9mHTOb5DPW2Zjdzs/NIvwi2N3fARKaTJLdNabaM= +github.com/go-openapi/errors v0.22.4/go.mod h1:z9S8ASTUqx7+CP1Q8dD8ewGH/1JWFFLX/2PmAYNQLgk= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= @@ -459,8 +459,8 @@ github.com/go-openapi/strfmt v0.20.1/go.mod h1:43urheQI9dNtE5lTZQfuFJvjYJKPrxicA github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= github.com/go-openapi/strfmt v0.22.1/go.mod h1:OfVoytIXJasDkkGvkb1Cceb3BPyMOwk1FgmyyEw7NYg= -github.com/go-openapi/strfmt v0.24.1-0.20250928163735-5c9b6bdeb47c h1:2qXCCFMLfKkjdZF/87VmmKUYafETRXdSE/OxrghKAfA= -github.com/go-openapi/strfmt v0.24.1-0.20250928163735-5c9b6bdeb47c/go.mod h1:MXNXmOAf2skBOkUyTR/pzp5/DYMJTE/VHx8zA8kPq1c= +github.com/go-openapi/strfmt v0.25.0 h1:7R0RX7mbKLa9EYCTHRcCuIPcaqlyQiWNPTXwClK0saQ= +github.com/go-openapi/strfmt v0.25.0/go.mod h1:nNXct7OzbwrMY9+5tLX4I21pzcmE6ccMGXl3jFdPfn8= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= @@ -468,6 +468,8 @@ github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= +github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls= +github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= @@ -486,8 +488,8 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.19.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4= -github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= +github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688= +github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -743,16 +745,18 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= -github.com/hashicorp/terraform-exec v0.23.1 h1:diK5NSSDXDKqHEOIQefBMu9ny+FhzwlwV0xgUTB7VTo= -github.com/hashicorp/terraform-exec v0.23.1/go.mod h1:e4ZEg9BJDRaSalGm2z8vvrPONt0XWG0/tXpmzYTf+dM= -github.com/hashicorp/terraform-json v0.27.1 h1:zWhEracxJW6lcjt/JvximOYyc12pS/gaKSy/wzzE7nY= -github.com/hashicorp/terraform-json v0.27.1/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE= +github.com/hashicorp/terraform-exec v0.24.0 h1:mL0xlk9H5g2bn0pPF6JQZk5YlByqSqrO5VoaNtAf8OE= +github.com/hashicorp/terraform-exec v0.24.0/go.mod h1:lluc/rDYfAhYdslLJQg3J0oDqo88oGQAdHR+wDqFvo4= +github.com/hashicorp/terraform-json v0.27.2 h1:BwGuzM6iUPqf9JYM/Z4AF1OJ5VVJEEzoKST/tRDBJKU= +github.com/hashicorp/terraform-json v0.27.2/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE= github.com/hashicorp/terraform-plugin-go v0.29.0 h1:1nXKl/nSpaYIUBU1IG/EsDOX0vv+9JxAltQyDMpq5mU= github.com/hashicorp/terraform-plugin-go v0.29.0/go.mod h1:vYZbIyvxyy0FWSmDHChCqKvI40cFTDGSb3D8D70i9GM= -github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= -github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= +github.com/hashicorp/terraform-plugin-log v0.10.0 h1:eu2kW6/QBVdN4P3Ju2WiB2W3ObjkAsyfBsL3Wh1fj3g= +github.com/hashicorp/terraform-plugin-log v0.10.0/go.mod h1:/9RR5Cv2aAbrqcTSdNmY1NRHP4E3ekrXRGjqORpXyB0= github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1 h1:mlAq/OrMlg04IuJT7NpefI1wwtdpWudnEmjuQs04t/4= github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1/go.mod h1:GQhpKVvvuwzD79e8/NZ+xzj+ZpWovdPAe8nfV/skwNU= +github.com/hashicorp/terraform-plugin-testing v1.14.0 h1:5t4VKrjOJ0rg0sVuSJ86dz5K7PHsMO6OKrHFzDBerWA= +github.com/hashicorp/terraform-plugin-testing v1.14.0/go.mod h1:1qfWkecyYe1Do2EEOK/5/WnTyvC8wQucUkkhiGLg5nk= github.com/hashicorp/terraform-registry-address v0.4.0 h1:S1yCGomj30Sao4l5BMPjTGZmCNzuv7/GDTDX99E9gTk= github.com/hashicorp/terraform-registry-address v0.4.0/go.mod h1:LRS1Ay0+mAiRkUyltGT+UHWkIqTFvigGn/LbMshfflE= github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= @@ -1237,8 +1241,8 @@ go.mongodb.org/mongo-driver v1.7.0/go.mod h1:Q4oFMbo1+MSNqICAdYMlC/zSTrwCogR4R8N go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= -go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFXVw= -go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= +go.mongodb.org/mongo-driver v1.17.6 h1:87JUG1wZfWsr6rIz3ZmpH90rL5tea7O3IHuSwHUpsss= +go.mongodb.org/mongo-driver v1.17.6/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1274,8 +1278,8 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= -go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= +go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= diff --git a/ibm/service/metricsrouter/data_source_ibm_metrics_router_routes.go b/ibm/service/metricsrouter/data_source_ibm_metrics_router_routes.go index 018be91ecb6..bd39b5ca089 100644 --- a/ibm/service/metricsrouter/data_source_ibm_metrics_router_routes.go +++ b/ibm/service/metricsrouter/data_source_ibm_metrics_router_routes.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.108.0-56772134-20251111-102802 + */ + package metricsrouter import ( @@ -127,6 +131,11 @@ func DataSourceIBMMetricsRouterRoutes() *schema.Resource { Computed: true, Description: "The timestamp of the route last updated time.", }, + "managed_by": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Present when the route is enterprise-managed (`managed_by: enterprise`).", + }, }, }, }, @@ -168,7 +177,7 @@ func dataSourceIBMMetricsRouterRoutesRead(context context.Context, d *schema.Res if suppliedFilter { if len(routeCollection.Routes) == 0 { - return diag.FromErr(fmt.Errorf("no Routes found with name %s", name)) + return diag.FromErr(fmt.Errorf("no routes found with name %s", name)) } d.SetId(name) } else { @@ -178,7 +187,7 @@ func dataSourceIBMMetricsRouterRoutesRead(context context.Context, d *schema.Res routes := []map[string]interface{}{} if routeCollection.Routes != nil { for _, modelItem := range routeCollection.Routes { - modelMap, err := dataSourceIBMMetricsRouterRoutesRouteToMap(&modelItem) + modelMap, err := DataSourceIBMMetricsRouterRoutesRouteToMap(&modelItem) if err != nil { return diag.FromErr(err) } @@ -186,7 +195,7 @@ func dataSourceIBMMetricsRouterRoutesRead(context context.Context, d *schema.Res } } if err = d.Set("routes", routes); err != nil { - return diag.FromErr(fmt.Errorf("Error setting routes %s", err)) + return diag.FromErr(fmt.Errorf("error setting routes %s", err)) } return nil @@ -197,7 +206,7 @@ func dataSourceIBMMetricsRouterRoutesID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func dataSourceIBMMetricsRouterRoutesRouteToMap(model *metricsrouterv3.Route) (map[string]interface{}, error) { +func DataSourceIBMMetricsRouterRoutesRouteToMap(model *metricsrouterv3.Route) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.ID != nil { modelMap["id"] = *model.ID @@ -211,7 +220,7 @@ func dataSourceIBMMetricsRouterRoutesRouteToMap(model *metricsrouterv3.Route) (m if model.Rules != nil { rules := []map[string]interface{}{} for _, rulesItem := range model.Rules { - rulesItemMap, err := dataSourceIBMMetricsRouterRoutesRuleToMap(&rulesItem) + rulesItemMap, err := DataSourceIBMMetricsRouterRoutesRuleToMap(&rulesItem) if err != nil { return modelMap, err } @@ -219,6 +228,9 @@ func dataSourceIBMMetricsRouterRoutesRouteToMap(model *metricsrouterv3.Route) (m } modelMap["rules"] = rules } + if model.ManagedBy != nil { + modelMap["managed_by"] = *model.ManagedBy + } if model.CreatedAt != nil { modelMap["created_at"] = model.CreatedAt.String() } @@ -228,7 +240,7 @@ func dataSourceIBMMetricsRouterRoutesRouteToMap(model *metricsrouterv3.Route) (m return modelMap, nil } -func dataSourceIBMMetricsRouterRoutesRuleToMap(model *metricsrouterv3.Rule) (map[string]interface{}, error) { +func DataSourceIBMMetricsRouterRoutesRuleToMap(model *metricsrouterv3.Rule) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Action != nil { modelMap["action"] = *model.Action @@ -236,7 +248,7 @@ func dataSourceIBMMetricsRouterRoutesRuleToMap(model *metricsrouterv3.Rule) (map if model.Targets != nil { targets := []map[string]interface{}{} for _, targetsItem := range model.Targets { - targetsItemMap, err := dataSourceIBMMetricsRouterRoutesTargetReferenceToMap(&targetsItem) + targetsItemMap, err := DataSourceIBMMetricsRouterRoutesTargetReferenceToMap(&targetsItem) if err != nil { return modelMap, err } @@ -247,7 +259,7 @@ func dataSourceIBMMetricsRouterRoutesRuleToMap(model *metricsrouterv3.Rule) (map if model.InclusionFilters != nil { inclusionFilters := []map[string]interface{}{} for _, inclusionFiltersItem := range model.InclusionFilters { - inclusionFiltersItemMap, err := dataSourceIBMMetricsRouterRoutesInclusionFilterToMap(&inclusionFiltersItem) + inclusionFiltersItemMap, err := DataSourceIBMMetricsRouterRoutesInclusionFilterToMap(&inclusionFiltersItem) if err != nil { return modelMap, err } @@ -258,7 +270,7 @@ func dataSourceIBMMetricsRouterRoutesRuleToMap(model *metricsrouterv3.Rule) (map return modelMap, nil } -func dataSourceIBMMetricsRouterRoutesTargetReferenceToMap(model *metricsrouterv3.TargetReference) (map[string]interface{}, error) { +func DataSourceIBMMetricsRouterRoutesTargetReferenceToMap(model *metricsrouterv3.TargetReference) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.ID != nil { modelMap["id"] = *model.ID @@ -275,7 +287,7 @@ func dataSourceIBMMetricsRouterRoutesTargetReferenceToMap(model *metricsrouterv3 return modelMap, nil } -func dataSourceIBMMetricsRouterRoutesInclusionFilterToMap(model *metricsrouterv3.InclusionFilter) (map[string]interface{}, error) { +func DataSourceIBMMetricsRouterRoutesInclusionFilterToMap(model *metricsrouterv3.InclusionFilter) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Operand != nil { modelMap["operand"] = *model.Operand diff --git a/ibm/service/metricsrouter/data_source_ibm_metrics_router_routes_test.go b/ibm/service/metricsrouter/data_source_ibm_metrics_router_routes_test.go index f9199a24aca..e81ac9499c6 100644 --- a/ibm/service/metricsrouter/data_source_ibm_metrics_router_routes_test.go +++ b/ibm/service/metricsrouter/data_source_ibm_metrics_router_routes_test.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.108.0-56772134-20251111-102802 + */ + package metricsrouter_test import ( @@ -11,6 +15,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/metricsrouter" + . "github.com/IBM-Cloud/terraform-provider-ibm/ibm/unittest" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/platform-services-go-sdk/metricsrouterv3" + "github.com/stretchr/testify/assert" ) func TestAccIBMMetricsRouterRoutesDataSourceBasic(t *testing.T) { @@ -35,6 +44,32 @@ func TestAccIBMMetricsRouterRoutesDataSourceBasic(t *testing.T) { }) } +func TestAccIBMMetricsRouterRoutesDataSourceAllArgs(t *testing.T) { + routeName := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100)) + routeManagedBy := "enterprise" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIBMMetricsRouterRoutesDataSourceConfig(routeName, routeManagedBy), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.ibm_metrics_router_routes.metrics_router_routes_instance", "id"), + resource.TestCheckResourceAttrSet("data.ibm_metrics_router_routes.metrics_router_routes_instance", "name"), + resource.TestCheckResourceAttrSet("data.ibm_metrics_router_routes.metrics_router_routes_instance", "routes.#"), + resource.TestCheckResourceAttrSet("data.ibm_metrics_router_routes.metrics_router_routes_instance", "routes.0.id"), + resource.TestCheckResourceAttr("data.ibm_metrics_router_routes.metrics_router_routes_instance", "routes.0.name", routeName), + resource.TestCheckResourceAttrSet("data.ibm_metrics_router_routes.metrics_router_routes_instance", "routes.0.crn"), + resource.TestCheckResourceAttrSet("data.ibm_metrics_router_routes.metrics_router_routes_instance", "routes.0.created_at"), + resource.TestCheckResourceAttrSet("data.ibm_metrics_router_routes.metrics_router_routes_instance", "routes.0.updated_at"), + resource.TestCheckResourceAttr("data.ibm_metrics_router_routes.metrics_router_routes_instance", "routes.0.managed_by", routeManagedBy), + ), + }, + }, + }) +} + func testAccCheckIBMMetricsRouterRoutesDataSourceConfigBasic(routeName string) string { return fmt.Sprintf(` resource "ibm_metrics_router_target" "metrics_router_target_instance" { @@ -47,7 +82,7 @@ func testAccCheckIBMMetricsRouterRoutesDataSourceConfigBasic(routeName string) s rules { action = "send" targets { - id = ibm_metrics_router_target.metrics_router_target_instance.id + id = ibm_metrics_router_target.metrics_router_target_instance.id } inclusion_filters { operand = "location" @@ -62,3 +97,177 @@ func testAccCheckIBMMetricsRouterRoutesDataSourceConfigBasic(routeName string) s } `, destinationCRN, routeName) } + +func testAccCheckIBMMetricsRouterRoutesDataSourceConfig(routeName string, routeManagedBy string) string { + return fmt.Sprintf(` + resource "ibm_metrics_router_target" "metrics_router_target_instance" { + name = "my-mr-target" + destination_crn = "%s" + managed_by = "enterprise" + } + + resource "ibm_metrics_router_route" "metrics_router_route_instance" { + name = "%s" + rules { + action = "send" + targets { + id = ibm_metrics_router_target.metrics_router_target_instance.id + } + inclusion_filters { + operand = "location" + operator = "is" + values = [ "us-south" ] + } + } + managed_by = "%s" + } + + data "ibm_metrics_router_routes" "metrics_router_routes_instance" { + name = ibm_metrics_router_route.metrics_router_route_instance.name + } + `, destinationCRN, routeName, routeManagedBy) +} + +func TestDataSourceIBMMetricsRouterRoutesRouteToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + targetReferenceModel := make(map[string]interface{}) + targetReferenceModel["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + targetReferenceModel["crn"] = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + targetReferenceModel["name"] = "a-mr-target-us-south" + targetReferenceModel["target_type"] = "sysdig_monitor" + + inclusionFilterModel := make(map[string]interface{}) + inclusionFilterModel["operand"] = "location" + inclusionFilterModel["operator"] = "is" + inclusionFilterModel["values"] = []string{"us-south"} + + ruleModel := make(map[string]interface{}) + ruleModel["action"] = "send" + ruleModel["targets"] = []map[string]interface{}{targetReferenceModel} + ruleModel["inclusion_filters"] = []map[string]interface{}{inclusionFilterModel} + + model := make(map[string]interface{}) + model["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + model["name"] = "my-route" + model["crn"] = "crn:v1:bluemix:public:metrics-router:global:a/0be5ad401ae913d8ff665d92680664ed:b6eec08b-5201-08ca-451b-cd71523e3626:route:c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + model["rules"] = []map[string]interface{}{ruleModel} + model["created_at"] = "2021-05-18T20:15:12.353Z" + model["updated_at"] = "2021-05-18T20:15:12.353Z" + model["managed_by"] = "enterprise" + + assert.Equal(t, result, model) + } + + targetReferenceModel := new(metricsrouterv3.TargetReference) + targetReferenceModel.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + targetReferenceModel.CRN = core.StringPtr("crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::") + targetReferenceModel.Name = core.StringPtr("a-mr-target-us-south") + targetReferenceModel.TargetType = core.StringPtr("sysdig_monitor") + + inclusionFilterModel := new(metricsrouterv3.InclusionFilter) + inclusionFilterModel.Operand = core.StringPtr("location") + inclusionFilterModel.Operator = core.StringPtr("is") + inclusionFilterModel.Values = []string{"us-south"} + + ruleModel := new(metricsrouterv3.Rule) + ruleModel.Action = core.StringPtr("send") + ruleModel.Targets = []metricsrouterv3.TargetReference{*targetReferenceModel} + ruleModel.InclusionFilters = []metricsrouterv3.InclusionFilter{*inclusionFilterModel} + + model := new(metricsrouterv3.Route) + model.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + model.Name = core.StringPtr("my-route") + model.CRN = core.StringPtr("crn:v1:bluemix:public:metrics-router:global:a/0be5ad401ae913d8ff665d92680664ed:b6eec08b-5201-08ca-451b-cd71523e3626:route:c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + model.Rules = []metricsrouterv3.Rule{*ruleModel} + model.CreatedAt = CreateMockDateTime("2021-05-18T20:15:12.353Z") + model.UpdatedAt = CreateMockDateTime("2021-05-18T20:15:12.353Z") + model.ManagedBy = core.StringPtr("enterprise") + + result, err := metricsrouter.DataSourceIBMMetricsRouterRoutesRouteToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIBMMetricsRouterRoutesRuleToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + targetReferenceModel := make(map[string]interface{}) + targetReferenceModel["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + targetReferenceModel["crn"] = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + targetReferenceModel["name"] = "a-mr-target-us-south" + targetReferenceModel["target_type"] = "sysdig_monitor" + + inclusionFilterModel := make(map[string]interface{}) + inclusionFilterModel["operand"] = "location" + inclusionFilterModel["operator"] = "is" + inclusionFilterModel["values"] = []string{"us-south"} + + model := make(map[string]interface{}) + model["action"] = "send" + model["targets"] = []map[string]interface{}{targetReferenceModel} + model["inclusion_filters"] = []map[string]interface{}{inclusionFilterModel} + + assert.Equal(t, result, model) + } + + targetReferenceModel := new(metricsrouterv3.TargetReference) + targetReferenceModel.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + targetReferenceModel.CRN = core.StringPtr("crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::") + targetReferenceModel.Name = core.StringPtr("a-mr-target-us-south") + targetReferenceModel.TargetType = core.StringPtr("sysdig_monitor") + + inclusionFilterModel := new(metricsrouterv3.InclusionFilter) + inclusionFilterModel.Operand = core.StringPtr("location") + inclusionFilterModel.Operator = core.StringPtr("is") + inclusionFilterModel.Values = []string{"us-south"} + + model := new(metricsrouterv3.Rule) + model.Action = core.StringPtr("send") + model.Targets = []metricsrouterv3.TargetReference{*targetReferenceModel} + model.InclusionFilters = []metricsrouterv3.InclusionFilter{*inclusionFilterModel} + + result, err := metricsrouter.DataSourceIBMMetricsRouterRoutesRuleToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIBMMetricsRouterRoutesTargetReferenceToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + model["crn"] = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + model["name"] = "a-mr-target-us-south" + model["target_type"] = "sysdig_monitor" + + assert.Equal(t, result, model) + } + + model := new(metricsrouterv3.TargetReference) + model.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + model.CRN = core.StringPtr("crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::") + model.Name = core.StringPtr("a-mr-target-us-south") + model.TargetType = core.StringPtr("sysdig_monitor") + + result, err := metricsrouter.DataSourceIBMMetricsRouterRoutesTargetReferenceToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestDataSourceIBMMetricsRouterRoutesInclusionFilterToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["operand"] = "location" + model["operator"] = "is" + model["values"] = []string{"us-south"} + + assert.Equal(t, result, model) + } + + model := new(metricsrouterv3.InclusionFilter) + model.Operand = core.StringPtr("location") + model.Operator = core.StringPtr("is") + model.Values = []string{"us-south"} + + result, err := metricsrouter.DataSourceIBMMetricsRouterRoutesInclusionFilterToMap(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/metricsrouter/data_source_ibm_metrics_router_targets.go b/ibm/service/metricsrouter/data_source_ibm_metrics_router_targets.go index af6d852f875..38b98862275 100644 --- a/ibm/service/metricsrouter/data_source_ibm_metrics_router_targets.go +++ b/ibm/service/metricsrouter/data_source_ibm_metrics_router_targets.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.108.0-56772134-20251111-102802 + */ + package metricsrouter import ( @@ -50,7 +54,7 @@ func DataSourceIBMMetricsRouterTargets() *schema.Resource { "destination_crn": &schema.Schema{ Type: schema.TypeString, Computed: true, - Description: "The CRN of the destination service instance or resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. Read [S2S authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details.", + Description: "Cloud Resource Name (CRN) of the destination resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. See [service-to-service authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details.", }, "target_type": &schema.Schema{ Type: schema.TypeString, @@ -72,6 +76,11 @@ func DataSourceIBMMetricsRouterTargets() *schema.Resource { Computed: true, Description: "The timestamp of the target last updated time.", }, + "managed_by": &schema.Schema{ + Type: schema.TypeString, + Computed: true, + Description: "Present when the target is enterprise-managed (`managed_by: enterprise`). For account-managed targets this field is omitted.", + }, }, }, }, @@ -123,7 +132,7 @@ func dataSourceIBMMetricsRouterTargetsRead(context context.Context, d *schema.Re targets := []map[string]interface{}{} if targetCollection.Targets != nil { for _, modelItem := range targetCollection.Targets { - modelMap, err := dataSourceIBMMetricsRouterTargetsTargetToMap(&modelItem) + modelMap, err := DataSourceIBMMetricsRouterTargetsTargetToMap(&modelItem) if err != nil { return diag.FromErr(err) } @@ -142,7 +151,7 @@ func dataSourceIBMMetricsRouterTargetsID(d *schema.ResourceData) string { return time.Now().UTC().String() } -func dataSourceIBMMetricsRouterTargetsTargetToMap(model *metricsrouterv3.Target) (map[string]interface{}, error) { +func DataSourceIBMMetricsRouterTargetsTargetToMap(model *metricsrouterv3.Target) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.ID != nil { modelMap["id"] = *model.ID @@ -150,6 +159,9 @@ func dataSourceIBMMetricsRouterTargetsTargetToMap(model *metricsrouterv3.Target) if model.Name != nil { modelMap["name"] = *model.Name } + if model.ManagedBy != nil { + modelMap["managed_by"] = *model.ManagedBy + } if model.CRN != nil { modelMap["crn"] = *model.CRN } diff --git a/ibm/service/metricsrouter/data_source_ibm_metrics_router_targets_test.go b/ibm/service/metricsrouter/data_source_ibm_metrics_router_targets_test.go index c88e7687f81..264cc089e1c 100644 --- a/ibm/service/metricsrouter/data_source_ibm_metrics_router_targets_test.go +++ b/ibm/service/metricsrouter/data_source_ibm_metrics_router_targets_test.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.108.0-56772134-20251111-102802 + */ + package metricsrouter_test import ( @@ -11,6 +15,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/metricsrouter" + . "github.com/IBM-Cloud/terraform-provider-ibm/ibm/unittest" + "github.com/IBM/go-sdk-core/v5/core" + "github.com/IBM/platform-services-go-sdk/metricsrouterv3" + "github.com/stretchr/testify/assert" ) func TestAccIBMMetricsRouterTargetsDataSourceBasic(t *testing.T) { @@ -36,13 +45,14 @@ func TestAccIBMMetricsRouterTargetsDataSourceBasic(t *testing.T) { func TestAccIBMMetricsRouterTargetsDataSourceAllArgs(t *testing.T) { targetName := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100)) targetRegion := "us-south" + targetManagedBy := "enterprise" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, Providers: acc.TestAccProviders, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIBMMetricsRouterTargetsDataSourceConfig(targetName, destinationCRN, targetRegion), + Config: testAccCheckIBMMetricsRouterTargetsDataSourceConfig(targetName, destinationCRN, targetRegion, targetManagedBy), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("data.ibm_metrics_router_targets.metrics_router_targets_instance", "id"), resource.TestCheckResourceAttrSet("data.ibm_metrics_router_targets.metrics_router_targets_instance", "name"), @@ -55,6 +65,7 @@ func TestAccIBMMetricsRouterTargetsDataSourceAllArgs(t *testing.T) { resource.TestCheckResourceAttr("data.ibm_metrics_router_targets.metrics_router_targets_instance", "targets.0.region", targetRegion), resource.TestCheckResourceAttrSet("data.ibm_metrics_router_targets.metrics_router_targets_instance", "targets.0.created_at"), resource.TestCheckResourceAttrSet("data.ibm_metrics_router_targets.metrics_router_targets_instance", "targets.0.updated_at"), + resource.TestCheckResourceAttr("data.ibm_metrics_router_targets.metrics_router_targets_instance", "targets.0.managed_by", targetManagedBy), ), }, }, @@ -74,16 +85,49 @@ func testAccCheckIBMMetricsRouterTargetsDataSourceConfigBasic(targetName string, `, targetName, targetDestinationCRN) } -func testAccCheckIBMMetricsRouterTargetsDataSourceConfig(targetName string, targetDestinationCRN string, targetRegion string) string { +func testAccCheckIBMMetricsRouterTargetsDataSourceConfig(targetName string, targetDestinationCRN string, targetRegion string, targetManagedBy string) string { return fmt.Sprintf(` resource "ibm_metrics_router_target" "metrics_router_target_instance" { name = "%s" destination_crn = "%s" region = "%s" + managed_by = "%s" } data "ibm_metrics_router_targets" "metrics_router_targets_instance" { name = ibm_metrics_router_target.metrics_router_target_instance.name } - `, targetName, targetDestinationCRN, targetRegion) + `, targetName, targetDestinationCRN, targetRegion, targetManagedBy) +} + +func TestDataSourceIBMMetricsRouterTargetsTargetToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "f7dcfae6-e7c5-08ca-451b-fdfa696c9bb6" + model["name"] = "a-mr-target-us-south" + model["crn"] = "crn:v1:bluemix:public:metrics-router:us-south:a/0be5ad401ae913d8ff665d92680664ed:b6eec08b-5201-08ca-451b-cd71523e3626:target:f7dcfae6-e7c5-08ca-451b-fdfa696c9bb6" + model["destination_crn"] = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + model["target_type"] = "sysdig_monitor" + model["region"] = "us-south" + model["created_at"] = "2021-05-18T20:15:12.353Z" + model["updated_at"] = "2021-05-18T20:15:12.353Z" + model["managed_by"] = "enterprise" + + assert.Equal(t, result, model) + } + + model := new(metricsrouterv3.Target) + model.ID = core.StringPtr("f7dcfae6-e7c5-08ca-451b-fdfa696c9bb6") + model.Name = core.StringPtr("a-mr-target-us-south") + model.CRN = core.StringPtr("crn:v1:bluemix:public:metrics-router:us-south:a/0be5ad401ae913d8ff665d92680664ed:b6eec08b-5201-08ca-451b-cd71523e3626:target:f7dcfae6-e7c5-08ca-451b-fdfa696c9bb6") + model.DestinationCRN = core.StringPtr("crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::") + model.TargetType = core.StringPtr("sysdig_monitor") + model.Region = core.StringPtr("us-south") + model.CreatedAt = CreateMockDateTime("2021-05-18T20:15:12.353Z") + model.UpdatedAt = CreateMockDateTime("2021-05-18T20:15:12.353Z") + model.ManagedBy = core.StringPtr("enterprise") + + result, err := metricsrouter.DataSourceIBMMetricsRouterTargetsTargetToMap(model) + assert.Nil(t, err) + checkResult(result) } diff --git a/ibm/service/metricsrouter/resource_ibm_metrics_router_route.go b/ibm/service/metricsrouter/resource_ibm_metrics_router_route.go index 6ecd5057220..f03429b774e 100644 --- a/ibm/service/metricsrouter/resource_ibm_metrics_router_route.go +++ b/ibm/service/metricsrouter/resource_ibm_metrics_router_route.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.108.0-56772134-20251111-102802 + */ + package metricsrouter import ( @@ -91,6 +95,14 @@ func ResourceIBMMetricsRouterRoute() *schema.Resource { }, }, }, + "managed_by": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Default: "account", + ValidateFunc: validate.InvokeValidator("ibm_metrics_router_route", "managed_by"), + Description: "Present when the route is enterprise-managed (`managed_by: enterprise`).", + }, "crn": &schema.Schema{ Type: schema.TypeString, Computed: true, @@ -170,7 +182,7 @@ func resourceIBMMetricsRouterRouteCreate(context context.Context, d *schema.Reso var rules []metricsrouterv3.RulePrototype for _, e := range d.Get("rules").([]interface{}) { value := e.(map[string]interface{}) - rulesItem, err := resourceIBMMetricsRouterRouteMapToRulePrototype(value) + rulesItem, err := ResourceIBMMetricsRouterRouteMapToRulePrototype(value) if err != nil { return diag.FromErr(err) } @@ -178,6 +190,10 @@ func resourceIBMMetricsRouterRouteCreate(context context.Context, d *schema.Reso } createRouteOptions.SetRules(rules) + if _, ok := d.GetOk("managed_by"); ok { + createRouteOptions.SetManagedBy(d.Get("managed_by").(string)) + } + route, response, err := metricsRouterClient.CreateRouteWithContext(context, createRouteOptions) if err != nil { log.Printf("[DEBUG] CreateRouteWithContext failed %s\n%s", err, response) @@ -214,7 +230,7 @@ func resourceIBMMetricsRouterRouteRead(context context.Context, d *schema.Resour } rules := []map[string]interface{}{} for _, rulesItem := range route.Rules { - rulesItemMap, err := resourceIBMMetricsRouterRouteRulePrototypeToMap(&rulesItem) + rulesItemMap, err := ResourceIBMMetricsRouterRouteRuleToMap(&rulesItem) // #nosec G601 if err != nil { return diag.FromErr(err) } @@ -223,6 +239,11 @@ func resourceIBMMetricsRouterRouteRead(context context.Context, d *schema.Resour if err = d.Set("rules", rules); err != nil { return diag.FromErr(fmt.Errorf("Error setting rules: %s", err)) } + if !core.IsNil(route.ManagedBy) { + if err = d.Set("managed_by", route.ManagedBy); err != nil { + return diag.FromErr(fmt.Errorf("Error setting managed_by: %s", err)) + } + } if err = d.Set("crn", route.CRN); err != nil { return diag.FromErr(fmt.Errorf("Error setting crn: %s", err)) } @@ -255,7 +276,7 @@ func resourceIBMMetricsRouterRouteUpdate(context context.Context, d *schema.Reso var rules []metricsrouterv3.RulePrototype for _, e := range d.Get("rules").([]interface{}) { value := e.(map[string]interface{}) - rulesItem, err := resourceIBMMetricsRouterRouteMapToRulePrototype(value) + rulesItem, err := ResourceIBMMetricsRouterRouteMapToRulePrototype(value) if err != nil { return diag.FromErr(err) } @@ -297,14 +318,14 @@ func resourceIBMMetricsRouterRouteDelete(context context.Context, d *schema.Reso return nil } -func resourceIBMMetricsRouterRouteMapToRulePrototype(modelMap map[string]interface{}) (*metricsrouterv3.RulePrototype, error) { +func ResourceIBMMetricsRouterRouteMapToRulePrototype(modelMap map[string]interface{}) (*metricsrouterv3.RulePrototype, error) { model := &metricsrouterv3.RulePrototype{} if modelMap["action"] != nil && modelMap["action"].(string) != "" { model.Action = core.StringPtr(modelMap["action"].(string)) } targets := []metricsrouterv3.TargetIdentity{} for _, targetsItem := range modelMap["targets"].([]interface{}) { - targetsItemModel, err := resourceIBMMetricsRouterRouteMapToTargetIdentity(targetsItem.(map[string]interface{})) + targetsItemModel, err := ResourceIBMMetricsRouterRouteMapToTargetIdentity(targetsItem.(map[string]interface{})) if err != nil { return model, err } @@ -313,7 +334,7 @@ func resourceIBMMetricsRouterRouteMapToRulePrototype(modelMap map[string]interfa model.Targets = targets inclusionFilters := []metricsrouterv3.InclusionFilterPrototype{} for _, inclusionFiltersItem := range modelMap["inclusion_filters"].([]interface{}) { - inclusionFiltersItemModel, err := resourceIBMMetricsRouterRouteMapToInclusionFilterPrototype(inclusionFiltersItem.(map[string]interface{})) + inclusionFiltersItemModel, err := ResourceIBMMetricsRouterRouteMapToInclusionFilterPrototype(inclusionFiltersItem.(map[string]interface{})) if err != nil { return model, err } @@ -323,13 +344,13 @@ func resourceIBMMetricsRouterRouteMapToRulePrototype(modelMap map[string]interfa return model, nil } -func resourceIBMMetricsRouterRouteMapToTargetIdentity(modelMap map[string]interface{}) (*metricsrouterv3.TargetIdentity, error) { +func ResourceIBMMetricsRouterRouteMapToTargetIdentity(modelMap map[string]interface{}) (*metricsrouterv3.TargetIdentity, error) { model := &metricsrouterv3.TargetIdentity{} model.ID = core.StringPtr(modelMap["id"].(string)) return model, nil } -func resourceIBMMetricsRouterRouteMapToInclusionFilterPrototype(modelMap map[string]interface{}) (*metricsrouterv3.InclusionFilterPrototype, error) { +func ResourceIBMMetricsRouterRouteMapToInclusionFilterPrototype(modelMap map[string]interface{}) (*metricsrouterv3.InclusionFilterPrototype, error) { model := &metricsrouterv3.InclusionFilterPrototype{} model.Operand = core.StringPtr(modelMap["operand"].(string)) model.Operator = core.StringPtr(modelMap["operator"].(string)) @@ -341,14 +362,14 @@ func resourceIBMMetricsRouterRouteMapToInclusionFilterPrototype(modelMap map[str return model, nil } -func resourceIBMMetricsRouterRouteRulePrototypeToMap(model *metricsrouterv3.Rule) (map[string]interface{}, error) { +func ResourceIBMMetricsRouterRouteRuleToMap(model *metricsrouterv3.Rule) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) if model.Action != nil { - modelMap["action"] = model.Action + modelMap["action"] = *model.Action } targets := []map[string]interface{}{} for _, targetsItem := range model.Targets { - targetsItemMap, err := resourceIBMMetricsRouterRouteTargetIdentityToMap(&targetsItem) + targetsItemMap, err := ResourceIBMMetricsRouterRouteTargetReferenceToMap(&targetsItem) // #nosec G601 if err != nil { return modelMap, err } @@ -357,7 +378,7 @@ func resourceIBMMetricsRouterRouteRulePrototypeToMap(model *metricsrouterv3.Rule modelMap["targets"] = targets inclusionFilters := []map[string]interface{}{} for _, inclusionFiltersItem := range model.InclusionFilters { - inclusionFiltersItemMap, err := resourceIBMMetricsRouterRouteInclusionFilterPrototypeToMap(&inclusionFiltersItem) + inclusionFiltersItemMap, err := ResourceIBMMetricsRouterRouteInclusionFilterToMap(&inclusionFiltersItem) // #nosec G601 if err != nil { return modelMap, err } @@ -367,16 +388,16 @@ func resourceIBMMetricsRouterRouteRulePrototypeToMap(model *metricsrouterv3.Rule return modelMap, nil } -func resourceIBMMetricsRouterRouteTargetIdentityToMap(model *metricsrouterv3.TargetReference) (map[string]interface{}, error) { +func ResourceIBMMetricsRouterRouteTargetReferenceToMap(model *metricsrouterv3.TargetReference) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["id"] = model.ID + modelMap["id"] = *model.ID return modelMap, nil } -func resourceIBMMetricsRouterRouteInclusionFilterPrototypeToMap(model *metricsrouterv3.InclusionFilter) (map[string]interface{}, error) { +func ResourceIBMMetricsRouterRouteInclusionFilterToMap(model *metricsrouterv3.InclusionFilter) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) - modelMap["operand"] = model.Operand - modelMap["operator"] = model.Operator + modelMap["operand"] = *model.Operand + modelMap["operator"] = *model.Operator modelMap["values"] = model.Values return modelMap, nil } diff --git a/ibm/service/metricsrouter/resource_ibm_metrics_router_route_test.go b/ibm/service/metricsrouter/resource_ibm_metrics_router_route_test.go index 6c1e2e8fe75..0764f0c7ff7 100644 --- a/ibm/service/metricsrouter/resource_ibm_metrics_router_route_test.go +++ b/ibm/service/metricsrouter/resource_ibm_metrics_router_route_test.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package metricsrouter_test @@ -14,7 +14,10 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/metricsrouter" + "github.com/IBM/go-sdk-core/v5/core" "github.com/IBM/platform-services-go-sdk/metricsrouterv3" + "github.com/stretchr/testify/assert" ) func TestAccIBMMetricsRouterRouteBasic(t *testing.T) { @@ -191,6 +194,71 @@ func testAccCheckIBMMetricsRouterRouteConfigBasicWithoutAction(name string) stri }`, destinationCRN, name) } +func TestAccIBMMetricsRouterRouteAllArgs(t *testing.T) { + var conf metricsrouterv3.Route + name := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100)) + managedBy := "enterprise" + managedByTarget := managedBy + + nameUpdate := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100)) + managedByUpdate := "account" + managedByTargetUpdate := managedByUpdate + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMMetricsRouterRouteDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccCheckIBMMetricsRouterRouteConfig(name, managedBy, managedByTarget), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckIBMMetricsRouterRouteExists("ibm_metrics_router_route.metrics_router_route_instance", conf), + resource.TestCheckResourceAttr("ibm_metrics_router_route.metrics_router_route_instance", "name", name), + resource.TestCheckResourceAttr("ibm_metrics_router_route.metrics_router_route_instance", "managed_by", managedBy), + ), + }, + resource.TestStep{ + Config: testAccCheckIBMMetricsRouterRouteConfig(nameUpdate, managedByUpdate, managedByTargetUpdate), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("ibm_metrics_router_route.metrics_router_route_instance", "name", nameUpdate), + resource.TestCheckResourceAttr("ibm_metrics_router_route.metrics_router_route_instance", "managed_by", managedByUpdate), + ), + }, + resource.TestStep{ + ResourceName: "ibm_metrics_router_route.metrics_router_route_instance", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckIBMMetricsRouterRouteConfig(name string, managedBy string, managedTargetBy string) string { + return fmt.Sprintf(` + resource "ibm_metrics_router_target" "metrics_router_target_instance" { + name = "my-mr-target" + destination_crn = "%s" + managed_by = "%s" + } + + resource "ibm_metrics_router_route" "metrics_router_route_instance" { + name = "%s" + rules { + targets { + id = ibm_metrics_router_target.metrics_router_target_instance.id + } + inclusion_filters { + operand = "resource_type" + operator = "is" + values = ["worker"] + } + } + managed_by = "%s" + } + `, destinationCRN, managedTargetBy, name, managedBy) + +} + func testAccCheckIBMMetricsRouterRouteEmptyTarget(name string, action string) string { return fmt.Sprintf(` resource "ibm_metrics_router_route" "metrics_router_route_instance" { @@ -277,3 +345,159 @@ func testAccCheckIBMMetricsRouterRouteDestroy(s *terraform.State) error { return nil } + +func TestResourceIBMMetricsRouterRouteRuleToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + targetReferenceModel := make(map[string]interface{}) + targetReferenceModel["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + targetReferenceModel["crn"] = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + targetReferenceModel["name"] = "a-mr-target-us-south" + targetReferenceModel["target_type"] = "sysdig_monitor" + + inclusionFilterModel := make(map[string]interface{}) + inclusionFilterModel["operand"] = "location" + inclusionFilterModel["operator"] = "is" + inclusionFilterModel["values"] = []string{"us-south"} + + model := make(map[string]interface{}) + model["action"] = "send" + model["targets"] = []map[string]interface{}{targetReferenceModel} + model["inclusion_filters"] = []map[string]interface{}{inclusionFilterModel} + + assert.Equal(t, result, model) + } + + targetReferenceModel := new(metricsrouterv3.TargetReference) + targetReferenceModel.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + targetReferenceModel.CRN = core.StringPtr("crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::") + targetReferenceModel.Name = core.StringPtr("a-mr-target-us-south") + targetReferenceModel.TargetType = core.StringPtr("sysdig_monitor") + + inclusionFilterModel := new(metricsrouterv3.InclusionFilter) + inclusionFilterModel.Operand = core.StringPtr("location") + inclusionFilterModel.Operator = core.StringPtr("is") + inclusionFilterModel.Values = []string{"us-south"} + + model := new(metricsrouterv3.Rule) + model.Action = core.StringPtr("send") + model.Targets = []metricsrouterv3.TargetReference{*targetReferenceModel} + model.InclusionFilters = []metricsrouterv3.InclusionFilter{*inclusionFilterModel} + + result, err := metricsrouter.ResourceIBMMetricsRouterRouteRuleToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestResourceIBMMetricsRouterRouteTargetReferenceToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + model["crn"] = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + model["name"] = "a-mr-target-us-south" + model["target_type"] = "sysdig_monitor" + + assert.Equal(t, result, model) + } + + model := new(metricsrouterv3.TargetReference) + model.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + model.CRN = core.StringPtr("crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::") + model.Name = core.StringPtr("a-mr-target-us-south") + model.TargetType = core.StringPtr("sysdig_monitor") + + result, err := metricsrouter.ResourceIBMMetricsRouterRouteTargetReferenceToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestResourceIBMMetricsRouterRouteInclusionFilterToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["operand"] = "location" + model["operator"] = "is" + model["values"] = []string{"us-south"} + + assert.Equal(t, result, model) + } + + model := new(metricsrouterv3.InclusionFilter) + model.Operand = core.StringPtr("location") + model.Operator = core.StringPtr("is") + model.Values = []string{"us-south"} + + result, err := metricsrouter.ResourceIBMMetricsRouterRouteInclusionFilterToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestResourceIBMMetricsRouterRouteMapToRulePrototype(t *testing.T) { + checkResult := func(result *metricsrouterv3.RulePrototype) { + targetIdentityModel := new(metricsrouterv3.TargetIdentity) + targetIdentityModel.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + + inclusionFilterPrototypeModel := new(metricsrouterv3.InclusionFilterPrototype) + inclusionFilterPrototypeModel.Operand = core.StringPtr("location") + inclusionFilterPrototypeModel.Operator = core.StringPtr("is") + inclusionFilterPrototypeModel.Values = []string{"us-south"} + + model := new(metricsrouterv3.RulePrototype) + model.Action = core.StringPtr("send") + model.Targets = []metricsrouterv3.TargetIdentity{*targetIdentityModel} + model.InclusionFilters = []metricsrouterv3.InclusionFilterPrototype{*inclusionFilterPrototypeModel} + + assert.Equal(t, result, model) + } + + targetIdentityModel := make(map[string]interface{}) + targetIdentityModel["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + + inclusionFilterPrototypeModel := make(map[string]interface{}) + inclusionFilterPrototypeModel["operand"] = "location" + inclusionFilterPrototypeModel["operator"] = "is" + inclusionFilterPrototypeModel["values"] = []interface{}{"us-south"} + + model := make(map[string]interface{}) + model["action"] = "send" + model["targets"] = []interface{}{targetIdentityModel} + model["inclusion_filters"] = []interface{}{inclusionFilterPrototypeModel} + + result, err := metricsrouter.ResourceIBMMetricsRouterRouteMapToRulePrototype(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestResourceIBMMetricsRouterRouteMapToTargetIdentity(t *testing.T) { + checkResult := func(result *metricsrouterv3.TargetIdentity) { + model := new(metricsrouterv3.TargetIdentity) + model.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + + assert.Equal(t, result, model) + } + + model := make(map[string]interface{}) + model["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + + result, err := metricsrouter.ResourceIBMMetricsRouterRouteMapToTargetIdentity(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestResourceIBMMetricsRouterRouteMapToInclusionFilterPrototype(t *testing.T) { + checkResult := func(result *metricsrouterv3.InclusionFilterPrototype) { + model := new(metricsrouterv3.InclusionFilterPrototype) + model.Operand = core.StringPtr("location") + model.Operator = core.StringPtr("is") + model.Values = []string{"us-south"} + + assert.Equal(t, result, model) + } + + model := make(map[string]interface{}) + model["operand"] = "location" + model["operator"] = "is" + model["values"] = []interface{}{"us-south"} + + result, err := metricsrouter.ResourceIBMMetricsRouterRouteMapToInclusionFilterPrototype(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/metricsrouter/resource_ibm_metrics_router_settings.go b/ibm/service/metricsrouter/resource_ibm_metrics_router_settings.go index 300f7d7107b..c829063a240 100644 --- a/ibm/service/metricsrouter/resource_ibm_metrics_router_settings.go +++ b/ibm/service/metricsrouter/resource_ibm_metrics_router_settings.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.108.0-56772134-20251111-102802 + */ + package metricsrouter import ( @@ -117,7 +121,7 @@ func resourceIBMMetricsRouterSettingsCreate(context context.Context, d *schema.R var defaultTargets []metricsrouterv3.TargetIdentity for _, e := range d.Get("default_targets").([]interface{}) { value := e.(map[string]interface{}) - defaultTargetsItem, err := resourceIBMMetricsRouterSettingsMapToTargetIdentity(value) + defaultTargetsItem, err := ResourceIBMMetricsRouterSettingsMapToTargetIdentity(value) if err != nil { return diag.FromErr(err) } @@ -219,7 +223,7 @@ func resourceIBMMetricsRouterSettingsUpdate(context context.Context, d *schema.R var defaultTargets []metricsrouterv3.TargetIdentity for _, e := range d.Get("default_targets").([]interface{}) { value := e.(map[string]interface{}) - defaultTargetsItem, err := resourceIBMMetricsRouterSettingsMapToTargetIdentity(value) + defaultTargetsItem, err := ResourceIBMMetricsRouterSettingsMapToTargetIdentity(value) if err != nil { return diag.FromErr(err) } @@ -297,7 +301,7 @@ func resourceIBMMetricsRouterSettingsDelete(context context.Context, d *schema.R return nil } -func resourceIBMMetricsRouterSettingsMapToTargetIdentity(modelMap map[string]interface{}) (*metricsrouterv3.TargetIdentity, error) { +func ResourceIBMMetricsRouterSettingsMapToTargetIdentity(modelMap map[string]interface{}) (*metricsrouterv3.TargetIdentity, error) { model := &metricsrouterv3.TargetIdentity{} model.ID = core.StringPtr(modelMap["id"].(string)) return model, nil @@ -312,7 +316,7 @@ func resourceIBMMetricsRouterSettingsMapToTargetRefernce(modelMap map[string]int return model, nil } -func resourceIBMMetricsRouterSettingsTargetReferanceToMap(model *metricsrouterv3.TargetReference) (map[string]interface{}, error) { +func ResourceIBMMetricsRouterSettingsTargetReferenceToMap(model *metricsrouterv3.TargetReference) (map[string]interface{}, error) { modelMap := make(map[string]interface{}) modelMap["id"] = model.ID modelMap["crn"] = model.CRN diff --git a/ibm/service/metricsrouter/resource_ibm_metrics_router_settings_test.go b/ibm/service/metricsrouter/resource_ibm_metrics_router_settings_test.go index 0de4fe306db..5aff30092ed 100644 --- a/ibm/service/metricsrouter/resource_ibm_metrics_router_settings_test.go +++ b/ibm/service/metricsrouter/resource_ibm_metrics_router_settings_test.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package metricsrouter_test @@ -13,7 +13,10 @@ import ( acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" + "github.com/IBM-Cloud/terraform-provider-ibm/ibm/service/metricsrouter" + "github.com/IBM/go-sdk-core/v5/core" "github.com/IBM/platform-services-go-sdk/metricsrouterv3" + "github.com/stretchr/testify/assert" ) func TestAccIBMMetricsRouterSettingsBasic(t *testing.T) { @@ -202,3 +205,41 @@ func testAccCheckIBMMetricsRouterSettingsDestroy(s *terraform.State) error { return nil } + +func TestResourceIBMMetricsRouterSettingsTargetReferenceToMap(t *testing.T) { + checkResult := func(result map[string]interface{}) { + model := make(map[string]interface{}) + model["id"] = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + model["crn"] = core.StringPtr("crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::") + model["name"] = core.StringPtr("a-mr-target-us-south") + model["target_type"] = core.StringPtr("sysdig_monitor") + + assert.Equal(t, result, model) + } + + model := new(metricsrouterv3.TargetReference) + model.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + model.CRN = core.StringPtr("crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::") + model.Name = core.StringPtr("a-mr-target-us-south") + model.TargetType = core.StringPtr("sysdig_monitor") + + result, err := metricsrouter.ResourceIBMMetricsRouterSettingsTargetReferenceToMap(model) + assert.Nil(t, err) + checkResult(result) +} + +func TestResourceIBMMetricsRouterSettingsMapToTargetIdentity(t *testing.T) { + checkResult := func(result *metricsrouterv3.TargetIdentity) { + model := new(metricsrouterv3.TargetIdentity) + model.ID = core.StringPtr("c3af557f-fb0e-4476-85c3-0889e7fe7bc4") + + assert.Equal(t, result, model) + } + + model := make(map[string]interface{}) + model["id"] = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + + result, err := metricsrouter.ResourceIBMMetricsRouterSettingsMapToTargetIdentity(model) + assert.Nil(t, err) + checkResult(result) +} diff --git a/ibm/service/metricsrouter/resource_ibm_metrics_router_target.go b/ibm/service/metricsrouter/resource_ibm_metrics_router_target.go index 3ab0fe59414..91e22b62ca4 100644 --- a/ibm/service/metricsrouter/resource_ibm_metrics_router_target.go +++ b/ibm/service/metricsrouter/resource_ibm_metrics_router_target.go @@ -1,6 +1,10 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 +/* + * IBM OpenAPI Terraform Generator Version: 3.108.0-56772134-20251111-102802 + */ + package metricsrouter import ( @@ -14,6 +18,7 @@ import ( "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex" "github.com/IBM-Cloud/terraform-provider-ibm/ibm/validate" + "github.com/IBM/go-sdk-core/v5/core" "github.com/IBM/platform-services-go-sdk/metricsrouterv3" ) @@ -45,6 +50,14 @@ func ResourceIBMMetricsRouterTarget() *schema.Resource { ValidateFunc: validate.InvokeValidator("ibm_metrics_router_target", "region"), Description: "Include this optional field if you want to create a target in a different region other than the one you are connected.", }, + "managed_by": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Default: "account", + ValidateFunc: validate.InvokeValidator("ibm_metrics_router_target", "managed_by"), + Description: "Present when the target is enterprise-managed (`managed_by: enterprise`). For account-managed targets this field is omitted.", + }, "crn": &schema.Schema{ Type: schema.TypeString, Computed: true, @@ -99,6 +112,13 @@ func ResourceIBMMetricsRouterTargetValidator() *validate.ResourceValidator { MinValueLength: 3, MaxValueLength: 1000, }, + validate.ValidateSchema{ + Identifier: "managed_by", + ValidateFunctionIdentifier: validate.ValidateAllowedStringValue, + Type: validate.TypeString, + Optional: true, + AllowedValues: "account, enterprise", + }, ) resourceValidator := validate.ResourceValidator{ResourceName: "ibm_metrics_router_target", Schema: validateSchema} @@ -118,6 +138,9 @@ func resourceIBMMetricsRouterTargetCreate(context context.Context, d *schema.Res if _, ok := d.GetOk("region"); ok { createTargetOptions.SetRegion(d.Get("region").(string)) } + if _, ok := d.GetOk("managed_by"); ok { + createTargetOptions.SetManagedBy(d.Get("managed_by").(string)) + } target, response, err := metricsRouterClient.CreateTargetWithContext(context, createTargetOptions) if err != nil { @@ -164,6 +187,11 @@ func resourceIBMMetricsRouterTargetRead(context context.Context, d *schema.Resou } } } + if !core.IsNil(target.ManagedBy) { + if err = d.Set("managed_by", target.ManagedBy); err != nil { + return diag.FromErr(fmt.Errorf("Error setting managed_by: %s", err)) + } + } if err = d.Set("crn", target.CRN); err != nil { return diag.FromErr(fmt.Errorf("Error setting crn: %s", err)) } diff --git a/ibm/service/metricsrouter/resource_ibm_metrics_router_target_test.go b/ibm/service/metricsrouter/resource_ibm_metrics_router_target_test.go index 069f3c5bd68..eea00691a51 100644 --- a/ibm/service/metricsrouter/resource_ibm_metrics_router_target_test.go +++ b/ibm/service/metricsrouter/resource_ibm_metrics_router_target_test.go @@ -1,4 +1,4 @@ -// Copyright IBM Corp. 2023 All Rights Reserved. +// Copyright IBM Corp. 2025 All Rights Reserved. // Licensed under the Mozilla Public License v2.0 package metricsrouter_test @@ -55,6 +55,8 @@ func TestAccIBMMetricsRouterTargetAllArgs(t *testing.T) { name := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100)) region := "us-south" nameUpdate := fmt.Sprintf("updated_tf_name_%d", acctest.RandIntRange(10, 100)) + managedBy := "enterprise" + managedByUpdate := "account" resource.Test(t, resource.TestCase{ PreCheck: func() { acc.TestAccPreCheck(t) }, @@ -62,19 +64,21 @@ func TestAccIBMMetricsRouterTargetAllArgs(t *testing.T) { CheckDestroy: testAccCheckIBMMetricsRouterTargetDestroy, Steps: []resource.TestStep{ resource.TestStep{ - Config: testAccCheckIBMMetricsRouterTargetConfig(name, destinationCRN, region), + Config: testAccCheckIBMMetricsRouterTargetConfig(name, destinationCRN, region, managedBy), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckIBMMetricsRouterTargetExists("ibm_metrics_router_target.metrics_router_target_instance", conf), resource.TestCheckResourceAttr("ibm_metrics_router_target.metrics_router_target_instance", "name", name), resource.TestCheckResourceAttr("ibm_metrics_router_target.metrics_router_target_instance", "destination_crn", destinationCRN), resource.TestCheckResourceAttr("ibm_metrics_router_target.metrics_router_target_instance", "region", region), + resource.TestCheckResourceAttr("ibm_metrics_router_target.metrics_router_target_instance", "managed_by", managedBy), ), }, resource.TestStep{ - Config: testAccCheckIBMMetricsRouterTargetConfig(nameUpdate, destinationCRNUpdate, region), + Config: testAccCheckIBMMetricsRouterTargetConfig(nameUpdate, destinationCRNUpdate, region, managedByUpdate), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("ibm_metrics_router_target.metrics_router_target_instance", "name", nameUpdate), resource.TestCheckResourceAttr("ibm_metrics_router_target.metrics_router_target_instance", "destination_crn", destinationCRNUpdate), + resource.TestCheckResourceAttr("ibm_metrics_router_target.metrics_router_target_instance", "managed_by", managedByUpdate), ), }, }, @@ -83,7 +87,6 @@ func TestAccIBMMetricsRouterTargetAllArgs(t *testing.T) { func testAccCheckIBMMetricsRouterTargetConfigBasic(name string, destinationCRN string) string { return fmt.Sprintf(` - resource "ibm_metrics_router_target" "metrics_router_target_instance" { name = "%s" destination_crn = "%s" @@ -91,15 +94,16 @@ func testAccCheckIBMMetricsRouterTargetConfigBasic(name string, destinationCRN s `, name, destinationCRN) } -func testAccCheckIBMMetricsRouterTargetConfig(name string, destinationCRN string, region string) string { +func testAccCheckIBMMetricsRouterTargetConfig(name string, destinationCRN string, region string, managedBy string) string { return fmt.Sprintf(` resource "ibm_metrics_router_target" "metrics_router_target_instance" { name = "%s" destination_crn = "%s" region = "%s" + managed_by = "%s" } - `, name, destinationCRN, region) + `, name, destinationCRN, region, managedBy) } func testAccCheckIBMMetricsRouterTargetExists(n string, obj metricsrouterv3.Target) resource.TestCheckFunc { diff --git a/website/docs/d/metrics_router_routes.html.markdown b/website/docs/d/metrics_router_routes.html.markdown index 4f702f6d875..f02a0c7bd4e 100644 --- a/website/docs/d/metrics_router_routes.html.markdown +++ b/website/docs/d/metrics_router_routes.html.markdown @@ -8,42 +8,48 @@ subcategory: "IBM Cloud Metrics Routing" # ibm_metrics_router_routes -Provides a read-only data source for metrics_router_routes. You can then reference the fields of the data source in other resources within the same configuration using interpolation syntax. +Provides a read-only data source to retrieve information about metrics_router_routes. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. ## Example Usage ```hcl data "ibm_metrics_router_routes" "metrics_router_routes" { - name = ibm_metrics_router_route.metrics_router_route.name + name = ibm_metrics_router_route.metrics_router_route_instance.name } ``` ## Argument Reference -Review the argument reference that you can specify for your data source. +You can specify the following arguments for this data source. * `name` - (Optional, String) The name of the route. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. ## Attribute Reference -In addition to all argument references listed, you can access the following attribute references after your data source is created. +After your data source is created, you can read values from the following attributes. * `id` - The unique identifier of the metrics_router_routes. * `routes` - (List) A list of route resources. - * Constraints: The maximum length is `4` items. The minimum length is `0` items. -Nested scheme for **routes**: + * Constraints: The maximum length is `30` items. The minimum length is `0` items. +Nested schema for **routes**: * `created_at` - (String) The timestamp of the route creation time. * `crn` - (String) The crn of the route resource. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. * `id` - (String) The UUID of the route resource. + * Constraints: The maximum length is `1028` characters. The minimum length is `24` characters. + * `managed_by` - (String) Present when the route is enterprise-managed (`managed_by: enterprise`). + * Constraints: Allowable values are: `enterprise`, `account`. * `name` - (String) The name of the route. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. * `rules` - (List) The routing rules that will be evaluated in their order of the array. Once a rule is matched, the remaining rules in the route definition will be skipped. - * Constraints: The maximum length is `4` items. The minimum length is `0` items. - Nested scheme for **rules**: + * Constraints: The maximum length is `10` items. The minimum length is `1` item. + Nested schema for **rules**: * `action` - (String) The action if the inclusion_filters matches, default is `send` action. * Constraints: Allowable values are: `send`, `drop`. * `inclusion_filters` - (List) A list of conditions to be satisfied for routing metrics to pre-defined target. * Constraints: The maximum length is `7` items. The minimum length is `0` items. - Nested scheme for **inclusion_filters**: + Nested schema for **inclusion_filters**: * `operand` - (String) Part of CRN that can be compared with values. * Constraints: Allowable values are: `location`, `service_name`, `service_instance`, `resource_type`, `resource`. * `operator` - (String) The operation to be performed between operand and the provided values. 'is' to be used with one value and 'in' can support upto 20 values in the array. @@ -52,12 +58,13 @@ Nested scheme for **routes**: * Constraints: The maximum length is `20` items. The minimum length is `1` item. * `targets` - (List) The target ID List. All the metrics will be sent to all targets listed in the rule. You can include targets from other regions. * Constraints: The maximum length is `3` items. The minimum length is `0` items. - Nested scheme for **targets**: + Nested schema for **targets**: * `crn` - (String) The CRN of a pre-defined metrics-router target. * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:\/]+$/`. * `id` - (String) The target uuid for a pre-defined metrics router target. * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:]+$/`. * `name` - (String) The name of a pre-defined metrics-router target. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. * `target_type` - (String) The type of the target. * Constraints: Allowable values are: `sysdig_monitor`. * `updated_at` - (String) The timestamp of the route last updated time. diff --git a/website/docs/d/metrics_router_targets.html.markdown b/website/docs/d/metrics_router_targets.html.markdown index c5f5451b4ff..b31f24f9ac5 100644 --- a/website/docs/d/metrics_router_targets.html.markdown +++ b/website/docs/d/metrics_router_targets.html.markdown @@ -3,42 +3,49 @@ layout: "ibm" page_title: "IBM : ibm_metrics_router_targets" description: |- Get information about metrics_router_targets -subcategory: "IBM Cloud Metrics Routing" +subcategory: "Metrics Routing API Version 3" --- # ibm_metrics_router_targets -Provides a read-only data source for metrics_router_targets. You can then reference the fields of the data source in other resources within the same configuration using interpolation syntax. +Provides a read-only data source to retrieve information about metrics_router_targets. You can then reference the fields of the data source in other resources within the same configuration by using interpolation syntax. ## Example Usage ```hcl data "ibm_metrics_router_targets" "metrics_router_targets" { - name = ibm_metrics_router_target.metrics_router_target.name + name = ibm_metrics_router_target.metrics_router_target_instance.name } ``` ## Argument Reference -Review the argument reference that you can specify for your data source. +You can specify the following arguments for this data source. * `name` - (Optional, String) The name of the target resource. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. ## Attribute Reference -In addition to all argument references listed, you can access the following attribute references after your data source is created. +After your data source is created, you can read values from the following attributes. * `id` - The unique identifier of the metrics_router_targets. * `targets` - (List) A list of target resources. * Constraints: The maximum length is `32` items. The minimum length is `0` items. -Nested scheme for **targets**: +Nested schema for **targets**: * `created_at` - (String) The timestamp of the target creation time. * `crn` - (String) The crn of the target resource. - * `destination_crn` - (String) The CRN of the destination service instance or resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. Read [S2S authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details. + * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. + * `destination_crn` - (String) Cloud Resource Name (CRN) of the destination resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. See [service-to-service authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details. * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:\/]+$/`. * `id` - (String) The UUID of the target resource. + * Constraints: The maximum length is `1028` characters. The minimum length is `24` characters. + * `managed_by` - (String) Present when the target is enterprise-managed (`managed_by: enterprise`). For account-managed targets this field is omitted. + * Constraints: Allowable values are: `enterprise`, `account`. * `name` - (String) The name of the target resource. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. * `region` - (String) Include this optional field if you used it to create a target in a different region other than the one you are connected. + * Constraints: The maximum length is `256` characters. The minimum length is `3` characters. * `target_type` - (String) The type of the target. * Constraints: Allowable values are: `sysdig_monitor`. * `updated_at` - (String) The timestamp of the target last updated time. diff --git a/website/docs/r/metrics_router_route.html.markdown b/website/docs/r/metrics_router_route.html.markdown index 1665375ac3e..10fda4f386e 100644 --- a/website/docs/r/metrics_router_route.html.markdown +++ b/website/docs/r/metrics_router_route.html.markdown @@ -2,179 +2,90 @@ layout: "ibm" page_title: "IBM : ibm_metrics_router_route" description: |- - Manages metrics_router_route -subcategory: "IBM Cloud Metrics Routing" + Manages metrics_router_route. +subcategory: "Metrics Routing API Version 3" --- # ibm_metrics_router_route -Provides a resource for metrics_router_route. This allows metrics_router_route to be created, updated and deleted. +Create, update, and delete metrics_router_routes with this resource. ## Example Usage -### Example for a single rule and single inclusion_filter - ```hcl resource "ibm_metrics_router_route" "metrics_router_route_instance" { - name = "my-route" - rules { + managed_by = "enterprise" + name = "my-route" + rules { action = "send" targets { id = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + crn = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + name = "a-mr-target-us-south" + target_type = "sysdig_monitor" } inclusion_filters { operand = "location" operator = "is" values = [ "us-south" ] } - } -} -``` - -### Example for multiple rules and multiple inclusion_filters - -```hcl -resource "ibm_metrics_router_route" "metrics_router_route_instance" { - name = "my-route" - rules { - action = "send" - targets { - id = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" - } - inclusion_filters { - operand = "location" - operator = "is" - values = [ "us-south" ] - } - inclusion_filters { - operand = "service_name" - operator = "in" - values = ["metrics-router"] - } - } - rules { - action = "send" - targets { - id = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" - } - inclusion_filters { - operand = "resource_type" - operator = "is" - values = ["worker"] - } - } -} -``` - -### Example of route with drop action - -```hcl -resource "ibm_metrics_router_route" "metrics_router_route_instance" { - name = "my-route" - rules { - action = "drop" - inclusion_filters { - operand = "location" - operator = "is" - values = [ "us-south" ] - } - } + } } ``` ## Argument Reference -Review the argument reference that you can specify for your resource. +You can specify the following arguments for this resource. -* `name` - (Required, String) The name of the route. The name must be 1000 characters or less and cannot include any special characters other than `(space) - . _ :`. Do not include any personal identifying information (PII) in any resource names. - * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9 \\-._:]+$/`. -* `rules` - (Required, List) Routing rules that will be evaluated in their order of the array. - * Constraints: The maximum length is `4` items. The minimum length is `0` items. -Nested scheme for **rules**: +* `managed_by` - (Optional, String) Present when the route is enterprise-managed (`managed_by: enterprise`). + * Constraints: Allowable values are: `enterprise`, `account`. +* `name` - (Required, String) The name of the route. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. +* `rules` - (Required, List) The routing rules that will be evaluated in their order of the array. Once a rule is matched, the remaining rules in the route definition will be skipped. + * Constraints: The maximum length is `10` items. The minimum length is `1` item. +Nested schema for **rules**: * `action` - (Optional, String) The action if the inclusion_filters matches, default is `send` action. * Constraints: Allowable values are: `send`, `drop`. * `inclusion_filters` - (Required, List) A list of conditions to be satisfied for routing metrics to pre-defined target. * Constraints: The maximum length is `7` items. The minimum length is `0` items. - Nested scheme for **inclusion_filters**: + Nested schema for **inclusion_filters**: * `operand` - (Required, String) Part of CRN that can be compared with values. * Constraints: Allowable values are: `location`, `service_name`, `service_instance`, `resource_type`, `resource`. * `operator` - (Required, String) The operation to be performed between operand and the provided values. 'is' to be used with one value and 'in' can support upto 20 values in the array. * Constraints: Allowable values are: `is`, `in`. * `values` - (Required, List) The provided string values of the operand to be compared with. * Constraints: The maximum length is `20` items. The minimum length is `1` item. - * `targets` - (Required, List) A collection of targets with ID in the request. + * `targets` - (Required, List) The target ID List. All the metrics will be sent to all targets listed in the rule. You can include targets from other regions. * Constraints: The maximum length is `3` items. The minimum length is `0` items. - Nested scheme for **targets**: + Nested schema for **targets**: + * `crn` - (Required, String) The CRN of a pre-defined metrics-router target. + * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:\/]+$/`. * `id` - (Required, String) The target uuid for a pre-defined metrics router target. * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:]+$/`. + * `name` - (Required, String) The name of a pre-defined metrics-router target. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. + * `target_type` - (Required, String) The type of the target. + * Constraints: Allowable values are: `sysdig_monitor`. ## Attribute Reference -In addition to all argument references listed, you can access the following attribute references after your resource is created. +After your resource is created, you can read values from the listed arguments and the following attributes. * `id` - The unique identifier of the metrics_router_route. * `created_at` - (String) The timestamp of the route creation time. * `crn` - (String) The crn of the route resource. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. * `updated_at` - (String) The timestamp of the route last updated time. -## Provider Configuration - -The IBM Cloud provider offers a flexible means of providing credentials for authentication. The following methods are supported, in this order, and explained below: - -- Static credentials -- Environment variables - -To find which credentials are required for this resource, see the service table [here](https://cloud.ibm.com/docs/ibm-cloud-provider-for-terraform?topic=ibm-cloud-provider-for-terraform-provider-reference#required-parameters). - -### Static credentials - -You can provide your static credentials by adding the `ibmcloud_api_key`, `iaas_classic_username`, and `iaas_classic_api_key` arguments in the IBM Cloud provider block. - -Usage: -``` -provider "ibm" { - ibmcloud_api_key = "" - iaas_classic_username = "" - iaas_classic_api_key = "" -} -``` - -### Environment variables - -You can provide your credentials by exporting the `IC_API_KEY`, `IAAS_CLASSIC_USERNAME`, and `IAAS_CLASSIC_API_KEY` environment variables, representing your IBM Cloud platform API key, IBM Cloud Classic Infrastructure (SoftLayer) user name, and IBM Cloud infrastructure API key, respectively. - -``` -provider "ibm" {} -``` - -Usage: -``` -export IC_API_KEY="ibmcloud_api_key" -export IAAS_CLASSIC_USERNAME="iaas_classic_username" -export IAAS_CLASSIC_API_KEY="iaas_classic_api_key" -terraform plan -``` - -Note: - -1. Create or find your `ibmcloud_api_key` and `iaas_classic_api_key` [here](https://cloud.ibm.com/iam/apikeys). - - Select `My IBM Cloud API Keys` option from view dropdown for `ibmcloud_api_key` - - Select `Classic Infrastructure API Keys` option from view dropdown for `iaas_classic_api_key` -2. For iaas_classic_username - - Go to [Users](https://cloud.ibm.com/iam/users) - - Click on user. - - Find user name in the `VPN password` section under `User Details` tab - -For more informaton, see [here](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs#authentication). ## Import You can import the `ibm_metrics_router_route` resource by using `id`. The UUID of the route resource. # Syntax -``` -$ terraform import ibm_metrics_router_route.metrics_router_route -``` +
+$ terraform import ibm_metrics_router_route.metrics_router_route <id>
+
# Example ``` diff --git a/website/docs/r/metrics_router_settings.html.markdown b/website/docs/r/metrics_router_settings.html.markdown index 78ba0af680a..6902874e991 100644 --- a/website/docs/r/metrics_router_settings.html.markdown +++ b/website/docs/r/metrics_router_settings.html.markdown @@ -2,151 +2,69 @@ layout: "ibm" page_title: "IBM : ibm_metrics_router_settings" description: |- - Manages metrics_router_settings -subcategory: "IBM Cloud Metrics Routing" + Manages metrics_router_settings. +subcategory: "Metrics Routing API Version 3" --- # ibm_metrics_router_settings -Provides a resource for metrics_router_settings. This allows metrics_router_settings to be updated. +Create, update, and delete metrics_router_settingss with this resource. ## Example Usage -### Example with no default_targets - -```hcl -resource "ibm_metrics_router_settings" "metrics_router_settings_instance" { - permitted_target_regions = ["us-south"] - primary_metadata_region = "us-south" - backup_metadata_region = "us-east" - private_api_endpoint_only = false -} -``` - -### Example with single default_targets - ```hcl resource "ibm_metrics_router_settings" "metrics_router_settings_instance" { - default_targets { - id = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" - } - permitted_target_regions = ["us-south"] - primary_metadata_region = "us-south" backup_metadata_region = "us-east" - private_api_endpoint_only = false -} -``` - -### Example with multiple default_targets - -```hcl -resource "ibm_metrics_router_settings" "metrics_router_settings_instance" { default_targets { id = "c3af557f-fb0e-4476-85c3-0889e7fe7bc4" + crn = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + name = "a-mr-target-us-south" + target_type = "sysdig_monitor" } - default_targets { - id = "c3af557f-fb0e-2222-85c3-0889e7fe7bc4" - } - permitted_target_regions = ["us-south", "us-east"] + permitted_target_regions = us-south primary_metadata_region = "us-south" - backup_metadata_region = "us-east" - private_api_endpoint_only = false -} -``` - -### Example without permitted_target_regions - -```hcl -resource "ibm_metrics_router_settings" "metrics_router_settings_instance" { - permitted_target_regions = [] - primary_metadata_region = "us-south" - backup_metadata_region = "us-east" private_api_endpoint_only = false } ``` ## Argument Reference -Review the argument reference that you can specify for your resource. +You can specify the following arguments for this resource. * `backup_metadata_region` - (Optional, String) To backup all your meta data in a different region. * Constraints: The maximum length is `256` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-_]+$/`. -* `default_targets` - (Optional, List) A list of default target references. +* `default_targets` - (Optional, List) A list of default target references. Enterprise-managed targets are not supported. * Constraints: The maximum length is `2` items. The minimum length is `0` items. -Nested scheme for **default_targets**: +Nested schema for **default_targets**: + * `crn` - (Required, String) The CRN of a pre-defined metrics-router target. + * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:\/]+$/`. * `id` - (Required, String) The target uuid for a pre-defined metrics router target. * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:]+$/`. + * `name` - (Required, String) The name of a pre-defined metrics-router target. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. + * `target_type` - (Required, String) The type of the target. + * Constraints: Allowable values are: `sysdig_monitor`. * `permitted_target_regions` - (Optional, List) If present then only these regions may be used to define a target. * Constraints: The list items must match regular expression `/^[a-zA-Z0-9 \\-_]+$/`. The maximum length is `16` items. The minimum length is `0` items. -* `primary_metadata_region` - (Optional, String) To store all your meta data in a single region. For new accounts, all target / route creation will fail until primary_metadata_region is set. +* `primary_metadata_region` - (Optional, String) To store all your meta data in a single region. * Constraints: The maximum length is `256` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-_]+$/`. - * Note: In case of _ibm_metrics_router_settings_, we don't use a traditional ID to track it since its a resource without one. However, terraform expects there will be one. To work around this, we set the primary_metadata_region to be used as the ID. * `private_api_endpoint_only` - (Optional, Boolean) If you set this true then you cannot access api through public network. ## Attribute Reference -In addition to all argument references listed, you can access the following attribute references after your resource is created. +After your resource is created, you can read values from the listed arguments and the following attributes. * `id` - The unique identifier of the metrics_router_settings. -## Provider Configuration - -The IBM Cloud provider offers a flexible means of providing credentials for authentication. The following methods are supported, in this order, and explained below: - -- Static credentials -- Environment variables - -To find which credentials are required for this resource, see the service table [here](https://cloud.ibm.com/docs/ibm-cloud-provider-for-terraform?topic=ibm-cloud-provider-for-terraform-provider-reference#required-parameters). - -### Static credentials - -You can provide your static credentials by adding the `ibmcloud_api_key`, `iaas_classic_username`, and `iaas_classic_api_key` arguments in the IBM Cloud provider block. - -Usage: -``` -provider "ibm" { - ibmcloud_api_key = "" - iaas_classic_username = "" - iaas_classic_api_key = "" -} -``` - -### Environment variables - -You can provide your credentials by exporting the `IC_API_KEY`, `IAAS_CLASSIC_USERNAME`, and `IAAS_CLASSIC_API_KEY` environment variables, representing your IBM Cloud platform API key, IBM Cloud Classic Infrastructure (SoftLayer) user name, and IBM Cloud infrastructure API key, respectively. - -``` -provider "ibm" {} -``` - -Usage: -``` -export IC_API_KEY="ibmcloud_api_key" -export IAAS_CLASSIC_USERNAME="iaas_classic_username" -export IAAS_CLASSIC_API_KEY="iaas_classic_api_key" -terraform plan -``` - -Note: - -1. Create or find your `ibmcloud_api_key` and `iaas_classic_api_key` [here](https://cloud.ibm.com/iam/apikeys). - - Select `My IBM Cloud API Keys` option from view dropdown for `ibmcloud_api_key` - - Select `Classic Infrastructure API Keys` option from view dropdown for `iaas_classic_api_key` -2. For iaas_classic_username - - Go to [Users](https://cloud.ibm.com/iam/users) - - Click on user. - - Find user name in the `VPN password` section under `User Details` tab - -For more informaton, see [here](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs#authentication). ## Import You can import the `ibm_metrics_router_settings` resource by using `primary_metadata_region`. To store all your meta data in a single region. # Syntax -``` -$ terraform import ibm_metrics_router_settings.metrics_router_settings -``` +
+$ terraform import ibm_metrics_router_settings.metrics_router_settings <primary_metadata_region>
+
# Example ``` diff --git a/website/docs/r/metrics_router_target.html.markdown b/website/docs/r/metrics_router_target.html.markdown index f490a9caff4..9900550e10e 100644 --- a/website/docs/r/metrics_router_target.html.markdown +++ b/website/docs/r/metrics_router_target.html.markdown @@ -2,19 +2,20 @@ layout: "ibm" page_title: "IBM : ibm_metrics_router_target" description: |- - Manages metrics_router_target -subcategory: "IBM Cloud Metrics Routing" + Manages metrics_router_target. +subcategory: "Metrics Routing API Version 3" --- # ibm_metrics_router_target -Provides a resource for metrics_router_target. This allows metrics_router_target to be created, updated and deleted. +Create, update, and delete metrics_router_targets with this resource. ## Example Usage ```hcl resource "ibm_metrics_router_target" "metrics_router_target_instance" { destination_crn = "crn:v1:bluemix:public:sysdig-monitor:us-south:a/0be5ad401ae913d8ff665d92680664ed:22222222-2222-2222-2222-222222222222::" + managed_by = "enterprise" name = "my-mr-target" region = "us-south" } @@ -22,84 +23,38 @@ resource "ibm_metrics_router_target" "metrics_router_target_instance" { ## Argument Reference -Review the argument reference that you can specify for your resource. +You can specify the following arguments for this resource. -* `destination_crn` - (Required, String) The CRN of the destination resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. Read [S2S authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details. +* `destination_crn` - (Required, String) Cloud Resource Name (CRN) of the destination resource. Ensure you have a service authorization between IBM Cloud Metrics Routing and your Cloud resource. See [service-to-service authorization](https://cloud.ibm.com/docs/metrics-router?topic=metrics-router-target-monitoring&interface=ui#target-monitoring-ui) for details. * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:\/]+$/`. -* `name` - (Required, String) The name of the target. The name must be 1000 characters or less, and cannot include any special characters other than `(space) - . _ :`. Do not include any personal identifying information (PII) in any resource names. - * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. The value must match regular expression `/^[a-zA-Z0-9 \\-._:]+$/`. -* `region` - (Optional, String) Include this optional field if you want to create a target in a different region other than the one you are connected. - * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. The value must match regular expression `/^[a-zA-Z0-9 \\-._:]+$/`. +* `managed_by` - (Optional, String) Present when the target is enterprise-managed (`managed_by: enterprise`). For account-managed targets this field is omitted. + * Constraints: Allowable values are: `enterprise`, `account`. +* `name` - (Required, String) The name of the target resource. + * Constraints: The maximum length is `1000` characters. The minimum length is `1` character. +* `region` - (Optional, String) Include this optional field if you used it to create a target in a different region other than the one you are connected. + * Constraints: The maximum length is `256` characters. The minimum length is `3` characters. ## Attribute Reference -In addition to all argument references listed, you can access the following attribute references after your resource is created. +After your resource is created, you can read values from the listed arguments and the following attributes. * `id` - The unique identifier of the metrics_router_target. * `created_at` - (String) The timestamp of the target creation time. * `crn` - (String) The crn of the target resource. + * Constraints: The maximum length is `1000` characters. The minimum length is `3` characters. * `target_type` - (String) The type of the target. * Constraints: Allowable values are: `sysdig_monitor`. * `updated_at` - (String) The timestamp of the target last updated time. -## Provider Configuration - -The IBM Cloud provider offers a flexible means of providing credentials for authentication. The following methods are supported, in this order, and explained below: - -- Static credentials -- Environment variables - -To find which credentials are required for this resource, see the service table [here](https://cloud.ibm.com/docs/ibm-cloud-provider-for-terraform?topic=ibm-cloud-provider-for-terraform-provider-reference#required-parameters). - -### Static credentials - -You can provide your static credentials by adding the `ibmcloud_api_key`, `iaas_classic_username`, and `iaas_classic_api_key` arguments in the IBM Cloud provider block. - -Usage: -``` -provider "ibm" { - ibmcloud_api_key = "" - iaas_classic_username = "" - iaas_classic_api_key = "" -} -``` - -### Environment variables - -You can provide your credentials by exporting the `IC_API_KEY`, `IAAS_CLASSIC_USERNAME`, and `IAAS_CLASSIC_API_KEY` environment variables, representing your IBM Cloud platform API key, IBM Cloud Classic Infrastructure (SoftLayer) user name, and IBM Cloud infrastructure API key, respectively. - -``` -provider "ibm" {} -``` - -Usage: -``` -export IC_API_KEY="ibmcloud_api_key" -export IAAS_CLASSIC_USERNAME="iaas_classic_username" -export IAAS_CLASSIC_API_KEY="iaas_classic_api_key" -terraform plan -``` - -Note: - -1. Create or find your `ibmcloud_api_key` and `iaas_classic_api_key` [here](https://cloud.ibm.com/iam/apikeys). - - Select `My IBM Cloud API Keys` option from view dropdown for `ibmcloud_api_key` - - Select `Classic Infrastructure API Keys` option from view dropdown for `iaas_classic_api_key` -2. For iaas_classic_username - - Go to [Users](https://cloud.ibm.com/iam/users) - - Click on user. - - Find user name in the `VPN password` section under `User Details` tab - -For more informaton, see [here](https://registry.terraform.io/providers/IBM-Cloud/ibm/latest/docs#authentication). ## Import You can import the `ibm_metrics_router_target` resource by using `id`. The UUID of the target resource. # Syntax -``` -$ terraform import ibm_metrics_router_target.metrics_router_target -``` +
+$ terraform import ibm_metrics_router_target.metrics_router_target <id>
+
# Example ```