Skip to content

Commit

Permalink
Add metric_namespace_configs to GCP v2 API (#2763)
Browse files Browse the repository at this point in the history
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
  • Loading branch information
api-clients-generation-pipeline[bot] and ci.datadog-api-spec authored Nov 6, 2024
1 parent d4ad11b commit 65eb36d
Show file tree
Hide file tree
Showing 5 changed files with 216 additions and 18 deletions.
8 changes: 4 additions & 4 deletions .apigentools-info
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
}
22 changes: 22 additions & 0 deletions .generator/schemas/v2/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down
141 changes: 141 additions & 0 deletions api/datadogV2/model_gcp_metric_namespace_config.go
Original file line number Diff line number Diff line change
@@ -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
}
55 changes: 45 additions & 10 deletions api/datadogV2/model_gcpsts_service_account_attributes.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
}
Expand All @@ -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
}
Expand All @@ -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 {
Expand Down
8 changes: 4 additions & 4 deletions tests/scenarios/features/v2/gcp_integration.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -151,15 +151,15 @@ 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

@generated @skip @team:DataDog/gcp-integrations
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

Expand Down

0 comments on commit 65eb36d

Please sign in to comment.