diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index a03900136a..ee899f5065 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -12638,6 +12638,7 @@ components: data: attributes: compliance_host: false + function: true vuln_containers_os: true vuln_host_os: true id: 12345678-90ab-cdef-1234-567890abcdef @@ -12652,6 +12653,7 @@ components: data: - attributes: compliance_host: false + function: true vuln_containers_os: true vuln_host_os: true id: 12345678-90ab-cdef-1234-567890abcdef @@ -12686,6 +12688,9 @@ components: compliance_host: description: Indicates whether host compliance scanning is enabled. type: boolean + function: + description: Indicates if scanning of Azure Functions is enabled. + type: boolean vuln_containers_os: description: Indicates if scanning for vulnerabilities in containers is enabled. type: boolean @@ -12733,6 +12738,9 @@ components: compliance_host: description: Indicates whether host compliance scanning is enabled. type: boolean + function: + description: Indicates if scanning of Azure Functions is enabled. + type: boolean vuln_containers_os: description: Indicates if scanning for vulnerabilities in containers is enabled. type: boolean @@ -40828,6 +40836,7 @@ components: example: data: attributes: + cloud_function: true compliance_host: false vuln_containers_os: true vuln_host_os: true @@ -40842,6 +40851,7 @@ components: example: data: - attributes: + cloud_function: true compliance_host: false vuln_containers_os: true vuln_host_os: true @@ -40874,6 +40884,9 @@ components: GcpScanOptionsDataAttributes: description: Attributes for GCP scan options configuration. properties: + cloud_function: + description: Indicates if scanning of Cloud Functions is enabled. + type: boolean compliance_host: description: Indicates whether host compliance scanning is enabled. type: boolean @@ -40921,6 +40934,9 @@ components: GcpScanOptionsInputUpdateDataAttributes: description: Attributes for updating GCP scan options configuration. properties: + cloud_function: + description: Indicates if scanning of Cloud Functions is enabled. + type: boolean compliance_host: description: Indicates whether host compliance scanning is enabled. type: boolean diff --git a/examples/v2_agentless-scanning_CreateAzureScanOptions.rs b/examples/v2_agentless-scanning_CreateAzureScanOptions.rs index 74e6a8901f..00e888a78a 100644 --- a/examples/v2_agentless-scanning_CreateAzureScanOptions.rs +++ b/examples/v2_agentless-scanning_CreateAzureScanOptions.rs @@ -15,6 +15,7 @@ async fn main() { ) .attributes( AzureScanOptionsDataAttributes::new() + .function(true) .vuln_containers_os(true) .vuln_host_os(true), ), diff --git a/examples/v2_agentless-scanning_CreateGcpScanOptions.rs b/examples/v2_agentless-scanning_CreateGcpScanOptions.rs index e2f59cec98..8da4c9146f 100644 --- a/examples/v2_agentless-scanning_CreateGcpScanOptions.rs +++ b/examples/v2_agentless-scanning_CreateGcpScanOptions.rs @@ -16,6 +16,7 @@ async fn main() { ) .attributes( GcpScanOptionsDataAttributes::new() + .cloud_function(true) .vuln_containers_os(true) .vuln_host_os(true), ), diff --git a/examples/v2_agentless-scanning_UpdateGcpScanOptions.rs b/examples/v2_agentless-scanning_UpdateGcpScanOptions.rs index e762316148..c12c42cf06 100644 --- a/examples/v2_agentless-scanning_UpdateGcpScanOptions.rs +++ b/examples/v2_agentless-scanning_UpdateGcpScanOptions.rs @@ -13,7 +13,11 @@ async fn main() { "api-spec-test".to_string(), GcpScanOptionsInputUpdateDataType::GCP_SCAN_OPTIONS, ) - .attributes(GcpScanOptionsInputUpdateDataAttributes::new().vuln_containers_os(false)), + .attributes( + GcpScanOptionsInputUpdateDataAttributes::new() + .cloud_function(true) + .vuln_containers_os(false), + ), ); let configuration = datadog::Configuration::new(); let api = AgentlessScanningAPI::with_config(configuration); diff --git a/src/datadogV2/model/model_azure_scan_options_data_attributes.rs b/src/datadogV2/model/model_azure_scan_options_data_attributes.rs index a32bbb9c4a..53590428fc 100644 --- a/src/datadogV2/model/model_azure_scan_options_data_attributes.rs +++ b/src/datadogV2/model/model_azure_scan_options_data_attributes.rs @@ -14,6 +14,9 @@ pub struct AzureScanOptionsDataAttributes { /// Indicates whether host compliance scanning is enabled. #[serde(rename = "compliance_host")] pub compliance_host: Option, + /// Indicates if scanning of Azure Functions is enabled. + #[serde(rename = "function")] + pub function: Option, /// Indicates if scanning for vulnerabilities in containers is enabled. #[serde(rename = "vuln_containers_os")] pub vuln_containers_os: Option, @@ -31,6 +34,7 @@ impl AzureScanOptionsDataAttributes { pub fn new() -> AzureScanOptionsDataAttributes { AzureScanOptionsDataAttributes { compliance_host: None, + function: None, vuln_containers_os: None, vuln_host_os: None, additional_properties: std::collections::BTreeMap::new(), @@ -43,6 +47,11 @@ impl AzureScanOptionsDataAttributes { self } + pub fn function(mut self, value: bool) -> Self { + self.function = Some(value); + self + } + pub fn vuln_containers_os(mut self, value: bool) -> Self { self.vuln_containers_os = Some(value); self @@ -86,6 +95,7 @@ impl<'de> Deserialize<'de> for AzureScanOptionsDataAttributes { M: MapAccess<'a>, { let mut compliance_host: Option = None; + let mut function: Option = None; let mut vuln_containers_os: Option = None; let mut vuln_host_os: Option = None; let mut additional_properties: std::collections::BTreeMap< @@ -103,6 +113,12 @@ impl<'de> Deserialize<'de> for AzureScanOptionsDataAttributes { compliance_host = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "function" => { + if v.is_null() { + continue; + } + function = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "vuln_containers_os" => { if v.is_null() { continue; @@ -127,6 +143,7 @@ impl<'de> Deserialize<'de> for AzureScanOptionsDataAttributes { let content = AzureScanOptionsDataAttributes { compliance_host, + function, vuln_containers_os, vuln_host_os, additional_properties, diff --git a/src/datadogV2/model/model_azure_scan_options_input_update_data_attributes.rs b/src/datadogV2/model/model_azure_scan_options_input_update_data_attributes.rs index 7732abe9c2..d30193794b 100644 --- a/src/datadogV2/model/model_azure_scan_options_input_update_data_attributes.rs +++ b/src/datadogV2/model/model_azure_scan_options_input_update_data_attributes.rs @@ -14,6 +14,9 @@ pub struct AzureScanOptionsInputUpdateDataAttributes { /// Indicates whether host compliance scanning is enabled. #[serde(rename = "compliance_host")] pub compliance_host: Option, + /// Indicates if scanning of Azure Functions is enabled. + #[serde(rename = "function")] + pub function: Option, /// Indicates if scanning for vulnerabilities in containers is enabled. #[serde(rename = "vuln_containers_os")] pub vuln_containers_os: Option, @@ -31,6 +34,7 @@ impl AzureScanOptionsInputUpdateDataAttributes { pub fn new() -> AzureScanOptionsInputUpdateDataAttributes { AzureScanOptionsInputUpdateDataAttributes { compliance_host: None, + function: None, vuln_containers_os: None, vuln_host_os: None, additional_properties: std::collections::BTreeMap::new(), @@ -43,6 +47,11 @@ impl AzureScanOptionsInputUpdateDataAttributes { self } + pub fn function(mut self, value: bool) -> Self { + self.function = Some(value); + self + } + pub fn vuln_containers_os(mut self, value: bool) -> Self { self.vuln_containers_os = Some(value); self @@ -86,6 +95,7 @@ impl<'de> Deserialize<'de> for AzureScanOptionsInputUpdateDataAttributes { M: MapAccess<'a>, { let mut compliance_host: Option = None; + let mut function: Option = None; let mut vuln_containers_os: Option = None; let mut vuln_host_os: Option = None; let mut additional_properties: std::collections::BTreeMap< @@ -103,6 +113,12 @@ impl<'de> Deserialize<'de> for AzureScanOptionsInputUpdateDataAttributes { compliance_host = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "function" => { + if v.is_null() { + continue; + } + function = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "vuln_containers_os" => { if v.is_null() { continue; @@ -127,6 +143,7 @@ impl<'de> Deserialize<'de> for AzureScanOptionsInputUpdateDataAttributes { let content = AzureScanOptionsInputUpdateDataAttributes { compliance_host, + function, vuln_containers_os, vuln_host_os, additional_properties, diff --git a/src/datadogV2/model/model_gcp_scan_options_data_attributes.rs b/src/datadogV2/model/model_gcp_scan_options_data_attributes.rs index 87aef969bb..2f6c268edc 100644 --- a/src/datadogV2/model/model_gcp_scan_options_data_attributes.rs +++ b/src/datadogV2/model/model_gcp_scan_options_data_attributes.rs @@ -11,6 +11,9 @@ use std::fmt::{self, Formatter}; #[skip_serializing_none] #[derive(Clone, Debug, PartialEq, Serialize)] pub struct GcpScanOptionsDataAttributes { + /// Indicates if scanning of Cloud Functions is enabled. + #[serde(rename = "cloud_function")] + pub cloud_function: Option, /// Indicates whether host compliance scanning is enabled. #[serde(rename = "compliance_host")] pub compliance_host: Option, @@ -30,6 +33,7 @@ pub struct GcpScanOptionsDataAttributes { impl GcpScanOptionsDataAttributes { pub fn new() -> GcpScanOptionsDataAttributes { GcpScanOptionsDataAttributes { + cloud_function: None, compliance_host: None, vuln_containers_os: None, vuln_host_os: None, @@ -38,6 +42,11 @@ impl GcpScanOptionsDataAttributes { } } + pub fn cloud_function(mut self, value: bool) -> Self { + self.cloud_function = Some(value); + self + } + pub fn compliance_host(mut self, value: bool) -> Self { self.compliance_host = Some(value); self @@ -85,6 +94,7 @@ impl<'de> Deserialize<'de> for GcpScanOptionsDataAttributes { where M: MapAccess<'a>, { + let mut cloud_function: Option = None; let mut compliance_host: Option = None; let mut vuln_containers_os: Option = None; let mut vuln_host_os: Option = None; @@ -96,6 +106,13 @@ impl<'de> Deserialize<'de> for GcpScanOptionsDataAttributes { while let Some((k, v)) = map.next_entry::()? { match k.as_str() { + "cloud_function" => { + if v.is_null() { + continue; + } + cloud_function = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "compliance_host" => { if v.is_null() { continue; @@ -126,6 +143,7 @@ impl<'de> Deserialize<'de> for GcpScanOptionsDataAttributes { } let content = GcpScanOptionsDataAttributes { + cloud_function, compliance_host, vuln_containers_os, vuln_host_os, diff --git a/src/datadogV2/model/model_gcp_scan_options_input_update_data_attributes.rs b/src/datadogV2/model/model_gcp_scan_options_input_update_data_attributes.rs index 7a6dd38958..5fa2fd0739 100644 --- a/src/datadogV2/model/model_gcp_scan_options_input_update_data_attributes.rs +++ b/src/datadogV2/model/model_gcp_scan_options_input_update_data_attributes.rs @@ -11,6 +11,9 @@ use std::fmt::{self, Formatter}; #[skip_serializing_none] #[derive(Clone, Debug, PartialEq, Serialize)] pub struct GcpScanOptionsInputUpdateDataAttributes { + /// Indicates if scanning of Cloud Functions is enabled. + #[serde(rename = "cloud_function")] + pub cloud_function: Option, /// Indicates whether host compliance scanning is enabled. #[serde(rename = "compliance_host")] pub compliance_host: Option, @@ -30,6 +33,7 @@ pub struct GcpScanOptionsInputUpdateDataAttributes { impl GcpScanOptionsInputUpdateDataAttributes { pub fn new() -> GcpScanOptionsInputUpdateDataAttributes { GcpScanOptionsInputUpdateDataAttributes { + cloud_function: None, compliance_host: None, vuln_containers_os: None, vuln_host_os: None, @@ -38,6 +42,11 @@ impl GcpScanOptionsInputUpdateDataAttributes { } } + pub fn cloud_function(mut self, value: bool) -> Self { + self.cloud_function = Some(value); + self + } + pub fn compliance_host(mut self, value: bool) -> Self { self.compliance_host = Some(value); self @@ -85,6 +94,7 @@ impl<'de> Deserialize<'de> for GcpScanOptionsInputUpdateDataAttributes { where M: MapAccess<'a>, { + let mut cloud_function: Option = None; let mut compliance_host: Option = None; let mut vuln_containers_os: Option = None; let mut vuln_host_os: Option = None; @@ -96,6 +106,13 @@ impl<'de> Deserialize<'de> for GcpScanOptionsInputUpdateDataAttributes { while let Some((k, v)) = map.next_entry::()? { match k.as_str() { + "cloud_function" => { + if v.is_null() { + continue; + } + cloud_function = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "compliance_host" => { if v.is_null() { continue; @@ -126,6 +143,7 @@ impl<'de> Deserialize<'de> for GcpScanOptionsInputUpdateDataAttributes { } let content = GcpScanOptionsInputUpdateDataAttributes { + cloud_function, compliance_host, vuln_containers_os, vuln_host_os, diff --git a/tests/scenarios/cassettes/v2/agentless_scanning/Create-Azure-scan-options-returns-Created-response.frozen b/tests/scenarios/cassettes/v2/agentless_scanning/Create-Azure-scan-options-returns-Created-response.frozen index 283b6451f6..14b188d1d5 100644 --- a/tests/scenarios/cassettes/v2/agentless_scanning/Create-Azure-scan-options-returns-Created-response.frozen +++ b/tests/scenarios/cassettes/v2/agentless_scanning/Create-Azure-scan-options-returns-Created-response.frozen @@ -1 +1 @@ -2025-10-23T22:21:55.015Z \ No newline at end of file +2026-07-17T06:38:46.211Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/agentless_scanning/Create-Azure-scan-options-returns-Created-response.json b/tests/scenarios/cassettes/v2/agentless_scanning/Create-Azure-scan-options-returns-Created-response.json index 883ddff976..9b1c65c9f9 100644 --- a/tests/scenarios/cassettes/v2/agentless_scanning/Create-Azure-scan-options-returns-Created-response.json +++ b/tests/scenarios/cassettes/v2/agentless_scanning/Create-Azure-scan-options-returns-Created-response.json @@ -3,7 +3,7 @@ { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"vuln_containers_os\":true,\"vuln_host_os\":true},\"id\":\"12345678-90ab-cdef-1234-567890abcdef\",\"type\":\"azure_scan_options\"}}", + "string": "{\"data\":{\"attributes\":{\"function\":true,\"vuln_containers_os\":true,\"vuln_host_os\":true},\"id\":\"12345678-90ab-cdef-1234-567890abcdef\",\"type\":\"azure_scan_options\"}}", "encoding": null }, "headers": { @@ -19,7 +19,7 @@ }, "response": { "body": { - "string": "{\"data\":{\"id\":\"12345678-90ab-cdef-1234-567890abcdef\",\"type\":\"azure_scan_options\",\"attributes\":{\"vuln_containers_os\":true,\"vuln_host_os\":true}}}", + "string": "{\"data\":{\"id\":\"12345678-90ab-cdef-1234-567890abcdef\",\"type\":\"azure_scan_options\",\"attributes\":{\"compliance_host\":false,\"function\":true,\"vuln_containers_os\":true,\"vuln_host_os\":true}}}", "encoding": null }, "headers": { @@ -32,7 +32,7 @@ "message": "Created" } }, - "recorded_at": "Thu, 23 Oct 2025 22:21:55 GMT" + "recorded_at": "Fri, 17 Jul 2026 06:38:46 GMT" }, { "request": { @@ -60,7 +60,7 @@ "message": "OK" } }, - "recorded_at": "Thu, 23 Oct 2025 22:21:55 GMT" + "recorded_at": "Fri, 17 Jul 2026 06:38:46 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/cassettes/v2/agentless_scanning/Create-GCP-scan-options-returns-Agentless-scan-options-enabled-successfully-response.frozen b/tests/scenarios/cassettes/v2/agentless_scanning/Create-GCP-scan-options-returns-Agentless-scan-options-enabled-successfully-response.frozen index a6a44de7fc..94aee94de6 100644 --- a/tests/scenarios/cassettes/v2/agentless_scanning/Create-GCP-scan-options-returns-Agentless-scan-options-enabled-successfully-response.frozen +++ b/tests/scenarios/cassettes/v2/agentless_scanning/Create-GCP-scan-options-returns-Agentless-scan-options-enabled-successfully-response.frozen @@ -1 +1 @@ -2025-10-23T22:21:55.656Z \ No newline at end of file +2026-07-17T06:38:47.064Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/agentless_scanning/Create-GCP-scan-options-returns-Agentless-scan-options-enabled-successfully-response.json b/tests/scenarios/cassettes/v2/agentless_scanning/Create-GCP-scan-options-returns-Agentless-scan-options-enabled-successfully-response.json index 7e541bab40..70b47ce228 100644 --- a/tests/scenarios/cassettes/v2/agentless_scanning/Create-GCP-scan-options-returns-Agentless-scan-options-enabled-successfully-response.json +++ b/tests/scenarios/cassettes/v2/agentless_scanning/Create-GCP-scan-options-returns-Agentless-scan-options-enabled-successfully-response.json @@ -3,7 +3,7 @@ { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"vuln_containers_os\":true,\"vuln_host_os\":true},\"id\":\"new-project\",\"type\":\"gcp_scan_options\"}}", + "string": "{\"data\":{\"attributes\":{\"cloud_function\":true,\"vuln_containers_os\":true,\"vuln_host_os\":true},\"id\":\"new-project\",\"type\":\"gcp_scan_options\"}}", "encoding": null }, "headers": { @@ -19,7 +19,7 @@ }, "response": { "body": { - "string": "{\"data\":{\"id\":\"new-project\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":true,\"vuln_host_os\":true}}}", + "string": "{\"data\":{\"id\":\"new-project\",\"type\":\"gcp_scan_options\",\"attributes\":{\"cloud_function\":true,\"compliance_host\":false,\"vuln_containers_os\":true,\"vuln_host_os\":true}}}", "encoding": null }, "headers": { @@ -32,7 +32,7 @@ "message": "Created" } }, - "recorded_at": "Thu, 23 Oct 2025 22:21:55 GMT" + "recorded_at": "Fri, 17 Jul 2026 06:38:47 GMT" }, { "request": { @@ -56,7 +56,7 @@ "message": "No Content" } }, - "recorded_at": "Thu, 23 Oct 2025 22:21:55 GMT" + "recorded_at": "Fri, 17 Jul 2026 06:38:47 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/cassettes/v2/agentless_scanning/Update-GCP-scan-options-returns-OK-response.frozen b/tests/scenarios/cassettes/v2/agentless_scanning/Update-GCP-scan-options-returns-OK-response.frozen index e13f833231..eb1b85a19f 100644 --- a/tests/scenarios/cassettes/v2/agentless_scanning/Update-GCP-scan-options-returns-OK-response.frozen +++ b/tests/scenarios/cassettes/v2/agentless_scanning/Update-GCP-scan-options-returns-OK-response.frozen @@ -1 +1 @@ -2025-10-23T22:22:02.253Z \ No newline at end of file +2026-07-17T06:38:47.452Z \ No newline at end of file diff --git a/tests/scenarios/cassettes/v2/agentless_scanning/Update-GCP-scan-options-returns-OK-response.json b/tests/scenarios/cassettes/v2/agentless_scanning/Update-GCP-scan-options-returns-OK-response.json index 1118f75769..70f709109a 100644 --- a/tests/scenarios/cassettes/v2/agentless_scanning/Update-GCP-scan-options-returns-OK-response.json +++ b/tests/scenarios/cassettes/v2/agentless_scanning/Update-GCP-scan-options-returns-OK-response.json @@ -3,7 +3,7 @@ { "request": { "body": { - "string": "{\"data\":{\"attributes\":{\"vuln_containers_os\":false},\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\"}}", + "string": "{\"data\":{\"attributes\":{\"cloud_function\":true,\"vuln_containers_os\":false},\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\"}}", "encoding": null }, "headers": { @@ -19,7 +19,7 @@ }, "response": { "body": { - "string": "{\"data\":{\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":false,\"vuln_host_os\":true}}}", + "string": "{\"data\":{\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\",\"attributes\":{\"cloud_function\":true,\"compliance_host\":false,\"vuln_containers_os\":false,\"vuln_host_os\":true}}}", "encoding": null }, "headers": { @@ -32,7 +32,7 @@ "message": "OK" } }, - "recorded_at": "Thu, 23 Oct 2025 22:22:02 GMT" + "recorded_at": "Fri, 17 Jul 2026 06:38:47 GMT" } ], "recorded_with": "VCR 6.0.0" diff --git a/tests/scenarios/features/v2/agentless_scanning.feature b/tests/scenarios/features/v2/agentless_scanning.feature index bbbf5b71f9..3b1344cb4a 100644 --- a/tests/scenarios/features/v2/agentless_scanning.feature +++ b/tests/scenarios/features/v2/agentless_scanning.feature @@ -52,16 +52,18 @@ Feature: Agentless Scanning @skip-validation @team:DataDog/k9-agentless Scenario: Create Azure scan options returns "Created" response Given new "CreateAzureScanOptions" request - And body with value {"data": {"attributes": {"vuln_containers_os": true, "vuln_host_os": true}, "id": "12345678-90ab-cdef-1234-567890abcdef", "type": "azure_scan_options"}} + And body with value {"data": {"attributes": {"function": true, "vuln_containers_os": true, "vuln_host_os": true}, "id": "12345678-90ab-cdef-1234-567890abcdef", "type": "azure_scan_options"}} When the request is sent Then the response status is 201 Created + And the response "data.attributes.function" is equal to true @team:DataDog/k9-agentless Scenario: Create GCP scan options returns "Agentless scan options enabled successfully." response Given new "CreateGcpScanOptions" request - And body with value {"data": {"id": "new-project", "type": "gcp_scan_options", "attributes": {"vuln_host_os": true, "vuln_containers_os": true}}} + And body with value {"data": {"id": "new-project", "type": "gcp_scan_options", "attributes": {"cloud_function": true, "vuln_host_os": true, "vuln_containers_os": true}}} When the request is sent Then the response status is 201 Created + And the response "data.attributes.cloud_function" is equal to true @team:DataDog/k9-agentless Scenario: Create GCP scan options returns "Bad Request" response @@ -301,9 +303,10 @@ Feature: Agentless Scanning Scenario: Update GCP scan options returns "OK" response Given new "UpdateGcpScanOptions" request And request contains "project_id" parameter with value "api-spec-test" - And body with value {"data": {"id": "api-spec-test", "type": "gcp_scan_options", "attributes": {"vuln_containers_os": false}}} + And body with value {"data": {"id": "api-spec-test", "type": "gcp_scan_options", "attributes": {"cloud_function": true, "vuln_containers_os": false}}} When the request is sent Then the response status is 200 OK And the response "data.id" is equal to "api-spec-test" And the response "data.attributes.vuln_host_os" is equal to true And the response "data.attributes.vuln_containers_os" is equal to false + And the response "data.attributes.cloud_function" is equal to true