Skip to content

Add convert rule JSON to terraform to Datadog API Spec. #2014

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .apigentools-info
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
"spec_versions": {
"v1": {
"apigentools_version": "1.6.6",
"regenerated": "2024-07-11 14:29:30.187479",
"spec_repo_commit": "3eedf0af"
"regenerated": "2024-07-11 16:35:12.035901",
"spec_repo_commit": "d83fe206"
},
"v2": {
"apigentools_version": "1.6.6",
"regenerated": "2024-07-11 14:29:30.204297",
"spec_repo_commit": "3eedf0af"
"regenerated": "2024-07-11 16:35:12.052518",
"spec_repo_commit": "d83fe206"
}
}
}
86 changes: 86 additions & 0 deletions .generator/schemas/v2/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17377,6 +17377,18 @@ components:
required:
- status
type: object
SecurityMonitoringRuleConvertPayload:
description: Convert a rule from JSON to Terraform.
oneOf:
- $ref: '#/components/schemas/SecurityMonitoringStandardRulePayload'
- $ref: '#/components/schemas/SecurityMonitoringSignalRulePayload'
SecurityMonitoringRuleConvertResponse:
description: Result of the convert rule request containing Terraform content.
properties:
terraformContent:
description: Terraform string as a result of converting the rule from JSON.
type: string
type: object
SecurityMonitoringRuleCreatePayload:
description: Create a new rule.
oneOf:
Expand Down Expand Up @@ -33246,6 +33258,47 @@ paths:
tags:
- Security Monitoring
x-codegen-request-body-name: body
/api/v2/security_monitoring/rules/convert:
post:
description: 'Convert a rule that doesn''t (yet) exist from JSON to Terraform
for datadog provider

resource datadog_security_monitoring_rule.'
operationId: ConvertSecurityMonitoringRuleFromJSONToTerraform
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityMonitoringRuleConvertPayload'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityMonitoringRuleConvertResponse'
description: OK
'400':
$ref: '#/components/responses/BadRequestResponse'
'401':
$ref: '#/components/responses/ConcurrentModificationResponse'
'403':
$ref: '#/components/responses/NotAuthorizedResponse'
'404':
$ref: '#/components/responses/NotFoundResponse'
'429':
$ref: '#/components/responses/TooManyRequestsResponse'
security:
- apiKeyAuth: []
appKeyAuth: []
- AuthZ:
- security_monitoring_rules_write
summary: Convert a rule from JSON to Terraform
tags:
- Security Monitoring
x-codegen-request-body-name: body
x-unstable: '**Note**: This feature is in private beta. Reach out to support
to request access.'
/api/v2/security_monitoring/rules/test:
post:
description: Test a rule.
Expand Down Expand Up @@ -33403,6 +33456,39 @@ paths:
tags:
- Security Monitoring
x-codegen-request-body-name: body
/api/v2/security_monitoring/rules/{rule_id}/convert:
get:
description: 'Convert an existing rule from JSON to Terraform for datadog provider

resource datadog_security_monitoring_rule.'
operationId: ConvertExistingSecurityMonitoringRule
parameters:
- $ref: '#/components/parameters/SecurityMonitoringRuleID'
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SecurityMonitoringRuleConvertResponse'
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: Convert an existing rule from JSON to Terraform
tags:
- Security Monitoring
x-unstable: '**Note**: This feature is in private beta. Reach out to support
to request access.'
/api/v2/security_monitoring/rules/{rule_id}/test:
post:
description: Test an existing rule.
Expand Down
14 changes: 14 additions & 0 deletions docs/datadog_api_client.v2.model.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7855,6 +7855,20 @@ security\_monitoring\_rule\_case\_create
:members:
:show-inheritance:

security\_monitoring\_rule\_convert\_payload
--------------------------------------------

.. automodule:: datadog_api_client.v2.model.security_monitoring_rule_convert_payload
:members:
:show-inheritance:

security\_monitoring\_rule\_convert\_response
---------------------------------------------

.. automodule:: datadog_api_client.v2.model.security_monitoring_rule_convert_response
:members:
:show-inheritance:

security\_monitoring\_rule\_create\_payload
-------------------------------------------

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
"""
Convert an existing rule from JSON to Terraform returns "OK" response
"""

from os import environ
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi

# there is a valid "security_rule" in the system
SECURITY_RULE_ID = environ["SECURITY_RULE_ID"]

configuration = Configuration()
configuration.unstable_operations["convert_existing_security_monitoring_rule"] = True
with ApiClient(configuration) as api_client:
api_instance = SecurityMonitoringApi(api_client)
response = api_instance.convert_existing_security_monitoring_rule(
rule_id=SECURITY_RULE_ID,
)

