diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 4d59bfade1..1f6f404aa1 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -76194,6 +76194,53 @@ components: required: - status type: object + SecurityMonitoringRuleConvertBulkAttributes: + description: Attributes for bulk converting security monitoring rules to Terraform. + properties: + ruleIds: + description: "List of rule IDs to convert. Each rule will be included in the resulting ZIP file\nas a separate Terraform file." + example: + - def-000-u7q + - def-000-7dd + items: + description: A rule ID to include in the bulk convert. + type: string + minItems: 1 + type: array + required: + - ruleIds + type: object + SecurityMonitoringRuleConvertBulkData: + description: Data for bulk converting security monitoring rules to Terraform. + properties: + attributes: + $ref: "#/components/schemas/SecurityMonitoringRuleConvertBulkAttributes" + id: + description: Request ID. + example: convert_bulk + type: string + type: + $ref: "#/components/schemas/SecurityMonitoringRuleConvertBulkDataType" + required: + - attributes + - type + type: object + SecurityMonitoringRuleConvertBulkDataType: + description: The type of the resource. + enum: + - security_monitoring_rules_convert_bulk + example: security_monitoring_rules_convert_bulk + type: string + x-enum-varnames: + - SECURITY_MONITORING_RULES_CONVERT_BULK + SecurityMonitoringRuleConvertBulkPayload: + description: Payload for bulk converting security monitoring rules to Terraform. + properties: + data: + $ref: "#/components/schemas/SecurityMonitoringRuleConvertBulkData" + required: + - data + type: object SecurityMonitoringRuleConvertPayload: description: Convert a rule from JSON to Terraform. oneOf: @@ -153576,6 +153623,63 @@ paths: operator: OR permissions: - security_monitoring_rules_write + /api/v2/security_monitoring/rules/convert/bulk: + post: + description: |- + Convert a list of existing security monitoring rules to Terraform for the Datadog provider + resource `datadog_security_monitoring_rule`. Returns a ZIP archive containing one Terraform + file per rule. You can convert rules for the following types: + - App and API Protection + - Cloud SIEM (log detection and signal correlation) + - Workload Protection + operationId: BulkConvertExistingSecurityMonitoringRules + requestBody: + content: + "application/json": + examples: + default: + value: + data: + attributes: + ruleIds: + - def-000-u7q + - def-000-7dd + id: convert_bulk + type: security_monitoring_rules_convert_bulk + schema: + $ref: "#/components/schemas/SecurityMonitoringRuleConvertBulkPayload" + required: true + responses: + "200": + content: + application/zip: + examples: + default: + value: "" + schema: + format: binary + type: string + description: OK + "400": + $ref: "#/components/responses/BadRequestResponse" + "403": + $ref: "#/components/responses/NotAuthorizedResponse" + "404": + $ref: "#/components/responses/NotFoundResponse" + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - security_monitoring_rules_read + summary: Bulk convert rules to Terraform + tags: ["Security Monitoring"] + x-codegen-request-body-name: body + "x-permission": + operator: OR + permissions: + - security_monitoring_rules_read /api/v2/security_monitoring/rules/test: post: description: |- diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst index 5d1f8d7e30..8610d8cd5b 100644 --- a/docs/datadog_api_client.v2.model.rst +++ b/docs/datadog_api_client.v2.model.rst @@ -33163,6 +33163,34 @@ datadog\_api\_client.v2.model.security\_monitoring\_rule\_case\_create module :members: :show-inheritance: +datadog\_api\_client.v2.model.security\_monitoring\_rule\_convert\_bulk\_attributes module +------------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_attributes + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.security\_monitoring\_rule\_convert\_bulk\_data module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.security\_monitoring\_rule\_convert\_bulk\_data\_type module +------------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data_type + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.security\_monitoring\_rule\_convert\_bulk\_payload module +--------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_payload + :members: + :show-inheritance: + datadog\_api\_client.v2.model.security\_monitoring\_rule\_convert\_payload module --------------------------------------------------------------------------------- diff --git a/examples/v2/security-monitoring/BulkConvertExistingSecurityMonitoringRules.py b/examples/v2/security-monitoring/BulkConvertExistingSecurityMonitoringRules.py new file mode 100644 index 0000000000..0bcc7e6ad1 --- /dev/null +++ b/examples/v2/security-monitoring/BulkConvertExistingSecurityMonitoringRules.py @@ -0,0 +1,36 @@ +""" +Bulk convert rules to Terraform returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_attributes import ( + SecurityMonitoringRuleConvertBulkAttributes, +) +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data import SecurityMonitoringRuleConvertBulkData +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data_type import ( + SecurityMonitoringRuleConvertBulkDataType, +) +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_payload import ( + SecurityMonitoringRuleConvertBulkPayload, +) + +body = SecurityMonitoringRuleConvertBulkPayload( + data=SecurityMonitoringRuleConvertBulkData( + attributes=SecurityMonitoringRuleConvertBulkAttributes( + rule_ids=[ + "def-000-u7q", + "def-000-7dd", + ], + ), + id="convert_bulk", + type=SecurityMonitoringRuleConvertBulkDataType.SECURITY_MONITORING_RULES_CONVERT_BULK, + ), +) + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = SecurityMonitoringApi(api_client) + response = api_instance.bulk_convert_existing_security_monitoring_rules(body=body) + + print(response.read()) diff --git a/src/datadog_api_client/v2/api/security_monitoring_api.py b/src/datadog_api_client/v2/api/security_monitoring_api.py index 17da56a4a8..f836708c55 100644 --- a/src/datadog_api_client/v2/api/security_monitoring_api.py +++ b/src/datadog_api_client/v2/api/security_monitoring_api.py @@ -166,6 +166,9 @@ from datadog_api_client.v2.model.security_monitoring_rule_convert_payload import SecurityMonitoringRuleConvertPayload from datadog_api_client.v2.model.security_monitoring_standard_rule_payload import SecurityMonitoringStandardRulePayload from datadog_api_client.v2.model.security_monitoring_signal_rule_payload import SecurityMonitoringSignalRulePayload +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_payload import ( + SecurityMonitoringRuleConvertBulkPayload, +) from datadog_api_client.v2.model.security_monitoring_rule_test_response import SecurityMonitoringRuleTestResponse from datadog_api_client.v2.model.security_monitoring_rule_test_request import SecurityMonitoringRuleTestRequest from datadog_api_client.v2.model.security_monitoring_rule_validate_payload import SecurityMonitoringRuleValidatePayload @@ -353,6 +356,26 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._bulk_convert_existing_security_monitoring_rules_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/convert/bulk", + "operation_id": "bulk_convert_existing_security_monitoring_rules", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleConvertBulkPayload,), + "location": "body", + }, + }, + headers_map={"accept": ["application/zip", "application/json"], "content_type": ["application/json"]}, + api_client=api_client, + ) + self._bulk_create_sample_log_generation_subscriptions_endpoint = _Endpoint( settings={ "response_type": (SampleLogGenerationBulkSubscriptionResponse,), @@ -3892,6 +3915,28 @@ def batch_get_security_monitoring_dataset_dependencies( return self._batch_get_security_monitoring_dataset_dependencies_endpoint.call_with_http_info(**kwargs) + def bulk_convert_existing_security_monitoring_rules( + self, + body: SecurityMonitoringRuleConvertBulkPayload, + ) -> file_type: + """Bulk convert rules to Terraform. + + Convert a list of existing security monitoring rules to Terraform for the Datadog provider + resource ``datadog_security_monitoring_rule``. Returns a ZIP archive containing one Terraform + file per rule. You can convert rules for the following types: + + * App and API Protection + * Cloud SIEM (log detection and signal correlation) + * Workload Protection + + :type body: SecurityMonitoringRuleConvertBulkPayload + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_convert_existing_security_monitoring_rules_endpoint.call_with_http_info(**kwargs) + def bulk_create_sample_log_generation_subscriptions( self, body: SampleLogGenerationBulkSubscriptionRequest, diff --git a/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_attributes.py b/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_attributes.py new file mode 100644 index 0000000000..87437ee0f0 --- /dev/null +++ b/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_attributes.py @@ -0,0 +1,41 @@ +# 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. +from __future__ import annotations + +from typing import List + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +class SecurityMonitoringRuleConvertBulkAttributes(ModelNormal): + validations = { + "rule_ids": { + "min_items": 1, + }, + } + + @cached_property + def openapi_types(_): + return { + "rule_ids": ([str],), + } + + attribute_map = { + "rule_ids": "ruleIds", + } + + def __init__(self_, rule_ids: List[str], **kwargs): + """ + Attributes for bulk converting security monitoring rules to Terraform. + + :param rule_ids: List of rule IDs to convert. Each rule will be included in the resulting ZIP file + as a separate Terraform file. + :type rule_ids: [str] + """ + super().__init__(kwargs) + + self_.rule_ids = rule_ids diff --git a/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data.py b/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data.py new file mode 100644 index 0000000000..b3b26e15e3 --- /dev/null +++ b/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data.py @@ -0,0 +1,71 @@ +# 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. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_attributes import ( + SecurityMonitoringRuleConvertBulkAttributes, + ) + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data_type import ( + SecurityMonitoringRuleConvertBulkDataType, + ) + + +class SecurityMonitoringRuleConvertBulkData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_attributes import ( + SecurityMonitoringRuleConvertBulkAttributes, + ) + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data_type import ( + SecurityMonitoringRuleConvertBulkDataType, + ) + + return { + "attributes": (SecurityMonitoringRuleConvertBulkAttributes,), + "id": (str,), + "type": (SecurityMonitoringRuleConvertBulkDataType,), + } + + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__( + self_, + attributes: SecurityMonitoringRuleConvertBulkAttributes, + type: SecurityMonitoringRuleConvertBulkDataType, + id: Union[str, UnsetType] = unset, + **kwargs, + ): + """ + Data for bulk converting security monitoring rules to Terraform. + + :param attributes: Attributes for bulk converting security monitoring rules to Terraform. + :type attributes: SecurityMonitoringRuleConvertBulkAttributes + + :param id: Request ID. + :type id: str, optional + + :param type: The type of the resource. + :type type: SecurityMonitoringRuleConvertBulkDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + self_.attributes = attributes + self_.type = type diff --git a/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data_type.py b/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data_type.py new file mode 100644 index 0000000000..bfdbb364bb --- /dev/null +++ b/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data_type.py @@ -0,0 +1,37 @@ +# 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. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class SecurityMonitoringRuleConvertBulkDataType(ModelSimple): + """ + The type of the resource. + + :param value: If omitted defaults to "security_monitoring_rules_convert_bulk". Must be one of ["security_monitoring_rules_convert_bulk"]. + :type value: str + """ + + allowed_values = { + "security_monitoring_rules_convert_bulk", + } + SECURITY_MONITORING_RULES_CONVERT_BULK: ClassVar["SecurityMonitoringRuleConvertBulkDataType"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +SecurityMonitoringRuleConvertBulkDataType.SECURITY_MONITORING_RULES_CONVERT_BULK = ( + SecurityMonitoringRuleConvertBulkDataType("security_monitoring_rules_convert_bulk") +) diff --git a/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_payload.py b/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_payload.py new file mode 100644 index 0000000000..7af337ce3c --- /dev/null +++ b/src/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_payload.py @@ -0,0 +1,44 @@ +# 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. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data import ( + SecurityMonitoringRuleConvertBulkData, + ) + + +class SecurityMonitoringRuleConvertBulkPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data import ( + SecurityMonitoringRuleConvertBulkData, + ) + + return { + "data": (SecurityMonitoringRuleConvertBulkData,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringRuleConvertBulkData, **kwargs): + """ + Payload for bulk converting security monitoring rules to Terraform. + + :param data: Data for bulk converting security monitoring rules to Terraform. + :type data: SecurityMonitoringRuleConvertBulkData + """ + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py index cea5bec21d..d7ca9f8c0f 100644 --- a/src/datadog_api_client/v2/models/__init__.py +++ b/src/datadog_api_client/v2/models/__init__.py @@ -6702,6 +6702,16 @@ ) from datadog_api_client.v2.model.security_monitoring_rule_case_action_type import SecurityMonitoringRuleCaseActionType from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_attributes import ( + SecurityMonitoringRuleConvertBulkAttributes, +) +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data import SecurityMonitoringRuleConvertBulkData +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data_type import ( + SecurityMonitoringRuleConvertBulkDataType, +) +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_payload import ( + SecurityMonitoringRuleConvertBulkPayload, +) from datadog_api_client.v2.model.security_monitoring_rule_convert_payload import SecurityMonitoringRuleConvertPayload from datadog_api_client.v2.model.security_monitoring_rule_convert_response import SecurityMonitoringRuleConvertResponse from datadog_api_client.v2.model.security_monitoring_rule_create_payload import SecurityMonitoringRuleCreatePayload @@ -13232,6 +13242,10 @@ "SecurityMonitoringRuleCaseActionOptionsFlaggedIPType", "SecurityMonitoringRuleCaseActionType", "SecurityMonitoringRuleCaseCreate", + "SecurityMonitoringRuleConvertBulkAttributes", + "SecurityMonitoringRuleConvertBulkData", + "SecurityMonitoringRuleConvertBulkDataType", + "SecurityMonitoringRuleConvertBulkPayload", "SecurityMonitoringRuleConvertPayload", "SecurityMonitoringRuleConvertResponse", "SecurityMonitoringRuleCreatePayload", diff --git a/tests/v2/features/security_monitoring.feature b/tests/v2/features/security_monitoring.feature index 4bafaa9beb..d23634826e 100644 --- a/tests/v2/features/security_monitoring.feature +++ b/tests/v2/features/security_monitoring.feature @@ -115,6 +115,27 @@ Feature: Security Monitoring And the response "data.attributes.insights" has item with field "resource_id" with value "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=" And the response "data.attributes.insights" has item with field "resource_id" with value "MmUzMzZkODQ2YTI3NDU0OTk4NDk3NzhkOTY5YjU2Zjh-YWJjZGI1ODI4OTYzNWM3ZmUwZTBlOWRkYTRiMGUyOGQ=" + @generated @skip @team:DataDog/k9-cloud-siem + Scenario: Bulk convert rules to Terraform returns "Bad Request" response + Given new "BulkConvertExistingSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["def-000-u7q", "def-000-7dd"]}, "id": "convert_bulk", "type": "security_monitoring_rules_convert_bulk"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-cloud-siem + Scenario: Bulk convert rules to Terraform returns "Not Found" response + Given new "BulkConvertExistingSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["def-000-u7q", "def-000-7dd"]}, "id": "convert_bulk", "type": "security_monitoring_rules_convert_bulk"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-cloud-siem + Scenario: Bulk convert rules to Terraform returns "OK" response + Given new "BulkConvertExistingSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["def-000-u7q", "def-000-7dd"]}, "id": "convert_bulk", "type": "security_monitoring_rules_convert_bulk"}} + When the request is sent + Then the response status is 200 OK + @generated @skip @team:DataDog/k9-cloud-siem Scenario: Bulk delete security monitoring rules returns "Bad Request" response Given new "BulkDeleteSecurityMonitoringRules" request diff --git a/tests/v2/features/undo.json b/tests/v2/features/undo.json index b6003df868..0dadc6fa7a 100644 --- a/tests/v2/features/undo.json +++ b/tests/v2/features/undo.json @@ -6688,6 +6688,12 @@ "type": "idempotent" } }, + "BulkConvertExistingSecurityMonitoringRules": { + "tag": "Security Monitoring", + "undo": { + "type": "safe" + } + }, "TestSecurityMonitoringRule": { "tag": "Security Monitoring", "undo": {