diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index c1ed2925666..795f35ac355 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -19897,6 +19897,45 @@ components: x-enum-varnames: - "TRUE" - "FALSE" + CostTagMetadataMonth: + description: A month that has Cloud Cost Management tag metadata available for a given provider. + properties: + id: + description: The month, in `YYYY-MM` format. + example: "2026-04" + type: string + type: + $ref: "#/components/schemas/CostTagMetadataMonthType" + required: + - id + - type + type: object + CostTagMetadataMonthType: + default: cost_tag_metadata_month + description: Type of the Cloud Cost Management tag metadata month resource. + enum: + - cost_tag_metadata_month + example: cost_tag_metadata_month + type: string + x-enum-varnames: + - COST_TAG_METADATA_MONTH + CostTagMetadataMonthsResponse: + description: List of months that have Cloud Cost Management tag metadata for the requested provider, ordered most-recent first and capped at 36 months. + example: + data: + - id: "2026-04" + type: cost_tag_metadata_month + - id: "2026-03" + type: cost_tag_metadata_month + properties: + data: + description: List of months that have tag metadata available. + items: + $ref: "#/components/schemas/CostTagMetadataMonth" + type: array + required: + - data + type: object CostTagType: default: cost_tag description: Type of the Cloud Cost Management tag resource. @@ -111135,6 +111174,68 @@ paths: x-unstable: |- **Note**: This endpoint is in preview and is subject to change. If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/). + /api/v2/cost/tag_metadata/months: + get: + description: |- + List months that have Cloud Cost Management tag metadata for a given provider, + ordered most-recent first. The response is capped at 36 months. + operationId: ListCostTagMetadataMonths + parameters: + - description: |- + Provider to scope the query to. Use the value of the `providername` tag in CCM + (for example, `aws`, `azure`, `gcp`, `Oracle`, `Confluent Cloud`, `Snowflake`). + For costs uploaded through the Custom Costs API, use `custom`. + Values are case-sensitive. + example: aws + in: query + name: filter[provider] + required: true + schema: + type: string + responses: + "200": + content: + application/json: + examples: + default: + value: + data: + - id: "2026-04" + type: cost_tag_metadata_month + - id: "2026-03" + type: cost_tag_metadata_month + schema: + $ref: "#/components/schemas/CostTagMetadataMonthsResponse" + description: OK + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - cloud_cost_management_read + summary: List Cloud Cost Management tag metadata months + tags: + - Cloud Cost Management + "x-permission": + operator: OR + permissions: + - cloud_cost_management_read + x-unstable: |- + **Note**: This endpoint is in preview and is subject to change. + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/). /api/v2/cost/tag_metadata/orchestrators: get: description: List container orchestrators (for example, `kubernetes`, `ecs`) detected in Cloud Cost Management data for the requested period. diff --git a/api/datadog/configuration.go b/api/datadog/configuration.go index 2f7924bb4ca..6a6f231c3eb 100644 --- a/api/datadog/configuration.go +++ b/api/datadog/configuration.go @@ -852,6 +852,7 @@ func NewConfiguration() *Configuration { "v2.ListCostTagKeySources": false, "v2.ListCostTagMetadata": false, "v2.ListCostTagMetadataMetrics": false, + "v2.ListCostTagMetadataMonths": false, "v2.ListCostTagMetadataOrchestrators": false, "v2.SearchCostRecommendations": false, "v2.CreateDashboardSecureEmbed": false, diff --git a/api/datadogV2/api_cloud_cost_management.go b/api/datadogV2/api_cloud_cost_management.go index 9416f6b0ef6..b712a436d7f 100644 --- a/api/datadogV2/api_cloud_cost_management.go +++ b/api/datadogV2/api_cloud_cost_management.go @@ -4026,6 +4026,94 @@ func (a *CloudCostManagementApi) ListCostTagMetadataMetrics(ctx _context.Context return localVarReturnValue, localVarHTTPResponse, nil } +// ListCostTagMetadataMonths List Cloud Cost Management tag metadata months. +// List months that have Cloud Cost Management tag metadata for a given provider, +// ordered most-recent first. The response is capped at 36 months. +func (a *CloudCostManagementApi) ListCostTagMetadataMonths(ctx _context.Context, filterProvider string) (CostTagMetadataMonthsResponse, *_nethttp.Response, error) { + var ( + localVarHTTPMethod = _nethttp.MethodGet + localVarPostBody interface{} + localVarReturnValue CostTagMetadataMonthsResponse + ) + + operationId := "v2.ListCostTagMetadataMonths" + isOperationEnabled := a.Client.Cfg.IsUnstableOperationEnabled(operationId) + if !isOperationEnabled { + return localVarReturnValue, nil, datadog.GenericOpenAPIError{ErrorMessage: _fmt.Sprintf("Unstable operation '%s' is disabled", operationId)} + } + if isOperationEnabled && a.Client.Cfg.Debug { + _log.Printf("WARNING: Using unstable operation '%s'", operationId) + } + + localBasePath, err := a.Client.Cfg.ServerURLWithContext(ctx, "v2.CloudCostManagementApi.ListCostTagMetadataMonths") + if err != nil { + return localVarReturnValue, nil, datadog.GenericOpenAPIError{ErrorMessage: err.Error()} + } + + localVarPath := localBasePath + "/api/v2/cost/tag_metadata/months" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := _neturl.Values{} + localVarFormParams := _neturl.Values{} + localVarQueryParams.Add("filter[provider]", datadog.ParameterToString(filterProvider, "")) + localVarHeaderParams["Accept"] = "application/json" + + if a.Client.Cfg.DelegatedTokenConfig != nil { + err = datadog.UseDelegatedTokenAuth(ctx, &localVarHeaderParams, a.Client.Cfg.DelegatedTokenConfig) + if err != nil { + return localVarReturnValue, nil, err + } + } else { + datadog.SetAuthKeys( + ctx, + &localVarHeaderParams, + [2]string{"apiKeyAuth", "DD-API-KEY"}, + [2]string{"appKeyAuth", "DD-APPLICATION-KEY"}, + ) + } + req, err := a.Client.PrepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, nil) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.Client.CallAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := datadog.ReadBody(localVarHTTPResponse) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := datadog.GenericOpenAPIError{ + ErrorBody: localVarBody, + ErrorMessage: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 400 || localVarHTTPResponse.StatusCode == 403 || localVarHTTPResponse.StatusCode == 429 { + var v APIErrorResponse + err = a.Client.Decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.ErrorModel = v + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.Client.Decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := datadog.GenericOpenAPIError{ + ErrorBody: localVarBody, + ErrorMessage: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil +} + // ListCostTagMetadataOrchestratorsOptionalParameters holds optional parameters for ListCostTagMetadataOrchestrators. type ListCostTagMetadataOrchestratorsOptionalParameters struct { FilterProvider *string diff --git a/api/datadogV2/doc.go b/api/datadogV2/doc.go index eefb35b5373..5f7000870a7 100644 --- a/api/datadogV2/doc.go +++ b/api/datadogV2/doc.go @@ -270,6 +270,7 @@ // - [CloudCostManagementApi.ListCostTagKeys] // - [CloudCostManagementApi.ListCostTagMetadata] // - [CloudCostManagementApi.ListCostTagMetadataMetrics] +// - [CloudCostManagementApi.ListCostTagMetadataMonths] // - [CloudCostManagementApi.ListCostTagMetadataOrchestrators] // - [CloudCostManagementApi.ListCostTags] // - [CloudCostManagementApi.ListCustomAllocationRules] diff --git a/api/datadogV2/model_cost_tag_metadata_month.go b/api/datadogV2/model_cost_tag_metadata_month.go new file mode 100644 index 00000000000..51d8c6024a6 --- /dev/null +++ b/api/datadogV2/model_cost_tag_metadata_month.go @@ -0,0 +1,145 @@ +// 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 ( + "fmt" + + "github.com/DataDog/datadog-api-client-go/v2/api/datadog" +) + +// CostTagMetadataMonth A month that has Cloud Cost Management tag metadata available for a given provider. +type CostTagMetadataMonth struct { + // The month, in `YYYY-MM` format. + Id string `json:"id"` + // Type of the Cloud Cost Management tag metadata month resource. + Type CostTagMetadataMonthType `json:"type"` + // 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:"-"` +} + +// NewCostTagMetadataMonth instantiates a new CostTagMetadataMonth 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 NewCostTagMetadataMonth(id string, typeVar CostTagMetadataMonthType) *CostTagMetadataMonth { + this := CostTagMetadataMonth{} + this.Id = id + this.Type = typeVar + return &this +} + +// NewCostTagMetadataMonthWithDefaults instantiates a new CostTagMetadataMonth 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 NewCostTagMetadataMonthWithDefaults() *CostTagMetadataMonth { + this := CostTagMetadataMonth{} + var typeVar CostTagMetadataMonthType = COSTTAGMETADATAMONTHTYPE_COST_TAG_METADATA_MONTH + this.Type = typeVar + return &this +} + +// GetId returns the Id field value. +func (o *CostTagMetadataMonth) GetId() string { + if o == nil { + var ret string + return ret + } + return o.Id +} + +// GetIdOk returns a tuple with the Id field value +// and a boolean to check if the value has been set. +func (o *CostTagMetadataMonth) GetIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.Id, true +} + +// SetId sets field value. +func (o *CostTagMetadataMonth) SetId(v string) { + o.Id = v +} + +// GetType returns the Type field value. +func (o *CostTagMetadataMonth) GetType() CostTagMetadataMonthType { + if o == nil { + var ret CostTagMetadataMonthType + return ret + } + return o.Type +} + +// GetTypeOk returns a tuple with the Type field value +// and a boolean to check if the value has been set. +func (o *CostTagMetadataMonth) GetTypeOk() (*CostTagMetadataMonthType, bool) { + if o == nil { + return nil, false + } + return &o.Type, true +} + +// SetType sets field value. +func (o *CostTagMetadataMonth) SetType(v CostTagMetadataMonthType) { + o.Type = v +} + +// MarshalJSON serializes the struct using spec logic. +func (o CostTagMetadataMonth) MarshalJSON() ([]byte, error) { + toSerialize := map[string]interface{}{} + if o.UnparsedObject != nil { + return datadog.Marshal(o.UnparsedObject) + } + toSerialize["id"] = o.Id + toSerialize["type"] = o.Type + + for key, value := range o.AdditionalProperties { + toSerialize[key] = value + } + return datadog.Marshal(toSerialize) +} + +// UnmarshalJSON deserializes the given payload. +func (o *CostTagMetadataMonth) UnmarshalJSON(bytes []byte) (err error) { + all := struct { + Id *string `json:"id"` + Type *CostTagMetadataMonthType `json:"type"` + }{} + if err = datadog.Unmarshal(bytes, &all); err != nil { + return datadog.Unmarshal(bytes, &o.UnparsedObject) + } + if all.Id == nil { + return fmt.Errorf("required field id missing") + } + if all.Type == nil { + return fmt.Errorf("required field type missing") + } + additionalProperties := make(map[string]interface{}) + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { + datadog.DeleteKeys(additionalProperties, &[]string{"id", "type"}) + } else { + return err + } + + hasInvalidField := false + o.Id = *all.Id + if !all.Type.IsValid() { + hasInvalidField = true + } else { + o.Type = *all.Type + } + + if len(additionalProperties) > 0 { + o.AdditionalProperties = additionalProperties + } + + if hasInvalidField { + return datadog.Unmarshal(bytes, &o.UnparsedObject) + } + + return nil +} diff --git a/api/datadogV2/model_cost_tag_metadata_month_type.go b/api/datadogV2/model_cost_tag_metadata_month_type.go new file mode 100644 index 00000000000..af3ffbcdb79 --- /dev/null +++ b/api/datadogV2/model_cost_tag_metadata_month_type.go @@ -0,0 +1,64 @@ +// 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 ( + "fmt" + + "github.com/DataDog/datadog-api-client-go/v2/api/datadog" +) + +// CostTagMetadataMonthType Type of the Cloud Cost Management tag metadata month resource. +type CostTagMetadataMonthType string + +// List of CostTagMetadataMonthType. +const ( + COSTTAGMETADATAMONTHTYPE_COST_TAG_METADATA_MONTH CostTagMetadataMonthType = "cost_tag_metadata_month" +) + +var allowedCostTagMetadataMonthTypeEnumValues = []CostTagMetadataMonthType{ + COSTTAGMETADATAMONTHTYPE_COST_TAG_METADATA_MONTH, +} + +// GetAllowedValues reeturns the list of possible values. +func (v *CostTagMetadataMonthType) GetAllowedValues() []CostTagMetadataMonthType { + return allowedCostTagMetadataMonthTypeEnumValues +} + +// UnmarshalJSON deserializes the given payload. +func (v *CostTagMetadataMonthType) UnmarshalJSON(src []byte) error { + var value string + err := datadog.Unmarshal(src, &value) + if err != nil { + return err + } + *v = CostTagMetadataMonthType(value) + return nil +} + +// NewCostTagMetadataMonthTypeFromValue returns a pointer to a valid CostTagMetadataMonthType +// for the value passed as argument, or an error if the value passed is not allowed by the enum. +func NewCostTagMetadataMonthTypeFromValue(v string) (*CostTagMetadataMonthType, error) { + ev := CostTagMetadataMonthType(v) + if ev.IsValid() { + return &ev, nil + } + return nil, fmt.Errorf("invalid value '%v' for CostTagMetadataMonthType: valid values are %v", v, allowedCostTagMetadataMonthTypeEnumValues) +} + +// IsValid return true if the value is valid for the enum, false otherwise. +func (v CostTagMetadataMonthType) IsValid() bool { + for _, existing := range allowedCostTagMetadataMonthTypeEnumValues { + if existing == v { + return true + } + } + return false +} + +// Ptr returns reference to CostTagMetadataMonthType value. +func (v CostTagMetadataMonthType) Ptr() *CostTagMetadataMonthType { + return &v +} diff --git a/api/datadogV2/model_cost_tag_metadata_months_response.go b/api/datadogV2/model_cost_tag_metadata_months_response.go new file mode 100644 index 00000000000..a25d47e6b14 --- /dev/null +++ b/api/datadogV2/model_cost_tag_metadata_months_response.go @@ -0,0 +1,101 @@ +// 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 ( + "fmt" + + "github.com/DataDog/datadog-api-client-go/v2/api/datadog" +) + +// CostTagMetadataMonthsResponse List of months that have Cloud Cost Management tag metadata for the requested provider, ordered most-recent first and capped at 36 months. +type CostTagMetadataMonthsResponse struct { + // List of months that have tag metadata available. + Data []CostTagMetadataMonth `json:"data"` + // 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:"-"` +} + +// NewCostTagMetadataMonthsResponse instantiates a new CostTagMetadataMonthsResponse 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 NewCostTagMetadataMonthsResponse(data []CostTagMetadataMonth) *CostTagMetadataMonthsResponse { + this := CostTagMetadataMonthsResponse{} + this.Data = data + return &this +} + +// NewCostTagMetadataMonthsResponseWithDefaults instantiates a new CostTagMetadataMonthsResponse 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 NewCostTagMetadataMonthsResponseWithDefaults() *CostTagMetadataMonthsResponse { + this := CostTagMetadataMonthsResponse{} + return &this +} + +// GetData returns the Data field value. +func (o *CostTagMetadataMonthsResponse) GetData() []CostTagMetadataMonth { + if o == nil { + var ret []CostTagMetadataMonth + return ret + } + return o.Data +} + +// GetDataOk returns a tuple with the Data field value +// and a boolean to check if the value has been set. +func (o *CostTagMetadataMonthsResponse) GetDataOk() (*[]CostTagMetadataMonth, bool) { + if o == nil { + return nil, false + } + return &o.Data, true +} + +// SetData sets field value. +func (o *CostTagMetadataMonthsResponse) SetData(v []CostTagMetadataMonth) { + o.Data = v +} + +// MarshalJSON serializes the struct using spec logic. +func (o CostTagMetadataMonthsResponse) MarshalJSON() ([]byte, error) { + toSerialize := map[string]interface{}{} + if o.UnparsedObject != nil { + return datadog.Marshal(o.UnparsedObject) + } + toSerialize["data"] = o.Data + + for key, value := range o.AdditionalProperties { + toSerialize[key] = value + } + return datadog.Marshal(toSerialize) +} + +// UnmarshalJSON deserializes the given payload. +func (o *CostTagMetadataMonthsResponse) UnmarshalJSON(bytes []byte) (err error) { + all := struct { + Data *[]CostTagMetadataMonth `json:"data"` + }{} + if err = datadog.Unmarshal(bytes, &all); err != nil { + return datadog.Unmarshal(bytes, &o.UnparsedObject) + } + if all.Data == nil { + return fmt.Errorf("required field data missing") + } + additionalProperties := make(map[string]interface{}) + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { + datadog.DeleteKeys(additionalProperties, &[]string{"data"}) + } else { + return err + } + o.Data = *all.Data + + if len(additionalProperties) > 0 { + o.AdditionalProperties = additionalProperties + } + + return nil +} diff --git a/api/datadogV2/model_security_monitoring_dataset_attributes_request.go b/api/datadogV2/model_security_monitoring_dataset_attributes_request.go index d7e0b8f8995..7a27eac7f3d 100644 --- a/api/datadogV2/model_security_monitoring_dataset_attributes_request.go +++ b/api/datadogV2/model_security_monitoring_dataset_attributes_request.go @@ -158,7 +158,7 @@ func (o *SecurityMonitoringDatasetAttributesRequest) UnmarshalJSON(bytes []byte) return fmt.Errorf("required field definition missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"definition", "description", "version"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_attributes_response.go b/api/datadogV2/model_security_monitoring_dataset_attributes_response.go index 58a1f1f9fd2..9a0d78e73b0 100644 --- a/api/datadogV2/model_security_monitoring_dataset_attributes_response.go +++ b/api/datadogV2/model_security_monitoring_dataset_attributes_response.go @@ -465,7 +465,7 @@ func (o *SecurityMonitoringDatasetAttributesResponse) UnmarshalJSON(bytes []byte return fmt.Errorf("required field version missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"createdAt", "createdByHandle", "createdByName", "definition", "description", "id", "isDefault", "isDeprecated", "modifiedAt", "name", "updatedByHandle", "updatedByName", "version"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_column.go b/api/datadogV2/model_security_monitoring_dataset_column.go index ac90f45a473..83ff3d35111 100644 --- a/api/datadogV2/model_security_monitoring_dataset_column.go +++ b/api/datadogV2/model_security_monitoring_dataset_column.go @@ -117,7 +117,7 @@ func (o *SecurityMonitoringDatasetColumn) UnmarshalJSON(bytes []byte) (err error return fmt.Errorf("required field type missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"column", "type"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_create_data.go b/api/datadogV2/model_security_monitoring_dataset_create_data.go index 0dbda1cef76..68fddf93dd4 100644 --- a/api/datadogV2/model_security_monitoring_dataset_create_data.go +++ b/api/datadogV2/model_security_monitoring_dataset_create_data.go @@ -117,7 +117,7 @@ func (o *SecurityMonitoringDatasetCreateData) UnmarshalJSON(bytes []byte) (err e return fmt.Errorf("required field type missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"attributes", "type"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_create_request.go b/api/datadogV2/model_security_monitoring_dataset_create_request.go index 2df9e67fbe3..4a8fff50735 100644 --- a/api/datadogV2/model_security_monitoring_dataset_create_request.go +++ b/api/datadogV2/model_security_monitoring_dataset_create_request.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetCreateRequest) UnmarshalJSON(bytes []byte) (er return fmt.Errorf("required field data missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"data"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_create_response.go b/api/datadogV2/model_security_monitoring_dataset_create_response.go index 4eeb965db6b..3a4c6a97288 100644 --- a/api/datadogV2/model_security_monitoring_dataset_create_response.go +++ b/api/datadogV2/model_security_monitoring_dataset_create_response.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetCreateResponse) UnmarshalJSON(bytes []byte) (e return fmt.Errorf("required field data missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"data"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_create_response_data.go b/api/datadogV2/model_security_monitoring_dataset_create_response_data.go index 8aa0cb13564..f9d1eff11f8 100644 --- a/api/datadogV2/model_security_monitoring_dataset_create_response_data.go +++ b/api/datadogV2/model_security_monitoring_dataset_create_response_data.go @@ -117,7 +117,7 @@ func (o *SecurityMonitoringDatasetCreateResponseData) UnmarshalJSON(bytes []byte return fmt.Errorf("required field type missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"id", "type"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_data.go b/api/datadogV2/model_security_monitoring_dataset_data.go index 6d1488bcf1a..2bf0be9b0bf 100644 --- a/api/datadogV2/model_security_monitoring_dataset_data.go +++ b/api/datadogV2/model_security_monitoring_dataset_data.go @@ -148,7 +148,7 @@ func (o *SecurityMonitoringDatasetData) UnmarshalJSON(bytes []byte) (err error) return fmt.Errorf("required field type missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"attributes", "id", "type"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_definition.go b/api/datadogV2/model_security_monitoring_dataset_definition.go index ba613013071..7baa3cd32ee 100644 --- a/api/datadogV2/model_security_monitoring_dataset_definition.go +++ b/api/datadogV2/model_security_monitoring_dataset_definition.go @@ -358,7 +358,7 @@ func (o *SecurityMonitoringDatasetDefinition) UnmarshalJSON(bytes []byte) (err e return fmt.Errorf("required field name missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"columns", "data_source", "indexes", "name", "query_filter", "search", "storage", "table_name", "time_window"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_dependencies_request.go b/api/datadogV2/model_security_monitoring_dataset_dependencies_request.go index fa3481298af..ce2296c91f0 100644 --- a/api/datadogV2/model_security_monitoring_dataset_dependencies_request.go +++ b/api/datadogV2/model_security_monitoring_dataset_dependencies_request.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetDependenciesRequest) UnmarshalJSON(bytes []byt return fmt.Errorf("required field data missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"data"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_dependencies_request_attributes.go b/api/datadogV2/model_security_monitoring_dataset_dependencies_request_attributes.go index e5346cbe1f6..d71edfd271d 100644 --- a/api/datadogV2/model_security_monitoring_dataset_dependencies_request_attributes.go +++ b/api/datadogV2/model_security_monitoring_dataset_dependencies_request_attributes.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetDependenciesRequestAttributes) UnmarshalJSON(b return fmt.Errorf("required field datasetIds missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"datasetIds"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_dependencies_request_data.go b/api/datadogV2/model_security_monitoring_dataset_dependencies_request_data.go index 0a20b4fb04a..39744aceb43 100644 --- a/api/datadogV2/model_security_monitoring_dataset_dependencies_request_data.go +++ b/api/datadogV2/model_security_monitoring_dataset_dependencies_request_data.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetDependenciesRequestData) UnmarshalJSON(bytes [ return fmt.Errorf("required field attributes missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"attributes"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_dependencies_response.go b/api/datadogV2/model_security_monitoring_dataset_dependencies_response.go index 9f41c9ece4e..fabead7009a 100644 --- a/api/datadogV2/model_security_monitoring_dataset_dependencies_response.go +++ b/api/datadogV2/model_security_monitoring_dataset_dependencies_response.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetDependenciesResponse) UnmarshalJSON(bytes []by return fmt.Errorf("required field data missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"data"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_dependents_attributes.go b/api/datadogV2/model_security_monitoring_dataset_dependents_attributes.go index 9e1c8f4f8f8..8dcfa69f5f9 100644 --- a/api/datadogV2/model_security_monitoring_dataset_dependents_attributes.go +++ b/api/datadogV2/model_security_monitoring_dataset_dependents_attributes.go @@ -179,7 +179,7 @@ func (o *SecurityMonitoringDatasetDependentsAttributes) UnmarshalJSON(bytes []by return fmt.Errorf("required field resource_type missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"count", "datasetId", "ids", "resource_type"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_dependents_data.go b/api/datadogV2/model_security_monitoring_dataset_dependents_data.go index 7d2f4aad2e9..3a6a4ccc0c9 100644 --- a/api/datadogV2/model_security_monitoring_dataset_dependents_data.go +++ b/api/datadogV2/model_security_monitoring_dataset_dependents_data.go @@ -148,7 +148,7 @@ func (o *SecurityMonitoringDatasetDependentsData) UnmarshalJSON(bytes []byte) (e return fmt.Errorf("required field type missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"attributes", "id", "type"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_response.go b/api/datadogV2/model_security_monitoring_dataset_response.go index 1c96b08a26a..fc1a3120408 100644 --- a/api/datadogV2/model_security_monitoring_dataset_response.go +++ b/api/datadogV2/model_security_monitoring_dataset_response.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetResponse) UnmarshalJSON(bytes []byte) (err err return fmt.Errorf("required field data missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"data"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_search.go b/api/datadogV2/model_security_monitoring_dataset_search.go index 073d2b691b4..125ccdeceb0 100644 --- a/api/datadogV2/model_security_monitoring_dataset_search.go +++ b/api/datadogV2/model_security_monitoring_dataset_search.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetSearch) UnmarshalJSON(bytes []byte) (err error return fmt.Errorf("required field query missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"query"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_time_window.go b/api/datadogV2/model_security_monitoring_dataset_time_window.go index 088ef5bba15..8dfaef43a89 100644 --- a/api/datadogV2/model_security_monitoring_dataset_time_window.go +++ b/api/datadogV2/model_security_monitoring_dataset_time_window.go @@ -121,7 +121,7 @@ func (o *SecurityMonitoringDatasetTimeWindow) UnmarshalJSON(bytes []byte) (err e return datadog.Unmarshal(bytes, &o.UnparsedObject) } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"from", "to"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_update_data.go b/api/datadogV2/model_security_monitoring_dataset_update_data.go index 4656c9f833f..9bd2ecfd502 100644 --- a/api/datadogV2/model_security_monitoring_dataset_update_data.go +++ b/api/datadogV2/model_security_monitoring_dataset_update_data.go @@ -117,7 +117,7 @@ func (o *SecurityMonitoringDatasetUpdateData) UnmarshalJSON(bytes []byte) (err e return fmt.Errorf("required field type missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"attributes", "type"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_update_request.go b/api/datadogV2/model_security_monitoring_dataset_update_request.go index 7dfeb5bc596..c6e092ce384 100644 --- a/api/datadogV2/model_security_monitoring_dataset_update_request.go +++ b/api/datadogV2/model_security_monitoring_dataset_update_request.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetUpdateRequest) UnmarshalJSON(bytes []byte) (er return fmt.Errorf("required field data missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"data"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_version_entry.go b/api/datadogV2/model_security_monitoring_dataset_version_entry.go index a84651d5b3f..a65b8ccbfb3 100644 --- a/api/datadogV2/model_security_monitoring_dataset_version_entry.go +++ b/api/datadogV2/model_security_monitoring_dataset_version_entry.go @@ -117,7 +117,7 @@ func (o *SecurityMonitoringDatasetVersionEntry) UnmarshalJSON(bytes []byte) (err return fmt.Errorf("required field dataset missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"changes", "dataset"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_version_field_change.go b/api/datadogV2/model_security_monitoring_dataset_version_field_change.go index c525092d631..2db89c940f1 100644 --- a/api/datadogV2/model_security_monitoring_dataset_version_field_change.go +++ b/api/datadogV2/model_security_monitoring_dataset_version_field_change.go @@ -148,7 +148,7 @@ func (o *SecurityMonitoringDatasetVersionFieldChange) UnmarshalJSON(bytes []byte return fmt.Errorf("required field previous missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"current", "field", "previous"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_version_history_attributes.go b/api/datadogV2/model_security_monitoring_dataset_version_history_attributes.go index 781b20ca148..6f753b1ce5c 100644 --- a/api/datadogV2/model_security_monitoring_dataset_version_history_attributes.go +++ b/api/datadogV2/model_security_monitoring_dataset_version_history_attributes.go @@ -117,7 +117,7 @@ func (o *SecurityMonitoringDatasetVersionHistoryAttributes) UnmarshalJSON(bytes return fmt.Errorf("required field data missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"count", "data"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_version_history_data.go b/api/datadogV2/model_security_monitoring_dataset_version_history_data.go index 3a4e7f993fc..249fe549367 100644 --- a/api/datadogV2/model_security_monitoring_dataset_version_history_data.go +++ b/api/datadogV2/model_security_monitoring_dataset_version_history_data.go @@ -148,7 +148,7 @@ func (o *SecurityMonitoringDatasetVersionHistoryData) UnmarshalJSON(bytes []byte return fmt.Errorf("required field type missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"attributes", "id", "type"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_dataset_version_history_response.go b/api/datadogV2/model_security_monitoring_dataset_version_history_response.go index 3174490d646..0b43787f166 100644 --- a/api/datadogV2/model_security_monitoring_dataset_version_history_response.go +++ b/api/datadogV2/model_security_monitoring_dataset_version_history_response.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetVersionHistoryResponse) UnmarshalJSON(bytes [] return fmt.Errorf("required field data missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"data"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_datasets_list_meta.go b/api/datadogV2/model_security_monitoring_datasets_list_meta.go index 4ec3e719463..207ae083ddb 100644 --- a/api/datadogV2/model_security_monitoring_datasets_list_meta.go +++ b/api/datadogV2/model_security_monitoring_datasets_list_meta.go @@ -86,7 +86,7 @@ func (o *SecurityMonitoringDatasetsListMeta) UnmarshalJSON(bytes []byte) (err er return fmt.Errorf("required field totalCount missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"totalCount"}) } else { return err diff --git a/api/datadogV2/model_security_monitoring_datasets_list_response.go b/api/datadogV2/model_security_monitoring_datasets_list_response.go index 6225b769693..202d9aba829 100644 --- a/api/datadogV2/model_security_monitoring_datasets_list_response.go +++ b/api/datadogV2/model_security_monitoring_datasets_list_response.go @@ -117,7 +117,7 @@ func (o *SecurityMonitoringDatasetsListResponse) UnmarshalJSON(bytes []byte) (er return fmt.Errorf("required field meta missing") } additionalProperties := make(map[string]interface{}) - if err = datadog.Unmarshal(bytes, &additionalProperties); err == nil { + if err = datadog.UnmarshalUseNumber(bytes, &additionalProperties); err == nil { datadog.DeleteKeys(additionalProperties, &[]string{"data", "meta"}) } else { return err diff --git a/examples/v2/cloud-cost-management/ListCostTagMetadataMonths.go b/examples/v2/cloud-cost-management/ListCostTagMetadataMonths.go new file mode 100644 index 00000000000..95d33953b68 --- /dev/null +++ b/examples/v2/cloud-cost-management/ListCostTagMetadataMonths.go @@ -0,0 +1,30 @@ +// List Cloud Cost Management tag metadata months returns "OK" response + +package main + +import ( + "context" + "encoding/json" + "fmt" + "os" + + "github.com/DataDog/datadog-api-client-go/v2/api/datadog" + "github.com/DataDog/datadog-api-client-go/v2/api/datadogV2" +) + +func main() { + ctx := datadog.NewDefaultContext(context.Background()) + configuration := datadog.NewConfiguration() + configuration.SetUnstableOperationEnabled("v2.ListCostTagMetadataMonths", true) + apiClient := datadog.NewAPIClient(configuration) + api := datadogV2.NewCloudCostManagementApi(apiClient) + resp, r, err := api.ListCostTagMetadataMonths(ctx, "filter[provider]") + + if err != nil { + fmt.Fprintf(os.Stderr, "Error when calling `CloudCostManagementApi.ListCostTagMetadataMonths`: %v\n", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + } + + responseContent, _ := json.MarshalIndent(resp, "", " ") + fmt.Fprintf(os.Stdout, "Response from `CloudCostManagementApi.ListCostTagMetadataMonths`:\n%s\n", responseContent) +} diff --git a/tests/scenarios/features/v2/cloud_cost_management.feature b/tests/scenarios/features/v2/cloud_cost_management.feature index 17779e4599e..b41928f4cb9 100644 --- a/tests/scenarios/features/v2/cloud_cost_management.feature +++ b/tests/scenarios/features/v2/cloud_cost_management.feature @@ -606,6 +606,22 @@ Feature: Cloud Cost Management When the request is sent Then the response status is 200 OK + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag metadata months returns "Bad Request" response + Given operation "ListCostTagMetadataMonths" enabled + And new "ListCostTagMetadataMonths" request + And request contains "filter[provider]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag metadata months returns "OK" response + Given operation "ListCostTagMetadataMonths" enabled + And new "ListCostTagMetadataMonths" request + And request contains "filter[provider]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + @generated @skip @team:DataDog/cloud-cost-management Scenario: List Cloud Cost Management tag sources returns "Bad Request" response Given operation "ListCostTagKeySources" enabled diff --git a/tests/scenarios/features/v2/undo.json b/tests/scenarios/features/v2/undo.json index d86d61c2288..09d6acff288 100644 --- a/tests/scenarios/features/v2/undo.json +++ b/tests/scenarios/features/v2/undo.json @@ -1898,6 +1898,12 @@ "type": "safe" } }, + "ListCostTagMetadataMonths": { + "tag": "Cloud Cost Management", + "undo": { + "type": "safe" + } + }, "ListCostTagMetadataOrchestrators": { "tag": "Cloud Cost Management", "undo": {