print(response)
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
"""
Convert a rule from JSON 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_case_create import SecurityMonitoringRuleCaseCreate
from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import (
SecurityMonitoringRuleEvaluationWindow,
)
from datadog_api_client.v2.model.security_monitoring_rule_keep_alive import SecurityMonitoringRuleKeepAlive
from datadog_api_client.v2.model.security_monitoring_rule_max_signal_duration import (
SecurityMonitoringRuleMaxSignalDuration,
)
from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions
from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import (
SecurityMonitoringRuleQueryAggregation,
)
from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity
from datadog_api_client.v2.model.security_monitoring_rule_type_create import SecurityMonitoringRuleTypeCreate
from datadog_api_client.v2.model.security_monitoring_standard_rule_payload import SecurityMonitoringStandardRulePayload
from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery

body = SecurityMonitoringStandardRulePayload(
name="Example-Security-Monitoring",
queries=[
SecurityMonitoringStandardRuleQuery(
query="@test:true",
aggregation=SecurityMonitoringRuleQueryAggregation.COUNT,
group_by_fields=[],
distinct_fields=[],
metric="",
),
],
filters=[],
cases=[
SecurityMonitoringRuleCaseCreate(
name="",
status=SecurityMonitoringRuleSeverity.INFO,
condition="a > 0",
notifications=[],
),
],
options=SecurityMonitoringRuleOptions(
evaluation_window=SecurityMonitoringRuleEvaluationWindow.FIFTEEN_MINUTES,
keep_alive=SecurityMonitoringRuleKeepAlive.ONE_HOUR,
max_signal_duration=SecurityMonitoringRuleMaxSignalDuration.ONE_DAY,
),
message="Test rule",
tags=[],
is_enabled=True,
type=SecurityMonitoringRuleTypeCreate.LOG_DETECTION,
)

configuration = Configuration()
configuration.unstable_operations["convert_security_monitoring_rule_from_json_to_terraform"] = True
with ApiClient(configuration) as api_client:
api_instance = SecurityMonitoringApi(api_client)
response = api_instance.convert_security_monitoring_rule_from_json_to_terraform(body=body)

print(response)
2 changes: 2 additions & 0 deletions src/datadog_api_client/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,8 @@ def __init__(
"v2.update_incident_todo": False,
"v2.query_scalar_data": False,
"v2.query_timeseries_data": False,
"v2.convert_existing_security_monitoring_rule": False,
"v2.convert_security_monitoring_rule_from_json_to_terraform": False,
"v2.get_finding": False,
"v2.list_findings": False,
"v2.mute_findings": False,
Expand Down
88 changes: 86 additions & 2 deletions src/datadog_api_client/v2/api/security_monitoring_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,13 @@
SecurityMonitoringSignalRuleCreatePayload,
)
from datadog_api_client.v2.model.cloud_configuration_rule_create_payload import CloudConfigurationRuleCreatePayload
from datadog_api_client.v2.model.security_monitoring_rule_convert_response import SecurityMonitoringRuleConvertResponse
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_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
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.cloud_configuration_rule_payload import CloudConfigurationRulePayload
from datadog_api_client.v2.model.security_monitoring_rule_update_payload import SecurityMonitoringRuleUpdatePayload
from datadog_api_client.v2.model.security_monitoring_signals_list_response import SecurityMonitoringSignalsListResponse
Expand Down Expand Up @@ -80,6 +82,49 @@ def __init__(self, api_client=None):
api_client = ApiClient(Configuration())
self.api_client = api_client

self._convert_existing_security_monitoring_rule_endpoint = _Endpoint(
settings={
"response_type": (SecurityMonitoringRuleConvertResponse,),
"auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"],
"endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}/convert",
"operation_id": "convert_existing_security_monitoring_rule",
"http_method": "GET",
"version": "v2",
},
params_map={
"rule_id": {
"required": True,
"openapi_types": (str,),
"attribute": "rule_id",
"location": "path",
},
},
headers_map={
"accept": ["application/json"],
},
api_client=api_client,
)

self._convert_security_monitoring_rule_from_json_to_terraform_endpoint = _Endpoint(
settings={
"response_type": (SecurityMonitoringRuleConvertResponse,),
"auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"],
"endpoint_path": "/api/v2/security_monitoring/rules/convert",
"operation_id": "convert_security_monitoring_rule_from_json_to_terraform",
"http_method": "POST",
"version": "v2",
},
params_map={
"body": {
"required": True,
"openapi_types": (SecurityMonitoringRuleConvertPayload,),
"location": "body",
},
},
headers_map={"accept": ["application/json"], "content_type": ["application/json"]},
api_client=api_client,
)

self._create_security_filter_endpoint = _Endpoint(
settings={
"response_type": (SecurityFilterResponse,),
Expand Down Expand Up @@ -786,6 +831,45 @@ def __init__(self, api_client=None):
api_client=api_client,
)

def convert_existing_security_monitoring_rule(
self,
rule_id: str,
) -> SecurityMonitoringRuleConvertResponse:
"""Convert an existing rule from JSON to Terraform.

Convert an existing rule from JSON to Terraform for datadog provider
resource datadog_security_monitoring_rule.

:param rule_id: The ID of the rule.
:type rule_id: str
:rtype: SecurityMonitoringRuleConvertResponse
"""
kwargs: Dict[str, Any] = {}
kwargs["rule_id"] = rule_id

return self._convert_existing_security_monitoring_rule_endpoint.call_with_http_info(**kwargs)

def convert_security_monitoring_rule_from_json_to_terraform(
self,
body: Union[
SecurityMonitoringRuleConvertPayload,
SecurityMonitoringStandardRulePayload,
SecurityMonitoringSignalRulePayload,
],
) -> SecurityMonitoringRuleConvertResponse:
"""Convert a rule from JSON to Terraform.

Convert a rule that doesn't (yet) exist from JSON to Terraform for datadog provider
resource datadog_security_monitoring_rule.

:type body: SecurityMonitoringRuleConvertPayload
:rtype: SecurityMonitoringRuleConvertResponse
"""
kwargs: Dict[str, Any] = {}
kwargs["body"] = body

return self._convert_security_monitoring_rule_from_json_to_terraform_endpoint.call_with_http_info(**kwargs)

def create_security_filter(
self,
body: SecurityFilterCreateRequest,
Expand Down
Loading
Loading