From 65eb36da62382e220d02446448ee5e3c3dd9dc5c Mon Sep 17 00:00:00 2001 From: "api-clients-generation-pipeline[bot]" <54105614+api-clients-generation-pipeline[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 15:02:58 +0000 Subject: [PATCH] Add metric_namespace_configs to GCP v2 API (#2763) Co-authored-by: ci.datadog-api-spec --- .apigentools-info | 8 +- .generator/schemas/v2/openapi.yaml | 22 +++ .../model_gcp_metric_namespace_config.go | 141 ++++++++++++++++++ ...model_gcpsts_service_account_attributes.go | 55 +++++-- .../features/v2/gcp_integration.feature | 8 +- 5 files changed, 216 insertions(+), 18 deletions(-) create mode 100644 api/datadogV2/model_gcp_metric_namespace_config.go diff --git a/.apigentools-info b/.apigentools-info index 76257f513e7..63c4a42b95e 100644 --- a/.apigentools-info +++ b/.apigentools-info @@ -4,13 +4,13 @@ "spec_versions": { "v1": { "apigentools_version": "1.6.6", - "regenerated": "2024-11-05 21:07:07.281849", - "spec_repo_commit": "6c0fa1b6" + "regenerated": "2024-11-05 22:28:17.079382", + "spec_repo_commit": "2db17c21" }, "v2": { "apigentools_version": "1.6.6", - "regenerated": "2024-11-05 21:07:07.300611", - "spec_repo_commit": "6c0fa1b6" + "regenerated": "2024-11-05 22:28:17.098505", + "spec_repo_commit": "2db17c21" } } } \ No newline at end of file diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 925dfca233a..ce1fe2fc60d 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -9623,6 +9623,20 @@ components: nullable: true type: array type: object + GCPMetricNamespaceConfig: + description: Configuration for a GCP metric namespace. + properties: + disabled: + default: false + description: When disabled, Datadog does not collect metrics that are related + to this GCP metric namespace. + example: true + type: boolean + id: + description: The id of the GCP metric namespace. + example: aiplatform + type: string + type: object GCPSTSDelegateAccount: description: Datadog principal service account info. properties: @@ -9725,6 +9739,14 @@ components: account.' example: true type: boolean + metric_namespace_configs: + description: Configurations for GCP metric namespaces. + example: + - disabled: true + id: aiplatform + items: + $ref: '#/components/schemas/GCPMetricNamespaceConfig' + type: array resource_collection_enabled: description: When enabled, Datadog scans for all resources in your GCP environment. type: boolean diff --git a/api/datadogV2/model_gcp_metric_namespace_config.go b/api/datadogV2/model_gcp_metric_namespace_config.go new file mode 100644 index 00000000000..a3cbee0326e --- /dev/null +++ b/api/datadogV2/model_gcp_metric_namespace_config.go @@ -0,0 +1,141 @@ +// 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 datadogV2 + +import ( + "github.com/DataDog/datadog-api-client-go/v2/api/datadog" +) + +// GCPMetricNamespaceConfig Configuration for a GCP metric namespace. +type GCPMetricNamespaceConfig struct { + // When disabled, Datadog does not collect metrics that are related to this GCP metric namespace. + Disabled *bool `json:"disabled,omitempty"` + // The id of the GCP metric namespace. + Id *string `json:"id,omitempty"` + // UnparsedObject contains the raw value of the object if there was an error when deserializing into the struct + UnparsedObject map[string]interface{} `json:"-"` + AdditionalProperties map[string]interface{} `json:"-"` +} + +// NewGCPMetricNamespaceConfig instantiates a new GCPMetricNamespaceConfig object. +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed. +func NewGCPMetricNamespaceConfig() *GCPMetricNamespaceConfig { + this := GCPMetricNamespaceConfig{} + var disabled bool = false + this.Disabled = &disabled + return &this +} + +// NewGCPMetricNamespaceConfigWithDefaults instantiates a new GCPMetricNamespaceConfig object. +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set. +func NewGCPMetricNamespaceConfigWithDefaults() *GCPMetricNamespaceConfig { + this := GCPMetricNamespaceConfig{} + var disabled bool = false + this.Disabled = &disabled + return &this +} + +// GetDisabled returns the Disabled field value if set, zero value otherwise. +func (o *GCPMetricNamespaceConfig) GetDisabled() bool { + if o == nil || o.Disabled == nil { + var ret bool + return ret + } + return *o.Disabled +} + +// GetDisabledOk returns a tuple with the Disabled field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *GCPMetricNamespaceConfig) GetDisabledOk() (*bool, bool) { + if o == nil || o.Disabled == nil { + return nil, false + } + return o.Disabled, true +} + +// HasDisabled returns a boolean if a field has been set. +func (o *GCPMetricNamespaceConfig) HasDisabled() bool { + return o != nil && o.Disabled != nil +} + +// SetDisabled gets a reference to the given bool and assigns it to the Disabled field. +func (o *GCPMetricNamespaceConfig) SetDisabled(v bool) { + o.Disabled = &v +} + +// GetId returns the Id field value if set, zero value otherwise. +func (o *GCPMetricNamespaceConfig) GetId() string { + if o == nil || o.Id == nil { + var ret string + return ret + } + return *o.Id +} + +// GetIdOk returns a tuple with the Id field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *GCPMetricNamespaceConfig) GetIdOk() (*string, bool) { + if o == nil || o.Id == nil { + return nil, false + } + return o.Id, true +} + +// HasId returns a boolean if a field has been set. +func (o *GCPMetricNamespaceConfig) HasId() bool { + return o != nil && o.Id != nil +} + +// SetId gets a reference to the given string and assigns it to the Id field. +func (o *GCPMetricNamespaceConfig) SetId(v string) { + o.Id = &v +} + +// MarshalJSON serializes the struct using spec logic. +func (o GCPMetricNamespaceConfig) MarshalJSON() ([]byte, error) { + toSerialize := map[string]interface{}{} + if o.UnparsedObject != nil { + return datadog.Marshal(o.UnparsedObject) + } + if o.Disabled != nil { + toSerialize["disabled"] = o.Disabled + } + if o.Id != nil { + toSerialize["id"] = o.Id + } + + for key, value := range o.AdditionalProperties { + toSerialize[key] = value + } + return datadog.Marshal(toSerialize) +} + +// UnmarshalJSON deserializes the given payload. +func (o *GCPMetricNamespaceConfig) UnmarshalJSON(bytes []byte) (err error) { + all := struct { + Disabled *bool `json:"disabled,omitempty"` + Id *string `json:"id,omitempty"` + }{} + if err = datadog.Unmarshal(bytes, &all); err != nil { + return datadog.Unmarshal(bytes, &o.UnparsedObject) + } + additionalProperties := make(map[string]interface{}) + if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + datadog.DeleteKeys(additionalProperties, &[]string{"disabled", "id"}) + } else { + return err + } + o.Disabled = all.Disabled + o.Id = all.Id + + if len(additionalProperties) > 0 { + o.AdditionalProperties = additionalProperties + } + + return nil +} diff --git a/api/datadogV2/model_gcpsts_service_account_attributes.go b/api/datadogV2/model_gcpsts_service_account_attributes.go index 079437a6c5a..e610f574486 100644 --- a/api/datadogV2/model_gcpsts_service_account_attributes.go +++ b/api/datadogV2/model_gcpsts_service_account_attributes.go @@ -27,6 +27,8 @@ type GCPSTSServiceAccountAttributes struct { IsResourceChangeCollectionEnabled *bool `json:"is_resource_change_collection_enabled,omitempty"` // When enabled, Datadog will attempt to collect Security Command Center Findings. Note: This requires additional permissions on the service account. IsSecurityCommandCenterEnabled *bool `json:"is_security_command_center_enabled,omitempty"` + // Configurations for GCP metric namespaces. + MetricNamespaceConfigs []GCPMetricNamespaceConfig `json:"metric_namespace_configs,omitempty"` // When enabled, Datadog scans for all resources in your GCP environment. ResourceCollectionEnabled *bool `json:"resource_collection_enabled,omitempty"` // UnparsedObject contains the raw value of the object if there was an error when deserializing into the struct @@ -283,6 +285,34 @@ func (o *GCPSTSServiceAccountAttributes) SetIsSecurityCommandCenterEnabled(v boo o.IsSecurityCommandCenterEnabled = &v } +// GetMetricNamespaceConfigs returns the MetricNamespaceConfigs field value if set, zero value otherwise. +func (o *GCPSTSServiceAccountAttributes) GetMetricNamespaceConfigs() []GCPMetricNamespaceConfig { + if o == nil || o.MetricNamespaceConfigs == nil { + var ret []GCPMetricNamespaceConfig + return ret + } + return o.MetricNamespaceConfigs +} + +// GetMetricNamespaceConfigsOk returns a tuple with the MetricNamespaceConfigs field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *GCPSTSServiceAccountAttributes) GetMetricNamespaceConfigsOk() (*[]GCPMetricNamespaceConfig, bool) { + if o == nil || o.MetricNamespaceConfigs == nil { + return nil, false + } + return &o.MetricNamespaceConfigs, true +} + +// HasMetricNamespaceConfigs returns a boolean if a field has been set. +func (o *GCPSTSServiceAccountAttributes) HasMetricNamespaceConfigs() bool { + return o != nil && o.MetricNamespaceConfigs != nil +} + +// SetMetricNamespaceConfigs gets a reference to the given []GCPMetricNamespaceConfig and assigns it to the MetricNamespaceConfigs field. +func (o *GCPSTSServiceAccountAttributes) SetMetricNamespaceConfigs(v []GCPMetricNamespaceConfig) { + o.MetricNamespaceConfigs = v +} + // GetResourceCollectionEnabled returns the ResourceCollectionEnabled field value if set, zero value otherwise. func (o *GCPSTSServiceAccountAttributes) GetResourceCollectionEnabled() bool { if o == nil || o.ResourceCollectionEnabled == nil { @@ -341,6 +371,9 @@ func (o GCPSTSServiceAccountAttributes) MarshalJSON() ([]byte, error) { if o.IsSecurityCommandCenterEnabled != nil { toSerialize["is_security_command_center_enabled"] = o.IsSecurityCommandCenterEnabled } + if o.MetricNamespaceConfigs != nil { + toSerialize["metric_namespace_configs"] = o.MetricNamespaceConfigs + } if o.ResourceCollectionEnabled != nil { toSerialize["resource_collection_enabled"] = o.ResourceCollectionEnabled } @@ -354,22 +387,23 @@ func (o GCPSTSServiceAccountAttributes) MarshalJSON() ([]byte, error) { // UnmarshalJSON deserializes the given payload. func (o *GCPSTSServiceAccountAttributes) UnmarshalJSON(bytes []byte) (err error) { all := struct { - AccountTags []string `json:"account_tags,omitempty"` - Automute *bool `json:"automute,omitempty"` - ClientEmail *string `json:"client_email,omitempty"` - CloudRunRevisionFilters []string `json:"cloud_run_revision_filters,omitempty"` - HostFilters []string `json:"host_filters,omitempty"` - IsCspmEnabled *bool `json:"is_cspm_enabled,omitempty"` - IsResourceChangeCollectionEnabled *bool `json:"is_resource_change_collection_enabled,omitempty"` - IsSecurityCommandCenterEnabled *bool `json:"is_security_command_center_enabled,omitempty"` - ResourceCollectionEnabled *bool `json:"resource_collection_enabled,omitempty"` + AccountTags []string `json:"account_tags,omitempty"` + Automute *bool `json:"automute,omitempty"` + ClientEmail *string `json:"client_email,omitempty"` + CloudRunRevisionFilters []string `json:"cloud_run_revision_filters,omitempty"` + HostFilters []string `json:"host_filters,omitempty"` + IsCspmEnabled *bool `json:"is_cspm_enabled,omitempty"` + IsResourceChangeCollectionEnabled *bool `json:"is_resource_change_collection_enabled,omitempty"` + IsSecurityCommandCenterEnabled *bool `json:"is_security_command_center_enabled,omitempty"` + MetricNamespaceConfigs []GCPMetricNamespaceConfig `json:"metric_namespace_configs,omitempty"` + ResourceCollectionEnabled *bool `json:"resource_collection_enabled,omitempty"` }{} if err = datadog.Unmarshal(bytes, &all); err != nil { return datadog.Unmarshal(bytes, &o.UnparsedObject) } additionalProperties := make(map[string]interface{}) if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { - datadog.DeleteKeys(additionalProperties, &[]string{"account_tags", "automute", "client_email", "cloud_run_revision_filters", "host_filters", "is_cspm_enabled", "is_resource_change_collection_enabled", "is_security_command_center_enabled", "resource_collection_enabled"}) + datadog.DeleteKeys(additionalProperties, &[]string{"account_tags", "automute", "client_email", "cloud_run_revision_filters", "host_filters", "is_cspm_enabled", "is_resource_change_collection_enabled", "is_security_command_center_enabled", "metric_namespace_configs", "resource_collection_enabled"}) } else { return err } @@ -381,6 +415,7 @@ func (o *GCPSTSServiceAccountAttributes) UnmarshalJSON(bytes []byte) (err error) o.IsCspmEnabled = all.IsCspmEnabled o.IsResourceChangeCollectionEnabled = all.IsResourceChangeCollectionEnabled o.IsSecurityCommandCenterEnabled = all.IsSecurityCommandCenterEnabled + o.MetricNamespaceConfigs = all.MetricNamespaceConfigs o.ResourceCollectionEnabled = all.ResourceCollectionEnabled if len(additionalProperties) > 0 { diff --git a/tests/scenarios/features/v2/gcp_integration.feature b/tests/scenarios/features/v2/gcp_integration.feature index 7ab3ec0b0eb..18749b0a6d0 100644 --- a/tests/scenarios/features/v2/gcp_integration.feature +++ b/tests/scenarios/features/v2/gcp_integration.feature @@ -34,14 +34,14 @@ Feature: GCP Integration @generated @skip @team:DataDog/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": [], "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true}, "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": [], "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}]}, "type": "gcp_service_account"}} When the request is sent Then the response status is 400 Bad Request @generated @skip @team:DataDog/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": [], "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true}, "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": [], "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}]}, "type": "gcp_service_account"}} When the request is sent Then the response status is 409 Conflict @@ -151,7 +151,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": [], "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true}, "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": [], "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}]}, "id": "d291291f-12c2-22g4-j290-123456678897", "type": "gcp_service_account"}} When the request is sent Then the response status is 400 Bad Request @@ -159,7 +159,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": [], "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true}, "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": [], "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}]}, "id": "d291291f-12c2-22g4-j290-123456678897", "type": "gcp_service_account"}} When the request is sent Then the response status is 404 Not Found