From d41f6bb607571e6b75959c91ebe304dc0631ec99 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Tue, 6 Oct 2026 17:19:23 +0000 Subject: [PATCH] Regenerate client from commit b330a66 of spec repo --- .generator/schemas/v2/openapi.yaml | 158 ++++++++- .../ListCostCloudAccountsV2.java | 25 ++ .../ListCostCloudAccountsV2_1125785160.java | 28 ++ .../ListCostCloudAccountsV2_1976704126.java | 28 ++ .../ListCostCloudAccountsV2_3127976520.java | 29 ++ .../ListCostCloudAccountsV2_3442024574.java | 28 ++ .../ListCostCloudAccountsV2_420814529.java | 28 ++ .../client/v2/api/CloudCostManagementApi.java | 191 +++++++++- .../api/client/v2/model/CloudCostAccount.java | 212 +++++++++++ .../v2/model/CloudCostAccountAttributes.java | 333 ++++++++++++++++++ .../client/v2/model/CloudCostAccountType.java | 56 +++ .../v2/model/CloudCostAccountsResponse.java | 163 +++++++++ .../v2/api/cloud_cost_management.feature | 50 +++ .../com/datadog/api/client/v2/api/undo.json | 6 + .../test-runner-data/manifest.json | 49 +++ ...accounts-returns-bad-request-response.json | 35 ++ ...nt-cloud-accounts-returns-ok-response.json | 18 + ...h-an-empty-filter-returns-ok-response.json | 35 ++ ...ws-cur-2-0-filter-returns-ok-response.json | 35 ++ ...ws-cur-2-0-filter-returns-ok-response.json | 35 ++ ...d-case-oci-filter-returns-ok-response.json | 35 ++ ...s-with-oci-filter-returns-ok-response.json | 35 ++ .../v2/cloud-cost-management.json | 247 +++++++++++++ 23 files changed, 1856 insertions(+), 3 deletions(-) create mode 100644 examples/v2/cloud-cost-management/ListCostCloudAccountsV2.java create mode 100644 examples/v2/cloud-cost-management/ListCostCloudAccountsV2_1125785160.java create mode 100644 examples/v2/cloud-cost-management/ListCostCloudAccountsV2_1976704126.java create mode 100644 examples/v2/cloud-cost-management/ListCostCloudAccountsV2_3127976520.java create mode 100644 examples/v2/cloud-cost-management/ListCostCloudAccountsV2_3442024574.java create mode 100644 examples/v2/cloud-cost-management/ListCostCloudAccountsV2_420814529.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/CloudCostAccount.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/CloudCostAccountAttributes.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/CloudCostAccountType.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/CloudCostAccountsResponse.java create mode 100644 src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-bad-request-response.json create mode 100644 src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-ok-response.json create mode 100644 src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-an-empty-filter-returns-ok-response.json create mode 100644 src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-aws-cur-2-0-filter-returns-ok-response.json create mode 100644 src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-aws-cur-2-0-filter-returns-ok-response.json create mode 100644 src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-oci-filter-returns-ok-response.json create mode 100644 src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-oci-filter-returns-ok-response.json diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 615b42d5e76..eaad7eae2c4 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -19023,6 +19023,85 @@ components: type: string x-enum-varnames: - CLOUD_CONFIGURATION + CloudCostAccount: + description: A Cloud Cost Management account. + properties: + attributes: + $ref: "#/components/schemas/CloudCostAccountAttributes" + id: + description: The Datadog cloud account ID used by the account filters API. + example: "534" + type: string + type: + $ref: "#/components/schemas/CloudCostAccountType" + required: + - attributes + - id + - type + type: object + CloudCostAccountAttributes: + description: Read-only status and identifiers for a cloud cost account. + properties: + account_id: + description: The cloud provider account identifier, such as an OCI tenancy OCID or AWS account ID. + example: "ocid1.tenancy.oc1..example" + type: string + cloud: + description: The cloud provider and cost report type. Currently supports `oci` and `aws_cur2`. + example: "oci" + type: string + created_at: + description: The timestamp when the cloud account was created. + example: "2026-01-01T12:00:00Z" + type: string + error_messages: + description: Validation errors for the cloud account. Empty when there are no errors. + example: [] + items: + description: An error message. + type: string + type: array + status: + description: The cloud account status, one of `active`, `warn`, `error`, or `disabled`. + example: "active" + type: string + status_updated_at: + description: The timestamp when the cloud account status was last updated. + example: "2026-01-01T12:00:00Z" + type: string + updated_at: + description: The timestamp when the cloud account was last updated. + example: "2026-01-01T12:00:00Z" + type: string + required: + - account_id + - cloud + - created_at + - error_messages + - status + - status_updated_at + - updated_at + type: object + CloudCostAccountType: + default: cloud_account + description: Type of a cloud cost account. + enum: + - cloud_account + example: cloud_account + type: string + x-enum-varnames: + - CLOUD_ACCOUNT + CloudCostAccountsResponse: + description: List of cloud cost accounts. + properties: + data: + description: The cloud cost accounts matching the filter. + items: + $ref: "#/components/schemas/CloudCostAccount" + type: array + required: + - data + type: object CloudInventoryCloudProviderId: description: |- Cloud provider for this sync configuration (`aws`, `gcp`, or `azure`). For requests, must match the provider block supplied under `attributes`. @@ -153944,6 +154023,81 @@ paths: summary: List budgets tags: - Cloud Cost Management + /api/v2/cost/cloud_accounts: + get: + description: |- + List the OCI and AWS CUR 2.0 cloud accounts for your organization, including account IDs, status, and validation errors. + Use `filter[cloud]=oci` or `filter[cloud]=aws_cur2` to return a single cloud. When omitted or empty, both clouds are returned. + AWS CUR 1.0, Azure, and GCP accounts are available through their dedicated configuration endpoints. + Archived accounts are excluded. The response contains all matching accounts and is not paginated. + + This endpoint replaces `GET /api/v2/cost/oci_config`. To migrate, use `filter[cloud]=oci` and update clients to accept + the `cloud_account` resource type instead of `oci_config`. Account IDs and the existing attributes are preserved; + each account also includes the `cloud` attribute. + operationId: ListCostCloudAccountsV2 + parameters: + - description: Filter by cloud, either `oci` or `aws_cur2` (case insensitive). Omit or leave empty to return both. + example: oci + in: query + name: filter[cloud] + required: false + schema: + pattern: ^([oO][cC][iI]|[aA][wW][sS]_[cC][uU][rR]2)?(?![\s\S]) + type: string + responses: + "200": + content: + application/json: + examples: + default: + value: + data: + - attributes: + account_id: "ocid1.tenancy.oc1..example" + cloud: oci + created_at: "2026-01-01T12:00:00Z" + error_messages: [] + status: active + status_updated_at: "2026-01-01T12:00:00Z" + updated_at: "2026-01-01T12:00:00Z" + id: "534" + type: cloud_account + schema: + $ref: "#/components/schemas/CloudCostAccountsResponse" + description: OK + "400": + content: + application/json: + examples: + invalid_cloud: + value: + errors: + - detail: 'attribute "filter[cloud]" must be one of: oci, aws_cur2' + status: "400" + title: Bad Request + schema: + $ref: "#/components/schemas/JSONAPIErrorResponse" + 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 cloud accounts + tags: + - Cloud Cost Management + "x-permission": + operator: OR + permissions: + - cloud_cost_management_read /api/v2/cost/commitments/commitment-list: get: description: Get a list of individual cloud commitments (Reserved Instances or Savings Plans) with their utilization details. The response schema varies based on the provider, product, and commitment type. @@ -155025,7 +155179,9 @@ paths: get: deprecated: true description: |- - **Note**: This endpoint is deprecated. View OCI accounts in Cloud Cost Settings in the Datadog web application instead. + **Note**: This endpoint is deprecated. Use [List Cloud Cost Management cloud accounts](https://docs.datadoghq.com/api/latest/cloud-cost-management/#list-cloud-cost-management-cloud-accounts) + with `filter[cloud]=oci` instead. Update clients to accept the `cloud_account` resource type instead of `oci_config`. + Account IDs and the existing attributes are preserved; each account also includes the `cloud` attribute. List the OCI configs. operationId: ListCostOCIConfigs diff --git a/examples/v2/cloud-cost-management/ListCostCloudAccountsV2.java b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2.java new file mode 100644 index 00000000000..82f8abce24f --- /dev/null +++ b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2.java @@ -0,0 +1,25 @@ +// List Cloud Cost Management cloud accounts returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.CloudCostManagementApi; +import com.datadog.api.client.v2.model.CloudCostAccountsResponse; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN")); + CloudCostManagementApi apiInstance = new CloudCostManagementApi(defaultClient); + + try { + CloudCostAccountsResponse result = apiInstance.listCostCloudAccountsV2(); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling CloudCostManagementApi#listCostCloudAccountsV2"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} diff --git a/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_1125785160.java b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_1125785160.java new file mode 100644 index 00000000000..766f1fbc865 --- /dev/null +++ b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_1125785160.java @@ -0,0 +1,28 @@ +// List Cloud Cost Management cloud accounts with AWS CUR 2.0 filter returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.CloudCostManagementApi; +import com.datadog.api.client.v2.api.CloudCostManagementApi.ListCostCloudAccountsV2OptionalParameters; +import com.datadog.api.client.v2.model.CloudCostAccountsResponse; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN")); + CloudCostManagementApi apiInstance = new CloudCostManagementApi(defaultClient); + + try { + CloudCostAccountsResponse result = + apiInstance.listCostCloudAccountsV2( + new ListCostCloudAccountsV2OptionalParameters().filterCloud("aws_cur2")); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling CloudCostManagementApi#listCostCloudAccountsV2"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} diff --git a/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_1976704126.java b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_1976704126.java new file mode 100644 index 00000000000..292cf895c20 --- /dev/null +++ b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_1976704126.java @@ -0,0 +1,28 @@ +// List Cloud Cost Management cloud accounts with OCI filter returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.CloudCostManagementApi; +import com.datadog.api.client.v2.api.CloudCostManagementApi.ListCostCloudAccountsV2OptionalParameters; +import com.datadog.api.client.v2.model.CloudCostAccountsResponse; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN")); + CloudCostManagementApi apiInstance = new CloudCostManagementApi(defaultClient); + + try { + CloudCostAccountsResponse result = + apiInstance.listCostCloudAccountsV2( + new ListCostCloudAccountsV2OptionalParameters().filterCloud("oci")); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling CloudCostManagementApi#listCostCloudAccountsV2"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} diff --git a/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_3127976520.java b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_3127976520.java new file mode 100644 index 00000000000..3f26b6bc61c --- /dev/null +++ b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_3127976520.java @@ -0,0 +1,29 @@ +// List Cloud Cost Management cloud accounts with mixed-case AWS CUR 2.0 filter returns "OK" +// response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.CloudCostManagementApi; +import com.datadog.api.client.v2.api.CloudCostManagementApi.ListCostCloudAccountsV2OptionalParameters; +import com.datadog.api.client.v2.model.CloudCostAccountsResponse; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN")); + CloudCostManagementApi apiInstance = new CloudCostManagementApi(defaultClient); + + try { + CloudCostAccountsResponse result = + apiInstance.listCostCloudAccountsV2( + new ListCostCloudAccountsV2OptionalParameters().filterCloud("Aws_Cur2")); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling CloudCostManagementApi#listCostCloudAccountsV2"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} diff --git a/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_3442024574.java b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_3442024574.java new file mode 100644 index 00000000000..41f7f275d57 --- /dev/null +++ b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_3442024574.java @@ -0,0 +1,28 @@ +// List Cloud Cost Management cloud accounts with mixed-case OCI filter returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.CloudCostManagementApi; +import com.datadog.api.client.v2.api.CloudCostManagementApi.ListCostCloudAccountsV2OptionalParameters; +import com.datadog.api.client.v2.model.CloudCostAccountsResponse; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN")); + CloudCostManagementApi apiInstance = new CloudCostManagementApi(defaultClient); + + try { + CloudCostAccountsResponse result = + apiInstance.listCostCloudAccountsV2( + new ListCostCloudAccountsV2OptionalParameters().filterCloud("OcI")); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling CloudCostManagementApi#listCostCloudAccountsV2"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} diff --git a/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_420814529.java b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_420814529.java new file mode 100644 index 00000000000..2b861b382de --- /dev/null +++ b/examples/v2/cloud-cost-management/ListCostCloudAccountsV2_420814529.java @@ -0,0 +1,28 @@ +// List Cloud Cost Management cloud accounts with an empty filter returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.CloudCostManagementApi; +import com.datadog.api.client.v2.api.CloudCostManagementApi.ListCostCloudAccountsV2OptionalParameters; +import com.datadog.api.client.v2.model.CloudCostAccountsResponse; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN")); + CloudCostManagementApi apiInstance = new CloudCostManagementApi(defaultClient); + + try { + CloudCostAccountsResponse result = + apiInstance.listCostCloudAccountsV2( + new ListCostCloudAccountsV2OptionalParameters().filterCloud("")); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling CloudCostManagementApi#listCostCloudAccountsV2"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/datadog/api/client/v2/api/CloudCostManagementApi.java b/src/main/java/com/datadog/api/client/v2/api/CloudCostManagementApi.java index bbaaa354b8e..5dd86c5e3ab 100644 --- a/src/main/java/com/datadog/api/client/v2/api/CloudCostManagementApi.java +++ b/src/main/java/com/datadog/api/client/v2/api/CloudCostManagementApi.java @@ -22,6 +22,7 @@ import com.datadog.api.client.v2.model.BudgetValidationRequest; import com.datadog.api.client.v2.model.BudgetValidationResponse; import com.datadog.api.client.v2.model.BudgetWithEntries; +import com.datadog.api.client.v2.model.CloudCostAccountsResponse; import com.datadog.api.client.v2.model.CommitmentsCommitmentType; import com.datadog.api.client.v2.model.CommitmentsCoverageScalarResponse; import com.datadog.api.client.v2.model.CommitmentsCoverageTimeseriesResponse; @@ -8169,6 +8170,188 @@ public ApiResponse listCostAzureUCConfigsWithHttpInfo() new GenericType() {}); } + /** Manage optional parameters to listCostCloudAccountsV2. */ + public static class ListCostCloudAccountsV2OptionalParameters { + private String filterCloud; + + /** + * Set filterCloud. + * + * @param filterCloud Filter by cloud, either oci or aws_cur2 (case + * insensitive). Omit or leave empty to return both. (optional) + * @return ListCostCloudAccountsV2OptionalParameters + */ + public ListCostCloudAccountsV2OptionalParameters filterCloud(String filterCloud) { + this.filterCloud = filterCloud; + return this; + } + } + + /** + * List Cloud Cost Management cloud accounts. + * + *

See {@link #listCostCloudAccountsV2WithHttpInfo}. + * + * @return CloudCostAccountsResponse + * @throws ApiException if fails to make API call + */ + public CloudCostAccountsResponse listCostCloudAccountsV2() throws ApiException { + return listCostCloudAccountsV2WithHttpInfo(new ListCostCloudAccountsV2OptionalParameters()) + .getData(); + } + + /** + * List Cloud Cost Management cloud accounts. + * + *

See {@link #listCostCloudAccountsV2WithHttpInfoAsync}. + * + * @return CompletableFuture<CloudCostAccountsResponse> + */ + public CompletableFuture listCostCloudAccountsV2Async() { + return listCostCloudAccountsV2WithHttpInfoAsync(new ListCostCloudAccountsV2OptionalParameters()) + .thenApply( + response -> { + return response.getData(); + }); + } + + /** + * List Cloud Cost Management cloud accounts. + * + *

See {@link #listCostCloudAccountsV2WithHttpInfo}. + * + * @param parameters Optional parameters for the request. + * @return CloudCostAccountsResponse + * @throws ApiException if fails to make API call + */ + public CloudCostAccountsResponse listCostCloudAccountsV2( + ListCostCloudAccountsV2OptionalParameters parameters) throws ApiException { + return listCostCloudAccountsV2WithHttpInfo(parameters).getData(); + } + + /** + * List Cloud Cost Management cloud accounts. + * + *

See {@link #listCostCloudAccountsV2WithHttpInfoAsync}. + * + * @param parameters Optional parameters for the request. + * @return CompletableFuture<CloudCostAccountsResponse> + */ + public CompletableFuture listCostCloudAccountsV2Async( + ListCostCloudAccountsV2OptionalParameters parameters) { + return listCostCloudAccountsV2WithHttpInfoAsync(parameters) + .thenApply( + response -> { + return response.getData(); + }); + } + + /** + * List the OCI and AWS CUR 2.0 cloud accounts for your organization, including account IDs, + * status, and validation errors. Use filter[cloud]=oci or + * filter[cloud]=aws_cur2 to return a single cloud. When omitted or empty, both clouds are + * returned. AWS CUR 1.0, Azure, and GCP accounts are available through their dedicated + * configuration endpoints. Archived accounts are excluded. The response contains all matching + * accounts and is not paginated. + * + *

This endpoint replaces GET /api/v2/cost/oci_config. To migrate, use + * filter[cloud]=oci and update clients to accept the cloud_account resource + * type instead of oci_config. Account IDs and the existing attributes are preserved; + * each account also includes the cloud attribute. + * + * @param parameters Optional parameters for the request. + * @return ApiResponse<CloudCostAccountsResponse> + * @throws ApiException if fails to make API call + * @http.response.details + * + * + * + * + * + * + * + *
Response details
Status Code Description Response Headers
200 OK -
400 Bad Request -
403 Forbidden -
429 Too many requests -
+ */ + public ApiResponse listCostCloudAccountsV2WithHttpInfo( + ListCostCloudAccountsV2OptionalParameters parameters) throws ApiException { + Object localVarPostBody = null; + String filterCloud = parameters.filterCloud; + // create path and map variables + String localVarPath = "/api/v2/cost/cloud_accounts"; + + List localVarQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + + localVarQueryParams.addAll(apiClient.parameterToPairs("", "filter[cloud]", filterCloud)); + + Invocation.Builder builder = + apiClient.createBuilder( + "v2.CloudCostManagementApi.listCostCloudAccountsV2", + localVarPath, + localVarQueryParams, + localVarHeaderParams, + new HashMap(), + new String[] {"application/json"}, + new String[] {"apiKeyAuth", "appKeyAuth", "AuthZ"}); + return apiClient.invokeAPI( + "GET", + builder, + localVarHeaderParams, + new String[] {}, + localVarPostBody, + new HashMap(), + false, + new GenericType() {}); + } + + /** + * List Cloud Cost Management cloud accounts. + * + *

See {@link #listCostCloudAccountsV2WithHttpInfo}. + * + * @param parameters Optional parameters for the request. + * @return CompletableFuture<ApiResponse<CloudCostAccountsResponse>> + */ + public CompletableFuture> + listCostCloudAccountsV2WithHttpInfoAsync( + ListCostCloudAccountsV2OptionalParameters parameters) { + Object localVarPostBody = null; + String filterCloud = parameters.filterCloud; + // create path and map variables + String localVarPath = "/api/v2/cost/cloud_accounts"; + + List localVarQueryParams = new ArrayList(); + Map localVarHeaderParams = new HashMap(); + + localVarQueryParams.addAll(apiClient.parameterToPairs("", "filter[cloud]", filterCloud)); + + Invocation.Builder builder; + try { + builder = + apiClient.createBuilder( + "v2.CloudCostManagementApi.listCostCloudAccountsV2", + localVarPath, + localVarQueryParams, + localVarHeaderParams, + new HashMap(), + new String[] {"application/json"}, + new String[] {"apiKeyAuth", "appKeyAuth", "AuthZ"}); + } catch (ApiException ex) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally(ex); + return result; + } + return apiClient.invokeAPIAsync( + "GET", + builder, + localVarHeaderParams, + new String[] {}, + localVarPostBody, + new HashMap(), + false, + new GenericType() {}); + } + /** * List Google Cloud Usage Cost configs. * @@ -8313,8 +8496,12 @@ public CompletableFuture listCostOCIConfigsAsync() { } /** - * Note: This endpoint is deprecated. View OCI accounts in Cloud Cost Settings in - * the Datadog web application instead. + * Note: This endpoint is deprecated. Use List + * Cloud Cost Management cloud accounts with filter[cloud]=oci instead. Update + * clients to accept the cloud_account resource type instead of oci_config + * . Account IDs and the existing attributes are preserved; each account also includes the + * cloud attribute. * *

List the OCI configs. * diff --git a/src/main/java/com/datadog/api/client/v2/model/CloudCostAccount.java b/src/main/java/com/datadog/api/client/v2/model/CloudCostAccount.java new file mode 100644 index 00000000000..feab0f18d13 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/CloudCostAccount.java @@ -0,0 +1,212 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** A Cloud Cost Management account. */ +@JsonPropertyOrder({ + CloudCostAccount.JSON_PROPERTY_ATTRIBUTES, + CloudCostAccount.JSON_PROPERTY_ID, + CloudCostAccount.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class CloudCostAccount { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_ATTRIBUTES = "attributes"; + private CloudCostAccountAttributes attributes; + + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_TYPE = "type"; + private CloudCostAccountType type = CloudCostAccountType.CLOUD_ACCOUNT; + + public CloudCostAccount() {} + + @JsonCreator + public CloudCostAccount( + @JsonProperty(required = true, value = JSON_PROPERTY_ATTRIBUTES) + CloudCostAccountAttributes attributes, + @JsonProperty(required = true, value = JSON_PROPERTY_ID) String id, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) CloudCostAccountType type) { + this.attributes = attributes; + this.unparsed |= attributes.unparsed; + this.id = id; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public CloudCostAccount attributes(CloudCostAccountAttributes attributes) { + this.attributes = attributes; + this.unparsed |= attributes.unparsed; + return this; + } + + /** + * Read-only status and identifiers for a cloud cost account. + * + * @return attributes + */ + @JsonProperty(JSON_PROPERTY_ATTRIBUTES) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public CloudCostAccountAttributes getAttributes() { + return attributes; + } + + public void setAttributes(CloudCostAccountAttributes attributes) { + this.attributes = attributes; + if (attributes != null) { + this.unparsed |= attributes.unparsed; + } + } + + public CloudCostAccount id(String id) { + this.id = id; + return this; + } + + /** + * The Datadog cloud account ID used by the account filters API. + * + * @return id + */ + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public CloudCostAccount type(CloudCostAccountType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * Type of a cloud cost account. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public CloudCostAccountType getType() { + return type; + } + + public void setType(CloudCostAccountType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return CloudCostAccount + */ + @JsonAnySetter + public CloudCostAccount putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this CloudCostAccount object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CloudCostAccount cloudCostAccount = (CloudCostAccount) o; + return Objects.equals(this.attributes, cloudCostAccount.attributes) + && Objects.equals(this.id, cloudCostAccount.id) + && Objects.equals(this.type, cloudCostAccount.type) + && Objects.equals(this.additionalProperties, cloudCostAccount.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(attributes, id, type, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CloudCostAccount {\n"); + sb.append(" attributes: ").append(toIndentedString(attributes)).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountAttributes.java b/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountAttributes.java new file mode 100644 index 00000000000..76f4677651a --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountAttributes.java @@ -0,0 +1,333 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** Read-only status and identifiers for a cloud cost account. */ +@JsonPropertyOrder({ + CloudCostAccountAttributes.JSON_PROPERTY_ACCOUNT_ID, + CloudCostAccountAttributes.JSON_PROPERTY_CLOUD, + CloudCostAccountAttributes.JSON_PROPERTY_CREATED_AT, + CloudCostAccountAttributes.JSON_PROPERTY_ERROR_MESSAGES, + CloudCostAccountAttributes.JSON_PROPERTY_STATUS, + CloudCostAccountAttributes.JSON_PROPERTY_STATUS_UPDATED_AT, + CloudCostAccountAttributes.JSON_PROPERTY_UPDATED_AT +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class CloudCostAccountAttributes { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_ACCOUNT_ID = "account_id"; + private String accountId; + + public static final String JSON_PROPERTY_CLOUD = "cloud"; + private String cloud; + + public static final String JSON_PROPERTY_CREATED_AT = "created_at"; + private String createdAt; + + public static final String JSON_PROPERTY_ERROR_MESSAGES = "error_messages"; + private List errorMessages = new ArrayList<>(); + + public static final String JSON_PROPERTY_STATUS = "status"; + private String status; + + public static final String JSON_PROPERTY_STATUS_UPDATED_AT = "status_updated_at"; + private String statusUpdatedAt; + + public static final String JSON_PROPERTY_UPDATED_AT = "updated_at"; + private String updatedAt; + + public CloudCostAccountAttributes() {} + + @JsonCreator + public CloudCostAccountAttributes( + @JsonProperty(required = true, value = JSON_PROPERTY_ACCOUNT_ID) String accountId, + @JsonProperty(required = true, value = JSON_PROPERTY_CLOUD) String cloud, + @JsonProperty(required = true, value = JSON_PROPERTY_CREATED_AT) String createdAt, + @JsonProperty(required = true, value = JSON_PROPERTY_ERROR_MESSAGES) + List errorMessages, + @JsonProperty(required = true, value = JSON_PROPERTY_STATUS) String status, + @JsonProperty(required = true, value = JSON_PROPERTY_STATUS_UPDATED_AT) + String statusUpdatedAt, + @JsonProperty(required = true, value = JSON_PROPERTY_UPDATED_AT) String updatedAt) { + this.accountId = accountId; + this.cloud = cloud; + this.createdAt = createdAt; + this.errorMessages = errorMessages; + this.status = status; + this.statusUpdatedAt = statusUpdatedAt; + this.updatedAt = updatedAt; + } + + public CloudCostAccountAttributes accountId(String accountId) { + this.accountId = accountId; + return this; + } + + /** + * The cloud provider account identifier, such as an OCI tenancy OCID or AWS account ID. + * + * @return accountId + */ + @JsonProperty(JSON_PROPERTY_ACCOUNT_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public CloudCostAccountAttributes cloud(String cloud) { + this.cloud = cloud; + return this; + } + + /** + * The cloud provider and cost report type. Currently supports oci and aws_cur2 + * . + * + * @return cloud + */ + @JsonProperty(JSON_PROPERTY_CLOUD) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getCloud() { + return cloud; + } + + public void setCloud(String cloud) { + this.cloud = cloud; + } + + public CloudCostAccountAttributes createdAt(String createdAt) { + this.createdAt = createdAt; + return this; + } + + /** + * The timestamp when the cloud account was created. + * + * @return createdAt + */ + @JsonProperty(JSON_PROPERTY_CREATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(String createdAt) { + this.createdAt = createdAt; + } + + public CloudCostAccountAttributes errorMessages(List errorMessages) { + this.errorMessages = errorMessages; + return this; + } + + public CloudCostAccountAttributes addErrorMessagesItem(String errorMessagesItem) { + this.errorMessages.add(errorMessagesItem); + return this; + } + + /** + * Validation errors for the cloud account. Empty when there are no errors. + * + * @return errorMessages + */ + @JsonProperty(JSON_PROPERTY_ERROR_MESSAGES) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getErrorMessages() { + return errorMessages; + } + + public void setErrorMessages(List errorMessages) { + this.errorMessages = errorMessages; + } + + public CloudCostAccountAttributes status(String status) { + this.status = status; + return this; + } + + /** + * The cloud account status, one of active, warn, error, or + * disabled. + * + * @return status + */ + @JsonProperty(JSON_PROPERTY_STATUS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public CloudCostAccountAttributes statusUpdatedAt(String statusUpdatedAt) { + this.statusUpdatedAt = statusUpdatedAt; + return this; + } + + /** + * The timestamp when the cloud account status was last updated. + * + * @return statusUpdatedAt + */ + @JsonProperty(JSON_PROPERTY_STATUS_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getStatusUpdatedAt() { + return statusUpdatedAt; + } + + public void setStatusUpdatedAt(String statusUpdatedAt) { + this.statusUpdatedAt = statusUpdatedAt; + } + + public CloudCostAccountAttributes updatedAt(String updatedAt) { + this.updatedAt = updatedAt; + return this; + } + + /** + * The timestamp when the cloud account was last updated. + * + * @return updatedAt + */ + @JsonProperty(JSON_PROPERTY_UPDATED_AT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(String updatedAt) { + this.updatedAt = updatedAt; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return CloudCostAccountAttributes + */ + @JsonAnySetter + public CloudCostAccountAttributes putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this CloudCostAccountAttributes object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CloudCostAccountAttributes cloudCostAccountAttributes = (CloudCostAccountAttributes) o; + return Objects.equals(this.accountId, cloudCostAccountAttributes.accountId) + && Objects.equals(this.cloud, cloudCostAccountAttributes.cloud) + && Objects.equals(this.createdAt, cloudCostAccountAttributes.createdAt) + && Objects.equals(this.errorMessages, cloudCostAccountAttributes.errorMessages) + && Objects.equals(this.status, cloudCostAccountAttributes.status) + && Objects.equals(this.statusUpdatedAt, cloudCostAccountAttributes.statusUpdatedAt) + && Objects.equals(this.updatedAt, cloudCostAccountAttributes.updatedAt) + && Objects.equals( + this.additionalProperties, cloudCostAccountAttributes.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash( + accountId, + cloud, + createdAt, + errorMessages, + status, + statusUpdatedAt, + updatedAt, + additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CloudCostAccountAttributes {\n"); + sb.append(" accountId: ").append(toIndentedString(accountId)).append("\n"); + sb.append(" cloud: ").append(toIndentedString(cloud)).append("\n"); + sb.append(" createdAt: ").append(toIndentedString(createdAt)).append("\n"); + sb.append(" errorMessages: ").append(toIndentedString(errorMessages)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append(" statusUpdatedAt: ").append(toIndentedString(statusUpdatedAt)).append("\n"); + sb.append(" updatedAt: ").append(toIndentedString(updatedAt)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountType.java b/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountType.java new file mode 100644 index 00000000000..053cc27f648 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountType.java @@ -0,0 +1,56 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** Type of a cloud cost account. */ +@JsonSerialize(using = CloudCostAccountType.CloudCostAccountTypeSerializer.class) +public class CloudCostAccountType extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("cloud_account")); + + public static final CloudCostAccountType CLOUD_ACCOUNT = + new CloudCostAccountType("cloud_account"); + + CloudCostAccountType(String value) { + super(value, allowedValues); + } + + public static class CloudCostAccountTypeSerializer extends StdSerializer { + public CloudCostAccountTypeSerializer(Class t) { + super(t); + } + + public CloudCostAccountTypeSerializer() { + this(null); + } + + @Override + public void serialize( + CloudCostAccountType value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static CloudCostAccountType fromValue(String value) { + return new CloudCostAccountType(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountsResponse.java b/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountsResponse.java new file mode 100644 index 00000000000..1b7184b6682 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/CloudCostAccountsResponse.java @@ -0,0 +1,163 @@ +/* + * Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + * This product includes software developed at Datadog (https://www.datadoghq.com/). + * Copyright 2019-Present Datadog, Inc. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** List of cloud cost accounts. */ +@JsonPropertyOrder({CloudCostAccountsResponse.JSON_PROPERTY_DATA}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class CloudCostAccountsResponse { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_DATA = "data"; + private List data = new ArrayList<>(); + + public CloudCostAccountsResponse() {} + + @JsonCreator + public CloudCostAccountsResponse( + @JsonProperty(required = true, value = JSON_PROPERTY_DATA) List data) { + this.data = data; + for (CloudCostAccount item : data) { + this.unparsed |= item.unparsed; + } + } + + public CloudCostAccountsResponse data(List data) { + this.data = data; + for (CloudCostAccount item : data) { + this.unparsed |= item.unparsed; + } + return this; + } + + public CloudCostAccountsResponse addDataItem(CloudCostAccount dataItem) { + this.data.add(dataItem); + this.unparsed |= dataItem.unparsed; + return this; + } + + /** + * The cloud cost accounts matching the filter. + * + * @return data + */ + @JsonProperty(JSON_PROPERTY_DATA) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + if (data != null) { + for (CloudCostAccount item : data) { + this.unparsed |= item.unparsed; + } + } + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return CloudCostAccountsResponse + */ + @JsonAnySetter + public CloudCostAccountsResponse putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this CloudCostAccountsResponse object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + CloudCostAccountsResponse cloudCostAccountsResponse = (CloudCostAccountsResponse) o; + return Objects.equals(this.data, cloudCostAccountsResponse.data) + && Objects.equals( + this.additionalProperties, cloudCostAccountsResponse.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(data, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class CloudCostAccountsResponse {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature b/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature index 40e14ef053a..1fe10076a24 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/cloud_cost_management.feature @@ -767,6 +767,56 @@ Feature: Cloud Cost Management When the request is sent Then the response status is 200 OK + @team:ddoghq/cloud-cost-management + Scenario: List Cloud Cost Management cloud accounts returns "Bad Request" response + Given new "ListCostCloudAccountsV2" request + And request contains "filter[cloud]" parameter with value "gcp" + When the request is sent + Then the response status is 400 Bad Request + And the response "errors[0].status" is equal to "400" + And the response "errors[0].detail" is equal to "attribute \"filter[cloud]\" must be one of: oci, aws_cur2" + + @team:ddoghq/cloud-cost-management + Scenario: List Cloud Cost Management cloud accounts returns "OK" response + Given new "ListCostCloudAccountsV2" request + When the request is sent + Then the response status is 200 OK + + @team:ddoghq/cloud-cost-management + Scenario: List Cloud Cost Management cloud accounts with AWS CUR 2.0 filter returns "OK" response + Given new "ListCostCloudAccountsV2" request + And request contains "filter[cloud]" parameter with value "aws_cur2" + When the request is sent + Then the response status is 200 OK + + @team:ddoghq/cloud-cost-management + Scenario: List Cloud Cost Management cloud accounts with OCI filter returns "OK" response + Given new "ListCostCloudAccountsV2" request + And request contains "filter[cloud]" parameter with value "oci" + When the request is sent + Then the response status is 200 OK + + @team:ddoghq/cloud-cost-management + Scenario: List Cloud Cost Management cloud accounts with an empty filter returns "OK" response + Given new "ListCostCloudAccountsV2" request + And request contains "filter[cloud]" parameter with value "" + When the request is sent + Then the response status is 200 OK + + @team:ddoghq/cloud-cost-management + Scenario: List Cloud Cost Management cloud accounts with mixed-case AWS CUR 2.0 filter returns "OK" response + Given new "ListCostCloudAccountsV2" request + And request contains "filter[cloud]" parameter with value "Aws_Cur2" + When the request is sent + Then the response status is 200 OK + + @team:ddoghq/cloud-cost-management + Scenario: List Cloud Cost Management cloud accounts with mixed-case OCI filter returns "OK" response + Given new "ListCostCloudAccountsV2" request + And request contains "filter[cloud]" parameter with value "OcI" + When the request is sent + Then the response status is 200 OK + @generated @skip @team:ddoghq/cloud-cost-management Scenario: List Cloud Cost Management orchestrators returns "Bad Request" response Given operation "ListCostTagMetadataOrchestrators" enabled diff --git a/src/test/resources/com/datadog/api/client/v2/api/undo.json b/src/test/resources/com/datadog/api/client/v2/api/undo.json index 6b0fafaa067..c7e0bfc8bb7 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/undo.json +++ b/src/test/resources/com/datadog/api/client/v2/api/undo.json @@ -1808,6 +1808,12 @@ "type": "safe" } }, + "ListCostCloudAccountsV2": { + "tag": "Cloud Cost Management", + "undo": { + "type": "safe" + } + }, "GetCommitmentsCommitmentList": { "tag": "Cloud Cost Management", "undo": { diff --git a/src/test/resources/generated-test/test-runner-data/manifest.json b/src/test/resources/generated-test/test-runner-data/manifest.json index 1017f4ccf33..33c1d061053 100644 --- a/src/test/resources/generated-test/test-runner-data/manifest.json +++ b/src/test/resources/generated-test/test-runner-data/manifest.json @@ -4130,6 +4130,55 @@ "scenario": "List Cloud Cost Management Azure configs returns \"OK\" response", "version": "v2" }, + { + "feature": "Cloud Cost Management", + "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-bad-request-response.json", + "scenario": "List Cloud Cost Management cloud accounts returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-ok-response.json", + "scenario": "List Cloud Cost Management cloud accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-aws-cur-2-0-filter-returns-ok-response.json", + "scenario": "List Cloud Cost Management cloud accounts with AWS CUR 2.0 filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-oci-filter-returns-ok-response.json", + "scenario": "List Cloud Cost Management cloud accounts with OCI filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-an-empty-filter-returns-ok-response.json", + "scenario": "List Cloud Cost Management cloud accounts with an empty filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-aws-cur-2-0-filter-returns-ok-response.json", + "scenario": "List Cloud Cost Management cloud accounts with mixed-case AWS CUR 2.0 filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-oci-filter-returns-ok-response.json", + "scenario": "List Cloud Cost Management cloud accounts with mixed-case OCI filter returns \"OK\" response", + "version": "v2" + }, { "feature": "Cloud Cost Management", "feature_file": "../../com/datadog/api/client/v2/api/cloud_cost_management.feature", diff --git a/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-bad-request-response.json b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-bad-request-response.json new file mode 100644 index 00000000000..21fd3f17251 --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 400, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management cloud accounts returns \"Bad Request\" response", + "operation_id": "ListCostCloudAccountsV2", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[cloud]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "gcp" + }, + "style": null + } + ], + "path": "/api/v2/cost/cloud_accounts" + }, + "scenario": "List Cloud Cost Management cloud accounts returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-ok-response.json b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-ok-response.json new file mode 100644 index 00000000000..a399d134d40 --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management cloud accounts returns \"OK\" response", + "operation_id": "ListCostCloudAccountsV2", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/cloud_accounts" + }, + "scenario": "List Cloud Cost Management cloud accounts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-an-empty-filter-returns-ok-response.json b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-an-empty-filter-returns-ok-response.json new file mode 100644 index 00000000000..86ea5a8cb28 --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-an-empty-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management cloud accounts with an empty filter returns \"OK\" response", + "operation_id": "ListCostCloudAccountsV2", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[cloud]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "" + }, + "style": null + } + ], + "path": "/api/v2/cost/cloud_accounts" + }, + "scenario": "List Cloud Cost Management cloud accounts with an empty filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-aws-cur-2-0-filter-returns-ok-response.json b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-aws-cur-2-0-filter-returns-ok-response.json new file mode 100644 index 00000000000..8ff72551cbb --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-aws-cur-2-0-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management cloud accounts with AWS CUR 2.0 filter returns \"OK\" response", + "operation_id": "ListCostCloudAccountsV2", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[cloud]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aws_cur2" + }, + "style": null + } + ], + "path": "/api/v2/cost/cloud_accounts" + }, + "scenario": "List Cloud Cost Management cloud accounts with AWS CUR 2.0 filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-aws-cur-2-0-filter-returns-ok-response.json b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-aws-cur-2-0-filter-returns-ok-response.json new file mode 100644 index 00000000000..ffeab032025 --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-aws-cur-2-0-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management cloud accounts with mixed-case AWS CUR 2.0 filter returns \"OK\" response", + "operation_id": "ListCostCloudAccountsV2", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[cloud]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "Aws_Cur2" + }, + "style": null + } + ], + "path": "/api/v2/cost/cloud_accounts" + }, + "scenario": "List Cloud Cost Management cloud accounts with mixed-case AWS CUR 2.0 filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-oci-filter-returns-ok-response.json b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-oci-filter-returns-ok-response.json new file mode 100644 index 00000000000..ea0ed159a60 --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-mixed-case-oci-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management cloud accounts with mixed-case OCI filter returns \"OK\" response", + "operation_id": "ListCostCloudAccountsV2", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[cloud]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "OcI" + }, + "style": null + } + ], + "path": "/api/v2/cost/cloud_accounts" + }, + "scenario": "List Cloud Cost Management cloud accounts with mixed-case OCI filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-oci-filter-returns-ok-response.json b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-oci-filter-returns-ok-response.json new file mode 100644 index 00000000000..34c6a722f9b --- /dev/null +++ b/src/test/resources/generated-test/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-cloud-accounts-with-oci-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management cloud accounts with OCI filter returns \"OK\" response", + "operation_id": "ListCostCloudAccountsV2", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[cloud]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "oci" + }, + "style": null + } + ], + "path": "/api/v2/cost/cloud_accounts" + }, + "scenario": "List Cloud Cost Management cloud accounts with OCI filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/src/test/resources/generated-test/test-server-data/v2/cloud-cost-management.json b/src/test/resources/generated-test/test-server-data/v2/cloud-cost-management.json index ed00b46193f..de073b6055b 100644 --- a/src/test/resources/generated-test/test-server-data/v2/cloud-cost-management.json +++ b/src/test/resources/generated-test/test-server-data/v2/cloud-cost-management.json @@ -1108,6 +1108,253 @@ "scenario": "List Cloud Cost Management Azure configs returns \"OK\" response", "version": "v2" }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-09-28T21:36:23.736Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/cloud_accounts", + "query": [ + [ + "filter[cloud]", + "gcp" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"filter[cloud]\\\" must be one of: oci, aws_cur2\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List Cloud Cost Management cloud accounts returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-09-28T21:36:24.451Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/cloud_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"12345\",\"type\":\"cloud_account\",\"attributes\":{\"account_id\":\"123456789123\",\"cloud\":\"aws_cur2\",\"created_at\":\"2026-05-21T18:11:12Z\",\"error_messages\":[],\"status\":\"active\",\"status_updated_at\":\"2026-05-21T18:11:12Z\",\"updated_at\":\"2026-05-21T18:11:12Z\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Cloud Cost Management cloud accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-09-28T21:36:24.578Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/cloud_accounts", + "query": [ + [ + "filter[cloud]", + "aws_cur2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"12345\",\"type\":\"cloud_account\",\"attributes\":{\"account_id\":\"123456789123\",\"cloud\":\"aws_cur2\",\"created_at\":\"2026-05-21T18:11:12Z\",\"error_messages\":[],\"status\":\"active\",\"status_updated_at\":\"2026-05-21T18:11:12Z\",\"updated_at\":\"2026-05-21T18:11:12Z\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Cloud Cost Management cloud accounts with AWS CUR 2.0 filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-09-28T21:36:24.725Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/cloud_accounts", + "query": [ + [ + "filter[cloud]", + "oci" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Cloud Cost Management cloud accounts with OCI filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-09-28T21:36:24.883Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/cloud_accounts", + "query": [ + [ + "filter[cloud]", + "" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"12345\",\"type\":\"cloud_account\",\"attributes\":{\"account_id\":\"123456789123\",\"cloud\":\"aws_cur2\",\"created_at\":\"2026-05-21T18:11:12Z\",\"error_messages\":[],\"status\":\"active\",\"status_updated_at\":\"2026-05-21T18:11:12Z\",\"updated_at\":\"2026-05-21T18:11:12Z\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Cloud Cost Management cloud accounts with an empty filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-09-28T21:36:25.029Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/cloud_accounts", + "query": [ + [ + "filter[cloud]", + "Aws_Cur2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"12345\",\"type\":\"cloud_account\",\"attributes\":{\"account_id\":\"123456789123\",\"cloud\":\"aws_cur2\",\"created_at\":\"2026-05-21T18:11:12Z\",\"error_messages\":[],\"status\":\"active\",\"status_updated_at\":\"2026-05-21T18:11:12Z\",\"updated_at\":\"2026-05-21T18:11:12Z\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Cloud Cost Management cloud accounts with mixed-case AWS CUR 2.0 filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-09-28T21:36:25.192Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/cloud_accounts", + "query": [ + [ + "filter[cloud]", + "OcI" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Cloud Cost Management cloud accounts with mixed-case OCI filter returns \"OK\" response", + "version": "v2" + }, { "feature": "Cloud Cost Management", "frozen_at": "2024-07-22T12:06:38.368Z",