diff --git a/.generated-info b/.generated-info index ad7b5e2166da..8623329320a1 100644 --- a/.generated-info +++ b/.generated-info @@ -1,4 +1,4 @@ { - "spec_repo_commit": "c3e3e39", - "generated": "2025-08-13 13:35:47.950" + "spec_repo_commit": "8001cbb", + "generated": "2025-08-13 20:27:07.288" } diff --git a/cassettes/features/v2/security_monitoring/Convert-a-rule-from-JSON-to-Terraform-returns-OK-response.frozen b/cassettes/features/v2/security_monitoring/Convert-a-rule-from-JSON-to-Terraform-returns-OK-response.frozen index e80ec51462b1..8f630e980fd5 100644 --- a/cassettes/features/v2/security_monitoring/Convert-a-rule-from-JSON-to-Terraform-returns-OK-response.frozen +++ b/cassettes/features/v2/security_monitoring/Convert-a-rule-from-JSON-to-Terraform-returns-OK-response.frozen @@ -1 +1 @@ -2025-04-24T11:34:50.866Z \ No newline at end of file +2025-08-13T20:13:44.192Z \ No newline at end of file diff --git a/cassettes/features/v2/security_monitoring/Convert-a-rule-from-JSON-to-Terraform-returns-OK-response.yml b/cassettes/features/v2/security_monitoring/Convert-a-rule-from-JSON-to-Terraform-returns-OK-response.yml index 26b198fa8760..06a70a88c48e 100644 --- a/cassettes/features/v2/security_monitoring/Convert-a-rule-from-JSON-to-Terraform-returns-OK-response.yml +++ b/cassettes/features/v2/security_monitoring/Convert-a-rule-from-JSON-to-Terraform-returns-OK-response.yml @@ -1,10 +1,10 @@ http_interactions: -- recorded_at: Thu, 24 Apr 2025 11:34:50 GMT +- recorded_at: Wed, 13 Aug 2025 20:13:44 GMT request: body: encoding: UTF-8 string: '{"cases":[{"condition":"a > 0","name":"","notifications":[],"status":"info"}],"filters":[],"isEnabled":true,"message":"Test - rule","name":"Test-Convert_a_rule_from_JSON_to_Terraform_returns_OK_response-1745494490","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metric":"","query":"@test:true"}],"tags":[],"type":"log_detection"}' + rule","name":"_b87eac89722bbff0","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metric":"","query":"@test:true"}],"tags":[],"type":"log_detection"}' headers: Accept: - application/json @@ -16,9 +16,8 @@ http_interactions: body: encoding: UTF-8 string: '{"terraformContent":"resource \"datadog_security_monitoring_rule\" - \"test-convert_a_rule_from_json_to_terraform_returns_ok_response-1745494490\" - {\n\tname = \"Test-Convert_a_rule_from_JSON_to_Terraform_returns_OK_response-1745494490\"\n\tenabled - = true\n\tquery {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\tdistinct_fields + \"_b87eac89722bbff0\" {\n\tname = \"_b87eac89722bbff0\"\n\tenabled = true\n\tquery + {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\tdistinct_fields = []\n\t\taggregation = \"count\"\n\t\tname = \"\"\n\t\tdata_source = \"logs\"\n\t}\n\toptions {\n\t\tkeep_alive = 3600\n\t\tmax_signal_duration = 86400\n\t\tdetection_method = \"threshold\"\n\t\tevaluation_window = 900\n\t}\n\tcase {\n\t\tname = \"\"\n\t\tstatus diff --git a/cassettes/features/v2/security_monitoring/Convert-an-existing-rule-from-JSON-to-Terraform-returns-OK-response.frozen b/cassettes/features/v2/security_monitoring/Convert-an-existing-rule-from-JSON-to-Terraform-returns-OK-response.frozen index cb7f9eae20ca..82a36934d8f9 100644 --- a/cassettes/features/v2/security_monitoring/Convert-an-existing-rule-from-JSON-to-Terraform-returns-OK-response.frozen +++ b/cassettes/features/v2/security_monitoring/Convert-an-existing-rule-from-JSON-to-Terraform-returns-OK-response.frozen @@ -1 +1 @@ -2025-04-24T11:34:51.208Z \ No newline at end of file +2025-08-13T20:13:44.611Z \ No newline at end of file diff --git a/cassettes/features/v2/security_monitoring/Convert-an-existing-rule-from-JSON-to-Terraform-returns-OK-response.yml b/cassettes/features/v2/security_monitoring/Convert-an-existing-rule-from-JSON-to-Terraform-returns-OK-response.yml index 425c7e551c12..555b874d0981 100644 --- a/cassettes/features/v2/security_monitoring/Convert-an-existing-rule-from-JSON-to-Terraform-returns-OK-response.yml +++ b/cassettes/features/v2/security_monitoring/Convert-an-existing-rule-from-JSON-to-Terraform-returns-OK-response.yml @@ -1,10 +1,10 @@ http_interactions: -- recorded_at: Thu, 24 Apr 2025 11:34:51 GMT +- recorded_at: Wed, 13 Aug 2025 20:13:44 GMT request: body: encoding: UTF-8 string: '{"cases":[{"condition":"a > 0","name":"","notifications":[],"status":"info"}],"filters":[],"isEnabled":true,"message":"Test - rule","name":"Test-Convert_an_existing_rule_from_JSON_to_Terraform_returns_OK_response-1745494491","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metrics":[],"query":"@test:true"}],"tags":[],"type":"log_detection"}' + rule","name":"_1166a375f2500467","options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"queries":[{"aggregation":"count","distinctFields":[],"groupByFields":[],"metrics":[],"query":"@test:true"}],"tags":[],"type":"log_detection"}' headers: Accept: - application/json @@ -15,29 +15,28 @@ http_interactions: response: body: encoding: UTF-8 - string: '{"name":"Test-Convert_an_existing_rule_from_JSON_to_Terraform_returns_OK_response-1745494491","createdAt":1745494491502,"isDefault":false,"isPartner":false,"isEnabled":true,"isBeta":false,"isDeleted":false,"isDeprecated":false,"queries":[{"query":"@test:true","groupByFields":[],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"threshold","maxSignalDuration":86400,"keepAlive":3600},"cases":[{"name":"","status":"info","notifications":[],"condition":"a - \u003e 0"}],"message":"Test rule","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"version":1,"id":"e60-iv6-d7e","blocking":false,"metadata":{"entities":null,"sources":null},"creationAuthorId":1445416,"creator":{"handle":"frog@datadoghq.com","name":"frog"},"updater":{"handle":"","name":""}}' + string: '{"name":"_1166a375f2500467","createdAt":1755116024952,"isDefault":false,"isPartner":false,"isEnabled":true,"isBeta":false,"isDeleted":false,"isDeprecated":false,"queries":[{"query":"@test:true","groupByFields":[],"hasOptionalGroupByFields":false,"distinctFields":[],"aggregation":"count","name":"","dataSource":"logs"}],"options":{"evaluationWindow":900,"detectionMethod":"threshold","maxSignalDuration":86400,"keepAlive":3600},"cases":[{"name":"","status":"info","notifications":[],"condition":"a + \u003e 0"}],"message":"Test rule","tags":[],"hasExtendedTitle":false,"type":"log_detection","filters":[],"version":1,"id":"shm-tx8-e8x","blocking":false,"metadata":{"entities":null,"sources":null},"creationAuthorId":1445416,"creator":{"handle":"frog@datadoghq.com","name":"frog"},"updater":{"handle":"","name":""}}' headers: Content-Type: - application/json status: code: 200 message: OK -- recorded_at: Thu, 24 Apr 2025 11:34:51 GMT +- recorded_at: Wed, 13 Aug 2025 20:13:44 GMT request: body: null headers: Accept: - application/json method: GET - uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/e60-iv6-d7e/convert + uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/shm-tx8-e8x/convert response: body: encoding: UTF-8 string: '{"terraformContent":"resource \"datadog_security_monitoring_rule\" - \"test-convert_an_existing_rule_from_json_to_terraform_returns_ok_response-1745494491\" - {\n\tname = \"Test-Convert_an_existing_rule_from_JSON_to_Terraform_returns_OK_response-1745494491\"\n\tenabled - = true\n\tquery {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\tdistinct_fields + \"_1166a375f2500467\" {\n\tname = \"_1166a375f2500467\"\n\tenabled = true\n\tquery + {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\tdistinct_fields = []\n\t\taggregation = \"count\"\n\t\tname = \"\"\n\t\tdata_source = \"logs\"\n\t}\n\toptions {\n\t\tkeep_alive = 3600\n\t\tmax_signal_duration = 86400\n\t\tdetection_method = \"threshold\"\n\t\tevaluation_window = 900\n\t}\n\tcase {\n\t\tname = \"\"\n\t\tstatus @@ -49,14 +48,14 @@ http_interactions: status: code: 200 message: OK -- recorded_at: Thu, 24 Apr 2025 11:34:51 GMT +- recorded_at: Wed, 13 Aug 2025 20:13:44 GMT request: body: null headers: Accept: - '*/*' method: DELETE - uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/e60-iv6-d7e + uri: https://api.datadoghq.com/api/v2/security_monitoring/rules/shm-tx8-e8x response: body: encoding: UTF-8 diff --git a/examples/v2/security-monitoring/ConvertExistingSecurityMonitoringRule.rb b/examples/v2/security-monitoring/ConvertExistingSecurityMonitoringRule.rb index af81080c70a4..a9303957fe70 100644 --- a/examples/v2/security-monitoring/ConvertExistingSecurityMonitoringRule.rb +++ b/examples/v2/security-monitoring/ConvertExistingSecurityMonitoringRule.rb @@ -3,6 +3,6 @@ require "datadog_api_client" api_instance = DatadogAPIClient::V2::SecurityMonitoringAPI.new -# there is a valid "security_rule" in the system -SECURITY_RULE_ID = ENV["SECURITY_RULE_ID"] -p api_instance.convert_existing_security_monitoring_rule(SECURITY_RULE_ID) +# there is a valid "security_rule_hash" in the system +SECURITY_RULE_HASH_ID = ENV["SECURITY_RULE_HASH_ID"] +p api_instance.convert_existing_security_monitoring_rule(SECURITY_RULE_HASH_ID) diff --git a/examples/v2/security-monitoring/ConvertSecurityMonitoringRuleFromJSONToTerraform.rb b/examples/v2/security-monitoring/ConvertSecurityMonitoringRuleFromJSONToTerraform.rb index facd523df102..9fdbb450eca8 100644 --- a/examples/v2/security-monitoring/ConvertSecurityMonitoringRuleFromJSONToTerraform.rb +++ b/examples/v2/security-monitoring/ConvertSecurityMonitoringRuleFromJSONToTerraform.rb @@ -4,7 +4,7 @@ api_instance = DatadogAPIClient::V2::SecurityMonitoringAPI.new body = DatadogAPIClient::V2::SecurityMonitoringStandardRulePayload.new({ - name: "Example-Security-Monitoring", + name: "_49768568946de993", queries: [ DatadogAPIClient::V2::SecurityMonitoringStandardRuleQuery.new({ query: "@test:true", diff --git a/features/v2/given.json b/features/v2/given.json index 904a03d75911..b6097093658a 100644 --- a/features/v2/given.json +++ b/features/v2/given.json @@ -804,6 +804,18 @@ "tag": "Security Monitoring", "operationId": "CreateSecurityMonitoringRule" }, + { + "parameters": [ + { + "name": "body", + "value": "{\n \"name\": \"_{{ unique_hash }}\",\n \"queries\": [{\n \"query\": \"@test:true\",\n \"aggregation\": \"count\",\n \"groupByFields\": [],\n \"distinctFields\": [],\n \"metrics\": []\n }],\n \"filters\": [],\n \"cases\": [{\n \"name\": \"\",\n \"status\": \"info\",\n \"condition\": \"a > 0\",\n \"notifications\": []\n }],\n \"options\": {\n \"evaluationWindow\": 900,\n \"keepAlive\": 3600,\n \"maxSignalDuration\": 86400\n },\n \"message\": \"Test rule\",\n \"tags\": [],\n \"isEnabled\": true,\n \"type\": \"log_detection\"\n}" + } + ], + "step": "there is a valid \"security_rule_hash\" in the system", + "key": "security_rule_hash", + "tag": "Security Monitoring", + "operationId": "CreateSecurityMonitoringRule" + }, { "step": "a valid \"configuration\" in the system", "key": "configuration", diff --git a/features/v2/security_monitoring.feature b/features/v2/security_monitoring.feature index 3acea8148db2..1ef29aec3e61 100644 --- a/features/v2/security_monitoring.feature +++ b/features/v2/security_monitoring.feature @@ -132,10 +132,10 @@ Feature: Security Monitoring @team:DataDog/k9-cloud-security-platform Scenario: Convert a rule from JSON to Terraform returns "OK" response Given new "ConvertSecurityMonitoringRuleFromJSONToTerraform" request - And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection"} + And body with value {"name":"_{{ unique_hash }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection"} When the request is sent Then the response status is 200 OK - And the response "terraformContent" is equal to "resource \"datadog_security_monitoring_rule\" \"{{ unique_lower }}\" {\n\tname = \"{{ unique }}\"\n\tenabled = true\n\tquery {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\tdistinct_fields = []\n\t\taggregation = \"count\"\n\t\tname = \"\"\n\t\tdata_source = \"logs\"\n\t}\n\toptions {\n\t\tkeep_alive = 3600\n\t\tmax_signal_duration = 86400\n\t\tdetection_method = \"threshold\"\n\t\tevaluation_window = 900\n\t}\n\tcase {\n\t\tname = \"\"\n\t\tstatus = \"info\"\n\t\tnotifications = []\n\t\tcondition = \"a > 0\"\n\t}\n\tmessage = \"Test rule\"\n\ttags = []\n\thas_extended_title = false\n\ttype = \"log_detection\"\n}\n" + And the response "terraformContent" is equal to "resource \"datadog_security_monitoring_rule\" \"_{{ unique_hash }}\" {\n\tname = \"_{{ unique_hash }}\"\n\tenabled = true\n\tquery {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\tdistinct_fields = []\n\t\taggregation = \"count\"\n\t\tname = \"\"\n\t\tdata_source = \"logs\"\n\t}\n\toptions {\n\t\tkeep_alive = 3600\n\t\tmax_signal_duration = 86400\n\t\tdetection_method = \"threshold\"\n\t\tevaluation_window = 900\n\t}\n\tcase {\n\t\tname = \"\"\n\t\tstatus = \"info\"\n\t\tnotifications = []\n\t\tcondition = \"a > 0\"\n\t}\n\tmessage = \"Test rule\"\n\ttags = []\n\thas_extended_title = false\n\ttype = \"log_detection\"\n}\n" @skip @team:DataDog/k9-cloud-security-platform Scenario: Convert an existing rule from JSON to Terraform returns "Bad Request" response @@ -154,11 +154,11 @@ Feature: Security Monitoring @team:DataDog/k9-cloud-security-platform Scenario: Convert an existing rule from JSON to Terraform returns "OK" response Given new "ConvertExistingSecurityMonitoringRule" request - And there is a valid "security_rule" in the system - And request contains "rule_id" parameter from "security_rule.id" + And there is a valid "security_rule_hash" in the system + And request contains "rule_id" parameter from "security_rule_hash.id" When the request is sent Then the response status is 200 OK - And the response "terraformContent" is equal to "resource \"datadog_security_monitoring_rule\" \"{{ unique_lower }}\" {\n\tname = \"{{ unique }}\"\n\tenabled = true\n\tquery {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\tdistinct_fields = []\n\t\taggregation = \"count\"\n\t\tname = \"\"\n\t\tdata_source = \"logs\"\n\t}\n\toptions {\n\t\tkeep_alive = 3600\n\t\tmax_signal_duration = 86400\n\t\tdetection_method = \"threshold\"\n\t\tevaluation_window = 900\n\t}\n\tcase {\n\t\tname = \"\"\n\t\tstatus = \"info\"\n\t\tnotifications = []\n\t\tcondition = \"a > 0\"\n\t}\n\tmessage = \"Test rule\"\n\ttags = []\n\thas_extended_title = false\n\ttype = \"log_detection\"\n}\n" + And the response "terraformContent" is equal to "resource \"datadog_security_monitoring_rule\" \"_{{ unique_hash }}\" {\n\tname = \"_{{ unique_hash }}\"\n\tenabled = true\n\tquery {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\tdistinct_fields = []\n\t\taggregation = \"count\"\n\t\tname = \"\"\n\t\tdata_source = \"logs\"\n\t}\n\toptions {\n\t\tkeep_alive = 3600\n\t\tmax_signal_duration = 86400\n\t\tdetection_method = \"threshold\"\n\t\tevaluation_window = 900\n\t}\n\tcase {\n\t\tname = \"\"\n\t\tstatus = \"info\"\n\t\tnotifications = []\n\t\tcondition = \"a > 0\"\n\t}\n\tmessage = \"Test rule\"\n\ttags = []\n\thas_extended_title = false\n\ttype = \"log_detection\"\n}\n" @skip-validation @team:DataDog/k9-cloud-security-platform Scenario: Create a cloud_configuration rule returns "OK" response