From fa3c00ac81c472e01cf9fb9f27828aea002d7153 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Wed, 11 Nov 2026 14:41:37 +0000 Subject: [PATCH] Regenerate client from commit 637fe58 of spec repo --- .generator/schemas/v2/openapi.yaml | 49 +++++ .../v2/model/GCPProjectFilterConfig.java | 188 ++++++++++++++++++ .../v2/model/GCPProjectFilterConfigType.java | 59 ++++++ .../model/GCPSTSServiceAccountAttributes.java | 56 ++++++ .../api/client/v2/api/gcp_integration.feature | 8 +- 5 files changed, 356 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/datadog/api/client/v2/model/GCPProjectFilterConfig.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/GCPProjectFilterConfigType.java diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index f0e8d45c0f9..5b7be0dd05e 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -61219,6 +61219,31 @@ components: - CLOUD_FUNCTION - CLOUD_RUN_REVISION - GCE_INSTANCE + GCPProjectFilterConfig: + description: Configuration for filtering the GCP projects that Datadog monitors, by project ID or by project label. + properties: + filters: + description: |- + List of filters matched against the project field set by `type`. Filters support the `*` and `?` wildcards, and a leading `!` makes a filter an exclusion. + A project is skipped if it matches any exclusion filter. When inclusion filters are set, a project must also match at least one of them. + For `project_id`, each filter is a project ID pattern, such as `prod-*`, with up to 15,000 filters. + For `project_label`, each filter is a label in the form `key:value`, such as `env:prod*`, with up to 100 filters. Keys are matched exactly and wildcards apply only to values, so `key:*` matches any value. + example: ["prod-*", "!prod-legacy"] + items: + description: A project filter + type: string + type: array + type: + $ref: "#/components/schemas/GCPProjectFilterConfigType" + type: object + GCPProjectFilterConfigType: + description: The GCP project field that the filters are matched against. + enum: ["project_id", "project_label"] + example: "project_id" + type: string + x-enum-varnames: + - PROJECT_ID + - PROJECT_LABEL GCPSTSDelegateAccount: description: Datadog principal service account info. properties: @@ -61353,6 +61378,14 @@ components: items: $ref: "#/components/schemas/GCPMonitoredResourceConfig" type: array + project_filter_configs: + description: |- + Configurations for limiting which of the GCP projects this service account can access are monitored by Datadog, with at most one configuration per type. A project is monitored only if it passes the filters of every configured type. By default, Datadog monitors every project the service account can access. + When updating a service account, omit this field to keep the current filters, or send an empty list to remove them. + example: [{"filters": ["prod-*", "!prod-legacy"], "type": "project_id"}, {"filters": ["env:prod*"], "type": "project_label"}] + items: + $ref: "#/components/schemas/GCPProjectFilterConfig" + type: array region_filter_configs: description: Configurations for GCP location filtering, such as region, multi-region, or zone. Only monitored resources that match the specified regions are imported into Datadog. By default, Datadog collects from all locations. example: ["nam4", "europe-north1"] @@ -200108,6 +200141,14 @@ paths: - filters: - $KEY:$VALUE type: gce_instance + project_filter_configs: + - filters: + - prod-* + - "!prod-legacy" + type: project_id + - filters: + - "env:prod*" + type: project_label region_filter_configs: - nam4 - europe-north1 @@ -200206,6 +200247,14 @@ paths: - filters: - $KEY:$VALUE type: gce_instance + project_filter_configs: + - filters: + - prod-* + - "!prod-legacy" + type: project_id + - filters: + - "env:prod*" + type: project_label region_filter_configs: - nam4 - europe-north1 diff --git a/src/main/java/com/datadog/api/client/v2/model/GCPProjectFilterConfig.java b/src/main/java/com/datadog/api/client/v2/model/GCPProjectFilterConfig.java new file mode 100644 index 00000000000..7a2aa096a82 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/GCPProjectFilterConfig.java @@ -0,0 +1,188 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * Configuration for filtering the GCP projects that Datadog monitors, by project ID or by project + * label. + */ +@JsonPropertyOrder({ + GCPProjectFilterConfig.JSON_PROPERTY_FILTERS, + GCPProjectFilterConfig.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class GCPProjectFilterConfig { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_FILTERS = "filters"; + private List filters = null; + + public static final String JSON_PROPERTY_TYPE = "type"; + private GCPProjectFilterConfigType type; + + public GCPProjectFilterConfig filters(List filters) { + this.filters = filters; + return this; + } + + public GCPProjectFilterConfig addFiltersItem(String filtersItem) { + if (this.filters == null) { + this.filters = new ArrayList<>(); + } + this.filters.add(filtersItem); + return this; + } + + /** + * List of filters matched against the project field set by type. Filters support the + * * and ? wildcards, and a leading ! makes a filter an + * exclusion. A project is skipped if it matches any exclusion filter. When inclusion filters are + * set, a project must also match at least one of them. For project_id, each filter + * is a project ID pattern, such as prod-*, with up to 15,000 filters. For + * project_label, each filter is a label in the form key:value, such as + * env:prod*, with up to 100 filters. Keys are matched exactly and wildcards apply only to + * values, so key:* matches any value. + * + * @return filters + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_FILTERS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getFilters() { + return filters; + } + + public void setFilters(List filters) { + this.filters = filters; + } + + public GCPProjectFilterConfig type(GCPProjectFilterConfigType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * The GCP project field that the filters are matched against. + * + * @return type + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public GCPProjectFilterConfigType getType() { + return type; + } + + public void setType(GCPProjectFilterConfigType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return GCPProjectFilterConfig + */ + @JsonAnySetter + public GCPProjectFilterConfig putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this GCPProjectFilterConfig object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + GCPProjectFilterConfig gcpProjectFilterConfig = (GCPProjectFilterConfig) o; + return Objects.equals(this.filters, gcpProjectFilterConfig.filters) + && Objects.equals(this.type, gcpProjectFilterConfig.type) + && Objects.equals(this.additionalProperties, gcpProjectFilterConfig.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(filters, type, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class GCPProjectFilterConfig {\n"); + sb.append(" filters: ").append(toIndentedString(filters)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/GCPProjectFilterConfigType.java b/src/main/java/com/datadog/api/client/v2/model/GCPProjectFilterConfigType.java new file mode 100644 index 00000000000..5113832ecba --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/GCPProjectFilterConfigType.java @@ -0,0 +1,59 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** The GCP project field that the filters are matched against. */ +@JsonSerialize(using = GCPProjectFilterConfigType.GCPProjectFilterConfigTypeSerializer.class) +public class GCPProjectFilterConfigType extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("project_id", "project_label")); + + public static final GCPProjectFilterConfigType PROJECT_ID = + new GCPProjectFilterConfigType("project_id"); + public static final GCPProjectFilterConfigType PROJECT_LABEL = + new GCPProjectFilterConfigType("project_label"); + + GCPProjectFilterConfigType(String value) { + super(value, allowedValues); + } + + public static class GCPProjectFilterConfigTypeSerializer + extends StdSerializer { + public GCPProjectFilterConfigTypeSerializer(Class t) { + super(t); + } + + public GCPProjectFilterConfigTypeSerializer() { + this(null); + } + + @Override + public void serialize( + GCPProjectFilterConfigType value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static GCPProjectFilterConfigType fromValue(String value) { + return new GCPProjectFilterConfigType(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/GCPSTSServiceAccountAttributes.java b/src/main/java/com/datadog/api/client/v2/model/GCPSTSServiceAccountAttributes.java index 8ae3c3036bc..b8b88b026ba 100644 --- a/src/main/java/com/datadog/api/client/v2/model/GCPSTSServiceAccountAttributes.java +++ b/src/main/java/com/datadog/api/client/v2/model/GCPSTSServiceAccountAttributes.java @@ -33,6 +33,7 @@ GCPSTSServiceAccountAttributes.JSON_PROPERTY_IS_SECURITY_COMMAND_CENTER_ENABLED, GCPSTSServiceAccountAttributes.JSON_PROPERTY_METRIC_NAMESPACE_CONFIGS, GCPSTSServiceAccountAttributes.JSON_PROPERTY_MONITORED_RESOURCE_CONFIGS, + GCPSTSServiceAccountAttributes.JSON_PROPERTY_PROJECT_FILTER_CONFIGS, GCPSTSServiceAccountAttributes.JSON_PROPERTY_REGION_FILTER_CONFIGS, GCPSTSServiceAccountAttributes.JSON_PROPERTY_RESOURCE_COLLECTION_ENABLED }) @@ -86,6 +87,9 @@ public class GCPSTSServiceAccountAttributes { "monitored_resource_configs"; private List monitoredResourceConfigs = null; + public static final String JSON_PROPERTY_PROJECT_FILTER_CONFIGS = "project_filter_configs"; + private List projectFilterConfigs = null; + public static final String JSON_PROPERTY_REGION_FILTER_CONFIGS = "region_filter_configs"; private List regionFilterConfigs = null; @@ -458,6 +462,52 @@ public void setMonitoredResourceConfigs( } } + public GCPSTSServiceAccountAttributes projectFilterConfigs( + List projectFilterConfigs) { + this.projectFilterConfigs = projectFilterConfigs; + if (projectFilterConfigs != null) { + for (GCPProjectFilterConfig item : projectFilterConfigs) { + this.unparsed |= item.unparsed; + } + } + return this; + } + + public GCPSTSServiceAccountAttributes addProjectFilterConfigsItem( + GCPProjectFilterConfig projectFilterConfigsItem) { + if (this.projectFilterConfigs == null) { + this.projectFilterConfigs = new ArrayList<>(); + } + this.projectFilterConfigs.add(projectFilterConfigsItem); + this.unparsed |= projectFilterConfigsItem.unparsed; + return this; + } + + /** + * Configurations for limiting which of the GCP projects this service account can access are + * monitored by Datadog, with at most one configuration per type. A project is monitored only if + * it passes the filters of every configured type. By default, Datadog monitors every project the + * service account can access. When updating a service account, omit this field to keep the + * current filters, or send an empty list to remove them. + * + * @return projectFilterConfigs + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_PROJECT_FILTER_CONFIGS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public List getProjectFilterConfigs() { + return projectFilterConfigs; + } + + public void setProjectFilterConfigs(List projectFilterConfigs) { + this.projectFilterConfigs = projectFilterConfigs; + if (projectFilterConfigs != null) { + for (GCPProjectFilterConfig item : projectFilterConfigs) { + this.unparsed |= item.unparsed; + } + } + } + public GCPSTSServiceAccountAttributes regionFilterConfigs(List regionFilterConfigs) { this.regionFilterConfigs = regionFilterConfigs; return this; @@ -592,6 +642,8 @@ public boolean equals(Object o) { this.metricNamespaceConfigs, gcpstsServiceAccountAttributes.metricNamespaceConfigs) && Objects.equals( this.monitoredResourceConfigs, gcpstsServiceAccountAttributes.monitoredResourceConfigs) + && Objects.equals( + this.projectFilterConfigs, gcpstsServiceAccountAttributes.projectFilterConfigs) && Objects.equals( this.regionFilterConfigs, gcpstsServiceAccountAttributes.regionFilterConfigs) && Objects.equals( @@ -617,6 +669,7 @@ public int hashCode() { isSecurityCommandCenterEnabled, metricNamespaceConfigs, monitoredResourceConfigs, + projectFilterConfigs, regionFilterConfigs, resourceCollectionEnabled, additionalProperties); @@ -655,6 +708,9 @@ public String toString() { sb.append(" monitoredResourceConfigs: ") .append(toIndentedString(monitoredResourceConfigs)) .append("\n"); + sb.append(" projectFilterConfigs: ") + .append(toIndentedString(projectFilterConfigs)) + .append("\n"); sb.append(" regionFilterConfigs: ") .append(toIndentedString(regionFilterConfigs)) .append("\n"); diff --git a/src/test/resources/com/datadog/api/client/v2/api/gcp_integration.feature b/src/test/resources/com/datadog/api/client/v2/api/gcp_integration.feature index a57193d2b93..2e455ed1ef3 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/gcp_integration.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/gcp_integration.feature @@ -34,14 +34,14 @@ Feature: GCP Integration @generated @skip @team:ddoghq/gcp-integrations Scenario: Create a new entry for your service account returns "Bad Request" response Given new "CreateGCPSTSAccount" request - And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_org_folder_resource_collection_enabled": false, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "region_filter_configs": ["nam4", "europe-north1"]}, "type": "gcp_service_account"}} + And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_org_folder_resource_collection_enabled": false, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "project_filter_configs": [{"filters": ["prod-*", "!prod-legacy"], "type": "project_id"}, {"filters": ["env:prod*"], "type": "project_label"}], "region_filter_configs": ["nam4", "europe-north1"]}, "type": "gcp_service_account"}} When the request is sent Then the response status is 400 Bad Request @generated @skip @team:ddoghq/gcp-integrations Scenario: Create a new entry for your service account returns "Conflict" response Given new "CreateGCPSTSAccount" request - And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_org_folder_resource_collection_enabled": false, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "region_filter_configs": ["nam4", "europe-north1"]}, "type": "gcp_service_account"}} + And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_org_folder_resource_collection_enabled": false, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "project_filter_configs": [{"filters": ["prod-*", "!prod-legacy"], "type": "project_id"}, {"filters": ["env:prod*"], "type": "project_label"}], "region_filter_configs": ["nam4", "europe-north1"]}, "type": "gcp_service_account"}} When the request is sent Then the response status is 409 Conflict @@ -161,7 +161,7 @@ Feature: GCP Integration Scenario: Update STS Service Account returns "Bad Request" response Given new "UpdateGCPSTSAccount" request And request contains "account_id" parameter from "REPLACE.ME" - And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_org_folder_resource_collection_enabled": false, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "region_filter_configs": ["nam4", "europe-north1"]}, "id": "d291291f-12c2-22g4-j290-123456678897", "type": "gcp_service_account"}} + And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_org_folder_resource_collection_enabled": false, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "project_filter_configs": [{"filters": ["prod-*", "!prod-legacy"], "type": "project_id"}, {"filters": ["env:prod*"], "type": "project_label"}], "region_filter_configs": ["nam4", "europe-north1"]}, "id": "d291291f-12c2-22g4-j290-123456678897", "type": "gcp_service_account"}} When the request is sent Then the response status is 400 Bad Request @@ -169,7 +169,7 @@ Feature: GCP Integration Scenario: Update STS Service Account returns "Not Found" response Given new "UpdateGCPSTSAccount" request And request contains "account_id" parameter from "REPLACE.ME" - And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_org_folder_resource_collection_enabled": false, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "region_filter_configs": ["nam4", "europe-north1"]}, "id": "d291291f-12c2-22g4-j290-123456678897", "type": "gcp_service_account"}} + And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_org_folder_resource_collection_enabled": false, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "project_filter_configs": [{"filters": ["prod-*", "!prod-legacy"], "type": "project_id"}, {"filters": ["env:prod*"], "type": "project_label"}], "region_filter_configs": ["nam4", "europe-north1"]}, "id": "d291291f-12c2-22g4-j290-123456678897", "type": "gcp_service_account"}} When the request is sent Then the response status is 404 Not Found