diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 82b87c5b7..eea8d903b 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -1496,6 +1496,8 @@ components: $ref: '#/components/schemas/AWSAccountPartition' aws_regions: $ref: '#/components/schemas/AWSRegions' + ccm_config: + $ref: '#/components/schemas/AWSCCMConfig' logs_config: $ref: '#/components/schemas/AWSLogsConfig' metrics_config: @@ -1561,6 +1563,8 @@ components: $ref: '#/components/schemas/AWSAccountPartition' aws_regions: $ref: '#/components/schemas/AWSRegions' + ccm_config: + $ref: '#/components/schemas/AWSCCMConfig' created_at: description: Timestamp of when the account integration was created. format: date-time @@ -1634,6 +1638,8 @@ components: $ref: '#/components/schemas/AWSAccountPartition' aws_regions: $ref: '#/components/schemas/AWSRegions' + ccm_config: + $ref: '#/components/schemas/AWSCCMConfig' logs_config: $ref: '#/components/schemas/AWSLogsConfig' metrics_config: @@ -1765,6 +1771,15 @@ components: required: - role_name type: object + AWSCCMConfig: + description: AWS Cloud Cost Management config. + properties: + data_export_configs: + description: List of data export configurations for Cost and Usage Reports. + items: + $ref: '#/components/schemas/DataExportConfig' + type: array + type: object AWSCredentials: description: The definition of `AWSCredentials` object. oneOf: @@ -16354,6 +16369,30 @@ components: example: canceled type: string type: object + DataExportConfig: + description: AWS Cost and Usage Report data export configuration. + properties: + bucket_name: + description: Name of the S3 bucket where the Cost and Usage Report is stored. + example: billing + type: string + bucket_region: + description: AWS region of the S3 bucket. + example: us-east-1 + type: string + report_name: + description: Name of the Cost and Usage Report. + example: cost-and-usage-report + type: string + report_prefix: + description: S3 prefix where the Cost and Usage Report is stored. + example: reports + type: string + report_type: + description: Type of the Cost and Usage Report. + example: CUR2.0 + type: string + type: object DataRelationshipsTeams: description: Associates teams with this schedule in a data structure. properties: diff --git a/examples/v2_aws-integration_CreateAWSAccount.rs b/examples/v2_aws-integration_CreateAWSAccount.rs index 628dd765e..95a34fb45 100644 --- a/examples/v2_aws-integration_CreateAWSAccount.rs +++ b/examples/v2_aws-integration_CreateAWSAccount.rs @@ -8,6 +8,7 @@ use datadog_api_client::datadogV2::model::AWSAccountPartition; use datadog_api_client::datadogV2::model::AWSAccountType; use datadog_api_client::datadogV2::model::AWSAuthConfig; use datadog_api_client::datadogV2::model::AWSAuthConfigKeys; +use datadog_api_client::datadogV2::model::AWSCCMConfig; use datadog_api_client::datadogV2::model::AWSLambdaForwarderConfig; use datadog_api_client::datadogV2::model::AWSLambdaForwarderConfigLogSourceConfig; use datadog_api_client::datadogV2::model::AWSLogSourceTagFilter; @@ -16,6 +17,7 @@ use datadog_api_client::datadogV2::model::AWSMetricsConfig; use datadog_api_client::datadogV2::model::AWSNamespaceTagFilter; use datadog_api_client::datadogV2::model::AWSResourcesConfig; use datadog_api_client::datadogV2::model::AWSTracesConfig; +use datadog_api_client::datadogV2::model::DataExportConfig; #[tokio::main] async fn main() { @@ -29,6 +31,14 @@ async fn main() { AWSAccountPartition::AWS, ) .account_tags(Some(vec!["key:value".to_string()])) + .ccm_config(AWSCCMConfig::new().data_export_configs(vec![ + DataExportConfig::new() + .bucket_name("my-bucket".to_string()) + .bucket_region("us-east-1".to_string()) + .report_name("my-report".to_string()) + .report_prefix("reports".to_string()) + .report_type("CUR2.0".to_string()) + ])) .logs_config( AWSLogsConfig::new().lambda_forwarder( AWSLambdaForwarderConfig::new() diff --git a/examples/v2_aws-integration_CreateAWSAccount_1716720881.rs b/examples/v2_aws-integration_CreateAWSAccount_1716720881.rs index 1fc198053..b1e6d0912 100644 --- a/examples/v2_aws-integration_CreateAWSAccount_1716720881.rs +++ b/examples/v2_aws-integration_CreateAWSAccount_1716720881.rs @@ -8,6 +8,7 @@ use datadog_api_client::datadogV2::model::AWSAccountPartition; use datadog_api_client::datadogV2::model::AWSAccountType; use datadog_api_client::datadogV2::model::AWSAuthConfig; use datadog_api_client::datadogV2::model::AWSAuthConfigRole; +use datadog_api_client::datadogV2::model::AWSCCMConfig; use datadog_api_client::datadogV2::model::AWSLambdaForwarderConfig; use datadog_api_client::datadogV2::model::AWSLambdaForwarderConfigLogSourceConfig; use datadog_api_client::datadogV2::model::AWSLogSourceTagFilter; @@ -16,6 +17,7 @@ use datadog_api_client::datadogV2::model::AWSMetricsConfig; use datadog_api_client::datadogV2::model::AWSNamespaceTagFilter; use datadog_api_client::datadogV2::model::AWSResourcesConfig; use datadog_api_client::datadogV2::model::AWSTracesConfig; +use datadog_api_client::datadogV2::model::DataExportConfig; #[tokio::main] async fn main() { @@ -28,6 +30,14 @@ async fn main() { AWSAccountPartition::AWS, ) .account_tags(Some(vec!["key:value".to_string()])) + .ccm_config(AWSCCMConfig::new().data_export_configs(vec![ + DataExportConfig::new() + .bucket_name("my-bucket".to_string()) + .bucket_region("us-east-1".to_string()) + .report_name("my-report".to_string()) + .report_prefix("reports".to_string()) + .report_type("CUR2.0".to_string()) + ])) .logs_config( AWSLogsConfig::new().lambda_forwarder( AWSLambdaForwarderConfig::new() diff --git a/examples/v2_aws-integration_UpdateAWSAccount.rs b/examples/v2_aws-integration_UpdateAWSAccount.rs index 87ed5b044..b143d3dc5 100644 --- a/examples/v2_aws-integration_UpdateAWSAccount.rs +++ b/examples/v2_aws-integration_UpdateAWSAccount.rs @@ -8,6 +8,7 @@ use datadog_api_client::datadogV2::model::AWSAccountUpdateRequestAttributes; use datadog_api_client::datadogV2::model::AWSAccountUpdateRequestData; use datadog_api_client::datadogV2::model::AWSAuthConfig; use datadog_api_client::datadogV2::model::AWSAuthConfigRole; +use datadog_api_client::datadogV2::model::AWSCCMConfig; use datadog_api_client::datadogV2::model::AWSLambdaForwarderConfig; use datadog_api_client::datadogV2::model::AWSLambdaForwarderConfigLogSourceConfig; use datadog_api_client::datadogV2::model::AWSLogSourceTagFilter; @@ -16,6 +17,7 @@ use datadog_api_client::datadogV2::model::AWSMetricsConfig; use datadog_api_client::datadogV2::model::AWSNamespaceTagFilter; use datadog_api_client::datadogV2::model::AWSResourcesConfig; use datadog_api_client::datadogV2::model::AWSTracesConfig; +use datadog_api_client::datadogV2::model::DataExportConfig; #[tokio::main] async fn main() { @@ -32,6 +34,19 @@ async fn main() { ), ) .aws_partition(AWSAccountPartition::AWS) + .ccm_config( + AWSCCMConfig + ::new().data_export_configs( + vec![ + DataExportConfig::new() + .bucket_name("updated-bucket".to_string()) + .bucket_region("us-west-2".to_string()) + .report_name("updated-report".to_string()) + .report_prefix("cost-reports".to_string()) + .report_type("CUR2.0".to_string()) + ], + ), + ) .logs_config( AWSLogsConfig ::new().lambda_forwarder( diff --git a/src/datadogV2/model/mod.rs b/src/datadogV2/model/mod.rs index 74756e911..7e39955a0 100644 --- a/src/datadogV2/model/mod.rs +++ b/src/datadogV2/model/mod.rs @@ -3006,6 +3006,10 @@ pub mod model_aws_regions_include_only; pub use self::model_aws_regions_include_only::AWSRegionsIncludeOnly; pub mod model_aws_regions; pub use self::model_aws_regions::AWSRegions; +pub mod model_awsccm_config; +pub use self::model_awsccm_config::AWSCCMConfig; +pub mod model_data_export_config; +pub use self::model_data_export_config::DataExportConfig; pub mod model_aws_logs_config; pub use self::model_aws_logs_config::AWSLogsConfig; pub mod model_aws_lambda_forwarder_config; diff --git a/src/datadogV2/model/model_aws_account_create_request_attributes.rs b/src/datadogV2/model/model_aws_account_create_request_attributes.rs index 5547335ef..bf8ee2bf5 100644 --- a/src/datadogV2/model/model_aws_account_create_request_attributes.rs +++ b/src/datadogV2/model/model_aws_account_create_request_attributes.rs @@ -32,6 +32,9 @@ pub struct AWSAccountCreateRequestAttributes { /// AWS Regions to collect data from. Defaults to `include_all`. #[serde(rename = "aws_regions")] pub aws_regions: Option, + /// AWS Cloud Cost Management config. + #[serde(rename = "ccm_config")] + pub ccm_config: Option, /// AWS Logs Collection config. #[serde(rename = "logs_config")] pub logs_config: Option, @@ -63,6 +66,7 @@ impl AWSAccountCreateRequestAttributes { aws_account_id, aws_partition, aws_regions: None, + ccm_config: None, logs_config: None, metrics_config: None, resources_config: None, @@ -82,6 +86,11 @@ impl AWSAccountCreateRequestAttributes { self } + pub fn ccm_config(mut self, value: crate::datadogV2::model::AWSCCMConfig) -> Self { + self.ccm_config = Some(value); + self + } + pub fn logs_config(mut self, value: crate::datadogV2::model::AWSLogsConfig) -> Self { self.logs_config = Some(value); self @@ -133,6 +142,7 @@ impl<'de> Deserialize<'de> for AWSAccountCreateRequestAttributes { let mut aws_account_id: Option = None; let mut aws_partition: Option = None; let mut aws_regions: Option = None; + let mut ccm_config: Option = None; let mut logs_config: Option = None; let mut metrics_config: Option = None; let mut resources_config: Option = @@ -197,6 +207,12 @@ impl<'de> Deserialize<'de> for AWSAccountCreateRequestAttributes { } } } + "ccm_config" => { + if v.is_null() { + continue; + } + ccm_config = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "logs_config" => { if v.is_null() { continue; @@ -245,6 +261,7 @@ impl<'de> Deserialize<'de> for AWSAccountCreateRequestAttributes { aws_account_id, aws_partition, aws_regions, + ccm_config, logs_config, metrics_config, resources_config, diff --git a/src/datadogV2/model/model_aws_account_response_attributes.rs b/src/datadogV2/model/model_aws_account_response_attributes.rs index 37aafd977..888290bc6 100644 --- a/src/datadogV2/model/model_aws_account_response_attributes.rs +++ b/src/datadogV2/model/model_aws_account_response_attributes.rs @@ -32,6 +32,9 @@ pub struct AWSAccountResponseAttributes { /// AWS Regions to collect data from. Defaults to `include_all`. #[serde(rename = "aws_regions")] pub aws_regions: Option, + /// AWS Cloud Cost Management config. + #[serde(rename = "ccm_config")] + pub ccm_config: Option, /// Timestamp of when the account integration was created. #[serde(rename = "created_at")] pub created_at: Option>, @@ -65,6 +68,7 @@ impl AWSAccountResponseAttributes { aws_account_id, aws_partition: None, aws_regions: None, + ccm_config: None, created_at: None, logs_config: None, metrics_config: None, @@ -96,6 +100,11 @@ impl AWSAccountResponseAttributes { self } + pub fn ccm_config(mut self, value: crate::datadogV2::model::AWSCCMConfig) -> Self { + self.ccm_config = Some(value); + self + } + pub fn created_at(mut self, value: chrono::DateTime) -> Self { self.created_at = Some(value); self @@ -157,6 +166,7 @@ impl<'de> Deserialize<'de> for AWSAccountResponseAttributes { let mut aws_account_id: Option = None; let mut aws_partition: Option = None; let mut aws_regions: Option = None; + let mut ccm_config: Option = None; let mut created_at: Option> = None; let mut logs_config: Option = None; let mut metrics_config: Option = None; @@ -229,6 +239,12 @@ impl<'de> Deserialize<'de> for AWSAccountResponseAttributes { } } } + "ccm_config" => { + if v.is_null() { + continue; + } + ccm_config = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "created_at" => { if v.is_null() { continue; @@ -286,6 +302,7 @@ impl<'de> Deserialize<'de> for AWSAccountResponseAttributes { aws_account_id, aws_partition, aws_regions, + ccm_config, created_at, logs_config, metrics_config, diff --git a/src/datadogV2/model/model_aws_account_update_request_attributes.rs b/src/datadogV2/model/model_aws_account_update_request_attributes.rs index a1bb45d15..8673b9264 100644 --- a/src/datadogV2/model/model_aws_account_update_request_attributes.rs +++ b/src/datadogV2/model/model_aws_account_update_request_attributes.rs @@ -32,6 +32,9 @@ pub struct AWSAccountUpdateRequestAttributes { /// AWS Regions to collect data from. Defaults to `include_all`. #[serde(rename = "aws_regions")] pub aws_regions: Option, + /// AWS Cloud Cost Management config. + #[serde(rename = "ccm_config")] + pub ccm_config: Option, /// AWS Logs Collection config. #[serde(rename = "logs_config")] pub logs_config: Option, @@ -59,6 +62,7 @@ impl AWSAccountUpdateRequestAttributes { aws_account_id, aws_partition: None, aws_regions: None, + ccm_config: None, logs_config: None, metrics_config: None, resources_config: None, @@ -88,6 +92,11 @@ impl AWSAccountUpdateRequestAttributes { self } + pub fn ccm_config(mut self, value: crate::datadogV2::model::AWSCCMConfig) -> Self { + self.ccm_config = Some(value); + self + } + pub fn logs_config(mut self, value: crate::datadogV2::model::AWSLogsConfig) -> Self { self.logs_config = Some(value); self @@ -139,6 +148,7 @@ impl<'de> Deserialize<'de> for AWSAccountUpdateRequestAttributes { let mut aws_account_id: Option = None; let mut aws_partition: Option = None; let mut aws_regions: Option = None; + let mut ccm_config: Option = None; let mut logs_config: Option = None; let mut metrics_config: Option = None; let mut resources_config: Option = @@ -209,6 +219,12 @@ impl<'de> Deserialize<'de> for AWSAccountUpdateRequestAttributes { } } } + "ccm_config" => { + if v.is_null() { + continue; + } + ccm_config = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "logs_config" => { if v.is_null() { continue; @@ -253,6 +269,7 @@ impl<'de> Deserialize<'de> for AWSAccountUpdateRequestAttributes { aws_account_id, aws_partition, aws_regions, + ccm_config, logs_config, metrics_config, resources_config, diff --git a/src/datadogV2/model/model_awsccm_config.rs b/src/datadogV2/model/model_awsccm_config.rs new file mode 100644 index 000000000..dadb8c448 --- /dev/null +++ b/src/datadogV2/model/model_awsccm_config.rs @@ -0,0 +1,111 @@ +// 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. +use serde::de::{Error, MapAccess, Visitor}; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::skip_serializing_none; +use std::fmt::{self, Formatter}; + +/// AWS Cloud Cost Management config. +#[non_exhaustive] +#[skip_serializing_none] +#[derive(Clone, Debug, PartialEq, Serialize)] +pub struct AWSCCMConfig { + /// List of data export configurations for Cost and Usage Reports. + #[serde(rename = "data_export_configs")] + pub data_export_configs: Option>, + #[serde(flatten)] + pub additional_properties: std::collections::BTreeMap, + #[serde(skip)] + #[serde(default)] + pub(crate) _unparsed: bool, +} + +impl AWSCCMConfig { + pub fn new() -> AWSCCMConfig { + AWSCCMConfig { + data_export_configs: None, + additional_properties: std::collections::BTreeMap::new(), + _unparsed: false, + } + } + + pub fn data_export_configs( + mut self, + value: Vec, + ) -> Self { + self.data_export_configs = Some(value); + self + } + + pub fn additional_properties( + mut self, + value: std::collections::BTreeMap, + ) -> Self { + self.additional_properties = value; + self + } +} + +impl Default for AWSCCMConfig { + fn default() -> Self { + Self::new() + } +} + +impl<'de> Deserialize<'de> for AWSCCMConfig { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct AWSCCMConfigVisitor; + impl<'a> Visitor<'a> for AWSCCMConfigVisitor { + type Value = AWSCCMConfig; + + fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { + f.write_str("a mapping") + } + + fn visit_map(self, mut map: M) -> Result + where + M: MapAccess<'a>, + { + let mut data_export_configs: Option< + Vec, + > = None; + let mut additional_properties: std::collections::BTreeMap< + String, + serde_json::Value, + > = std::collections::BTreeMap::new(); + let mut _unparsed = false; + + while let Some((k, v)) = map.next_entry::()? { + match k.as_str() { + "data_export_configs" => { + if v.is_null() { + continue; + } + data_export_configs = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + &_ => { + if let Ok(value) = serde_json::from_value(v.clone()) { + additional_properties.insert(k, value); + } + } + } + } + + let content = AWSCCMConfig { + data_export_configs, + additional_properties, + _unparsed, + }; + + Ok(content) + } + } + + deserializer.deserialize_any(AWSCCMConfigVisitor) + } +} diff --git a/src/datadogV2/model/model_data_export_config.rs b/src/datadogV2/model/model_data_export_config.rs new file mode 100644 index 000000000..0bc773849 --- /dev/null +++ b/src/datadogV2/model/model_data_export_config.rs @@ -0,0 +1,178 @@ +// 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. +use serde::de::{Error, MapAccess, Visitor}; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::skip_serializing_none; +use std::fmt::{self, Formatter}; + +/// AWS Cost and Usage Report data export configuration. +#[non_exhaustive] +#[skip_serializing_none] +#[derive(Clone, Debug, PartialEq, Serialize)] +pub struct DataExportConfig { + /// Name of the S3 bucket where the Cost and Usage Report is stored. + #[serde(rename = "bucket_name")] + pub bucket_name: Option, + /// AWS region of the S3 bucket. + #[serde(rename = "bucket_region")] + pub bucket_region: Option, + /// Name of the Cost and Usage Report. + #[serde(rename = "report_name")] + pub report_name: Option, + /// S3 prefix where the Cost and Usage Report is stored. + #[serde(rename = "report_prefix")] + pub report_prefix: Option, + /// Type of the Cost and Usage Report. + #[serde(rename = "report_type")] + pub report_type: Option, + #[serde(flatten)] + pub additional_properties: std::collections::BTreeMap, + #[serde(skip)] + #[serde(default)] + pub(crate) _unparsed: bool, +} + +impl DataExportConfig { + pub fn new() -> DataExportConfig { + DataExportConfig { + bucket_name: None, + bucket_region: None, + report_name: None, + report_prefix: None, + report_type: None, + additional_properties: std::collections::BTreeMap::new(), + _unparsed: false, + } + } + + pub fn bucket_name(mut self, value: String) -> Self { + self.bucket_name = Some(value); + self + } + + pub fn bucket_region(mut self, value: String) -> Self { + self.bucket_region = Some(value); + self + } + + pub fn report_name(mut self, value: String) -> Self { + self.report_name = Some(value); + self + } + + pub fn report_prefix(mut self, value: String) -> Self { + self.report_prefix = Some(value); + self + } + + pub fn report_type(mut self, value: String) -> Self { + self.report_type = Some(value); + self + } + + pub fn additional_properties( + mut self, + value: std::collections::BTreeMap, + ) -> Self { + self.additional_properties = value; + self + } +} + +impl Default for DataExportConfig { + fn default() -> Self { + Self::new() + } +} + +impl<'de> Deserialize<'de> for DataExportConfig { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct DataExportConfigVisitor; + impl<'a> Visitor<'a> for DataExportConfigVisitor { + type Value = DataExportConfig; + + fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { + f.write_str("a mapping") + } + + fn visit_map(self, mut map: M) -> Result + where + M: MapAccess<'a>, + { + let mut bucket_name: Option = None; + let mut bucket_region: Option = None; + let mut report_name: Option = None; + let mut report_prefix: Option = None; + let mut report_type: Option = None; + let mut additional_properties: std::collections::BTreeMap< + String, + serde_json::Value, + > = std::collections::BTreeMap::new(); + let mut _unparsed = false; + + while let Some((k, v)) = map.next_entry::()? { + match k.as_str() { + "bucket_name" => { + if v.is_null() { + continue; + } + bucket_name = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "bucket_region" => { + if v.is_null() { + continue; + } + bucket_region = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "report_name" => { + if v.is_null() { + continue; + } + report_name = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "report_prefix" => { + if v.is_null() { + continue; + } + report_prefix = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "report_type" => { + if v.is_null() { + continue; + } + report_type = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + &_ => { + if let Ok(value) = serde_json::from_value(v.clone()) { + additional_properties.insert(k, value); + } + } + } + } + + let content = DataExportConfig { + bucket_name, + bucket_region, + report_name, + report_prefix, + report_type, + additional_properties, + _unparsed, + }; + + Ok(content) + } + } + + deserializer.deserialize_any(DataExportConfigVisitor) + } +} diff --git a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-account-returns-AWS-Account-object-response.frozen b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-account-returns-AWS-Account-object-response.frozen index b63a9ddbf..403f0e637 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-account-returns-AWS-Account-object-response.frozen +++ b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-account-returns-AWS-Account-object-response.frozen @@ -1 +1 @@ -2025-08-06T17:41:40.185Z \ No newline at end of file +2025-12-10T17:32:09.613Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-account-returns-AWS-Account-object-response.json b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-account-returns-AWS-Account-object-response.json index e8a09f1cd..ed4a84fe1 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-account-returns-AWS-Account-object-response.json +++ b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-account-returns-AWS-Account-object-response.json @@ -3,7 +3,7 @@ { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", + "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"ccm_config\":{\"data_export_configs\":[{\"bucket_name\":\"my-bucket\",\"bucket_region\":\"us-east-1\",\"report_name\":\"my-report\",\"report_prefix\":\"reports\",\"report_type\":\"CUR2.0\"}]},\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", "encoding": null }, "headers": { @@ -19,7 +19,7 @@ }, "response": { "body": { - "string": "{\"data\":{\"id\":\"4ee52a3f-d0e9-487b-bde9-cd1cbc0e4cb0\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"a4e4a6b4c2cf4638a58b1febc6b856e9\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"created_at\":\"2025-08-06T17:41:41.111886478Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/SQS\",\"AWS/ElasticMapReduce\"]}},\"modified_at\":\"2025-08-06T17:41:41.111886478Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}}", + "string": "{\"data\":{\"id\":\"de1a3b78-ed2e-4f50-9191-1879129d09ff\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"55d4a43935224fe09c096f96392f1ca1\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"ccm_config\":{\"data_export_configs\":[{\"report_name\":\"my-report\",\"report_prefix\":\"reports\",\"report_type\":\"CUR2.0\",\"bucket_name\":\"my-bucket\",\"bucket_region\":\"us-east-1\"}]},\"created_at\":\"2025-12-10T17:32:11.003276673Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/SQS\",\"AWS/ElasticMapReduce\",\"AWS/Usage\"]}},\"modified_at\":\"2025-12-10T17:32:11.003276673Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}}", "encoding": null }, "headers": { @@ -32,7 +32,7 @@ "message": "OK" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:40 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:32:09 GMT" }, { "request": { @@ -43,7 +43,7 @@ ] }, "method": "delete", - "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/4ee52a3f-d0e9-487b-bde9-cd1cbc0e4cb0" + "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/de1a3b78-ed2e-4f50-9191-1879129d09ff" }, "response": { "body": { @@ -56,7 +56,7 @@ "message": "No Content" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:40 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:32:09 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-AWS-Account-object-response.frozen b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-AWS-Account-object-response.frozen index d0e249e86..dfc78df9a 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-AWS-Account-object-response.frozen +++ b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-AWS-Account-object-response.frozen @@ -1 +1 @@ -2025-08-06T17:41:41.364Z \ No newline at end of file +2025-12-10T17:32:36.829Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-AWS-Account-object-response.json b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-AWS-Account-object-response.json index 1d69b393d..4b9a78546 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-AWS-Account-object-response.json +++ b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-AWS-Account-object-response.json @@ -3,7 +3,7 @@ { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"access_key_id\":\"AKIAIOSFODNN7EXAMPLE\",\"secret_access_key\":\"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", + "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"access_key_id\":\"AKIAIOSFODNN7EXAMPLE\",\"secret_access_key\":\"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"ccm_config\":{\"data_export_configs\":[{\"bucket_name\":\"my-bucket\",\"bucket_region\":\"us-east-1\",\"report_name\":\"my-report\",\"report_prefix\":\"reports\",\"report_type\":\"CUR2.0\"}]},\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", "encoding": null }, "headers": { @@ -19,7 +19,7 @@ }, "response": { "body": { - "string": "{\"data\":{\"id\":\"c80e30d5-b3f9-45b1-85fc-bad652af206b\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"access_key_id\":\"AKIAIOSFODNN7EXAMPLE\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"created_at\":\"2025-08-06T17:41:41.445076718Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/SQS\",\"AWS/ElasticMapReduce\"]}},\"modified_at\":\"2025-08-06T17:41:41.445076718Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}}", + "string": "{\"data\":{\"id\":\"a7d72fb6-ec59-4eca-a905-805dd599d061\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"access_key_id\":\"AKIAIOSFODNN7EXAMPLE\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"ccm_config\":{\"data_export_configs\":[{\"report_name\":\"my-report\",\"report_prefix\":\"reports\",\"report_type\":\"CUR2.0\",\"bucket_name\":\"my-bucket\",\"bucket_region\":\"us-east-1\"}]},\"created_at\":\"2025-12-10T17:32:37.014514664Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/SQS\",\"AWS/ElasticMapReduce\",\"AWS/Usage\"]}},\"modified_at\":\"2025-12-10T17:32:37.014514664Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}}", "encoding": null }, "headers": { @@ -32,7 +32,7 @@ "message": "OK" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:41 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:32:36 GMT" }, { "request": { @@ -43,7 +43,7 @@ ] }, "method": "delete", - "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/c80e30d5-b3f9-45b1-85fc-bad652af206b" + "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/a7d72fb6-ec59-4eca-a905-805dd599d061" }, "response": { "body": { @@ -56,7 +56,7 @@ "message": "No Content" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:41 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:32:36 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-Bad-Request-response.frozen b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-Bad-Request-response.frozen index abfd935a0..2800bbe0a 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-Bad-Request-response.frozen +++ b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-Bad-Request-response.frozen @@ -1 +1 @@ -2025-08-06T17:41:41.716Z \ No newline at end of file +2025-12-10T17:34:11.261Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-Bad-Request-response.json b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-Bad-Request-response.json index 0132d6f14..a8937b04c 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-Bad-Request-response.json +++ b/tests/scenarios/cassettes/v2/aws_integration/Create-an-AWS-integration-returns-Bad-Request-response.json @@ -3,7 +3,7 @@ { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws-invalid\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", + "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws-invalid\",\"ccm_config\":{\"data_export_configs\":[{\"bucket_name\":\"my-bucket\",\"bucket_region\":\"us-east-1\",\"report_name\":\"my-report\",\"report_prefix\":\"reports\",\"report_type\":\"CUR2.0\"}]},\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", "encoding": null }, "headers": { @@ -32,7 +32,7 @@ "message": "Bad Request" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:41 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:34:11 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-AWS-Account-object-response.frozen b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-AWS-Account-object-response.frozen index 770d0364b..0acb43217 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-AWS-Account-object-response.frozen +++ b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-AWS-Account-object-response.frozen @@ -1 +1 @@ -2025-08-06T17:41:51.622Z \ No newline at end of file +2025-12-10T17:40:36.176Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-AWS-Account-object-response.json b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-AWS-Account-object-response.json index 7641aee0c..44fd3da94 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-AWS-Account-object-response.json +++ b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-AWS-Account-object-response.json @@ -19,7 +19,7 @@ }, "response": { "body": { - "string": "{\"data\":{\"id\":\"ab6528e3-5dab-4375-ae47-4ce93d1216e2\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"36416390710445e7be511e1622ee4149\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:52.510132689Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:52.510132689Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}", + "string": "{\"data\":{\"id\":\"0c2238ef-3b8e-4d25-85df-b18f96ac7031\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"a297178885da4934acf9eca79f3e7892\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-12-10T17:40:37.609564422Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-12-10T17:40:37.609564422Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}", "encoding": null }, "headers": { @@ -32,12 +32,12 @@ "message": "OK" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:51 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:40:36 GMT" }, { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", + "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"ccm_config\":{\"data_export_configs\":[{\"bucket_name\":\"updated-bucket\",\"bucket_region\":\"us-west-2\",\"report_name\":\"updated-report\",\"report_prefix\":\"cost-reports\",\"report_type\":\"CUR2.0\"}]},\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", "encoding": null }, "headers": { @@ -49,11 +49,11 @@ ] }, "method": "patch", - "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/ab6528e3-5dab-4375-ae47-4ce93d1216e2" + "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/0c2238ef-3b8e-4d25-85df-b18f96ac7031" }, "response": { "body": { - "string": "{\"data\":{\"id\":\"ab6528e3-5dab-4375-ae47-4ce93d1216e2\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"36416390710445e7be511e1622ee4149\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:52.510132Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:52.717094345Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}", + "string": "{\"data\":{\"id\":\"0c2238ef-3b8e-4d25-85df-b18f96ac7031\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"a297178885da4934acf9eca79f3e7892\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"ccm_config\":{\"data_export_configs\":[{\"report_name\":\"updated-report\",\"report_prefix\":\"cost-reports\",\"report_type\":\"CUR2.0\",\"bucket_name\":\"updated-bucket\",\"bucket_region\":\"us-west-2\"}]},\"created_at\":\"2025-12-10T17:40:37.609564Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-12-10T17:40:37.867410688Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}", "encoding": null }, "headers": { @@ -66,7 +66,7 @@ "message": "OK" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:51 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:40:36 GMT" }, { "request": { @@ -77,7 +77,7 @@ ] }, "method": "delete", - "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/ab6528e3-5dab-4375-ae47-4ce93d1216e2" + "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/0c2238ef-3b8e-4d25-85df-b18f96ac7031" }, "response": { "body": { @@ -90,7 +90,7 @@ "message": "No Content" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:51 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:40:36 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Bad-Request-response.frozen b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Bad-Request-response.frozen index 2ad05fcd4..e550a6022 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Bad-Request-response.frozen +++ b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Bad-Request-response.frozen @@ -1 +1 @@ -2025-08-06T17:41:53.059Z \ No newline at end of file +2025-12-10T17:42:50.556Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Bad-Request-response.json b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Bad-Request-response.json index a4c31cdf2..369d2fb3c 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Bad-Request-response.json +++ b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Bad-Request-response.json @@ -19,7 +19,7 @@ }, "response": { "body": { - "string": "{\"data\":{\"id\":\"dff6d3ee-e90a-4df1-b0d7-6f4e1ed35acc\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"f3f5392d608c448ca4910d7adcefa849\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:54.148895503Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:54.148895503Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}", + "string": "{\"data\":{\"id\":\"0c358c9f-84fd-4fe5-b0e9-722d787de213\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"84a9c55851ce4a01869c503e990d325b\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-12-10T17:42:52.162655791Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-12-10T17:42:52.162655791Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}", "encoding": null }, "headers": { @@ -32,12 +32,12 @@ "message": "OK" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:53 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:42:50 GMT" }, { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"access_key_id\":\"AKIAIOSFODNN7EXAMPLE\",\"secret_access_key\":\"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", + "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"access_key_id\":\"AKIAIOSFODNN7EXAMPLE\",\"secret_access_key\":\"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"ccm_config\":{\"data_export_configs\":[{\"bucket_name\":\"invalid-bucket\",\"bucket_region\":\"invalid-region\",\"report_name\":\"invalid-report\",\"report_prefix\":\"invalid\",\"report_type\":\"CUR2.0\"}]},\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", "encoding": null }, "headers": { @@ -49,11 +49,11 @@ ] }, "method": "patch", - "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/dff6d3ee-e90a-4df1-b0d7-6f4e1ed35acc" + "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/0c358c9f-84fd-4fe5-b0e9-722d787de213" }, "response": { "body": { - "string": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"cannot switch between role and key based auth\"}]}", + "string": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"invalid value\",\"meta\":{\"ccm_config.data_export_configs[CUR2.0].bucket_region\":\"invalid bucket region: invalid-region\"}}]}", "encoding": null }, "headers": { @@ -66,7 +66,7 @@ "message": "Bad Request" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:53 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:42:50 GMT" }, { "request": { @@ -77,7 +77,7 @@ ] }, "method": "delete", - "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/dff6d3ee-e90a-4df1-b0d7-6f4e1ed35acc" + "uri": "https://api.datadoghq.com/api/v2/integration/aws/accounts/0c358c9f-84fd-4fe5-b0e9-722d787de213" }, "response": { "body": { @@ -90,7 +90,7 @@ "message": "No Content" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:53 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:42:50 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Not-Found-response.frozen b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Not-Found-response.frozen index 8c2f55ecb..07ac47cd4 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Not-Found-response.frozen +++ b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Not-Found-response.frozen @@ -1 +1 @@ -2025-08-06T17:41:54.735Z \ No newline at end of file +2025-12-10T17:43:13.852Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Not-Found-response.json b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Not-Found-response.json index 0c67e3d95..a29e0176c 100644 --- a/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Not-Found-response.json +++ b/tests/scenarios/cassettes/v2/aws_integration/Update-an-AWS-integration-returns-Not-Found-response.json @@ -3,7 +3,7 @@ { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", + "string": "{\"data\":{\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"ccm_config\":{\"data_export_configs\":[{\"bucket_name\":\"notfound-bucket\",\"bucket_region\":\"eu-west-1\",\"report_name\":\"notfound-report\",\"report_prefix\":\"notfound\",\"report_type\":\"CUR2.0\"}]},\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]},\"sources\":[\"s3\"]}},\"metrics_config\":{\"automute_enabled\":true,\"collect_cloudwatch_alarms\":true,\"collect_custom_metrics\":true,\"enabled\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}]},\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{}},\"type\":\"account\"}}", "encoding": null }, "headers": { @@ -32,7 +32,7 @@ "message": "Not Found" } }, - "recorded_at": "Wed, 06 Aug 2025 17:41:54 GMT" + "recorded_at": "Wed, 10 Dec 2025 17:43:13 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/features/v2/aws_integration.feature b/tests/scenarios/features/v2/aws_integration.feature index 30ded64d7..9e14d0824 100644 --- a/tests/scenarios/features/v2/aws_integration.feature +++ b/tests/scenarios/features/v2/aws_integration.feature @@ -12,21 +12,21 @@ Feature: AWS Integration @team:DataDog/aws-integrations Scenario: Create an AWS account returns "AWS Account object" response Given new "CreateAWSAccount" request - And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "ccm_config": {"data_export_configs": [{"bucket_name": "my-bucket", "bucket_region": "us-east-1", "report_name": "my-report", "report_prefix": "reports", "report_type": "CUR2.0"}]}, "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} When the request is sent Then the response status is 200 AWS Account object @team:DataDog/aws-integrations Scenario: Create an AWS integration returns "AWS Account object" response Given new "CreateAWSAccount" request - And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"access_key_id": "AKIAIOSFODNN7EXAMPLE", "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"access_key_id": "AKIAIOSFODNN7EXAMPLE", "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}, "aws_account_id": "123456789012", "aws_partition": "aws", "ccm_config": {"data_export_configs": [{"bucket_name": "my-bucket", "bucket_region": "us-east-1", "report_name": "my-report", "report_prefix": "reports", "report_type": "CUR2.0"}]}, "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} When the request is sent Then the response status is 200 AWS Account object @team:DataDog/aws-integrations Scenario: Create an AWS integration returns "Bad Request" response Given new "CreateAWSAccount" request - And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws-invalid", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws-invalid", "ccm_config": {"data_export_configs": [{"bucket_name": "my-bucket", "bucket_region": "us-east-1", "report_name": "my-report", "report_prefix": "reports", "report_type": "CUR2.0"}]}, "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} When the request is sent Then the response status is 400 Bad Request @@ -195,7 +195,7 @@ Feature: AWS Integration Given there is a valid "aws_account_v2" in the system And new "UpdateAWSAccount" request And request contains "aws_account_config_id" parameter from "aws_account_v2.data.id" - And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "ccm_config": {"data_export_configs": [{"bucket_name": "updated-bucket", "bucket_region": "us-west-2", "report_name": "updated-report", "report_prefix": "cost-reports", "report_type": "CUR2.0"}]}, "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} When the request is sent Then the response status is 200 AWS Account object @@ -204,7 +204,7 @@ Feature: AWS Integration Given there is a valid "aws_account_v2" in the system And new "UpdateAWSAccount" request And request contains "aws_account_config_id" parameter from "aws_account_v2.data.id" - And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"access_key_id": "AKIAIOSFODNN7EXAMPLE", "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"access_key_id": "AKIAIOSFODNN7EXAMPLE", "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}, "aws_account_id": "123456789012", "aws_partition": "aws", "ccm_config": {"data_export_configs": [{"bucket_name": "invalid-bucket", "bucket_region": "invalid-region", "report_name": "invalid-report", "report_prefix": "invalid", "report_type": "CUR2.0"}]}, "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} When the request is sent Then the response status is 400 Bad Request @@ -212,6 +212,6 @@ Feature: AWS Integration Scenario: Update an AWS integration returns "Not Found" response Given new "UpdateAWSAccount" request And request contains "aws_account_config_id" parameter with value "448169a8-251c-4344-abee-1c4edef39f7a" - And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "ccm_config": {"data_export_configs": [{"bucket_name": "notfound-bucket", "bucket_region": "eu-west-1", "report_name": "notfound-report", "report_prefix": "notfound", "report_type": "CUR2.0"}]}, "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} When the request is sent Then the response status is 404 Not Found