Skip to content

Commit fad3656

Browse files
authored
feat(event-bridge): add cloudingestion event-bridge webhook (SSPROD-53947) (#607)
* add api dest * update naming * change test * fix setid * add optional component type * add validation * update proto * remove ifs
1 parent c851c2f commit fad3656

File tree

4 files changed

+549
-270
lines changed

4 files changed

+549
-270
lines changed

sysdig/data_source_sysdig_secure_onboarding.go

Lines changed: 66 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,11 @@ func dataSourceSysdigSecureCloudIngestionAssets() *schema.Resource {
354354
Type: schema.TypeString,
355355
Optional: true,
356356
},
357+
"component_type": {
358+
Type: schema.TypeString,
359+
Optional: true,
360+
ValidateFunc: validation.StringInSlice([]string{"COMPONENT_WEBHOOK_DATASOURCE"}, false),
361+
},
357362
"aws": {
358363
Type: schema.TypeMap,
359364
Computed: true,
@@ -380,38 +385,78 @@ func dataSourceSysdigSecureCloudIngestionAssetsRead(ctx context.Context, d *sche
380385
return diag.FromErr(err)
381386
}
382387

383-
assets, err := client.GetCloudIngestionAssetsSecure(ctx, d.Get("cloud_provider").(string), d.Get("cloud_provider_id").(string))
384-
if err != nil {
385-
return diag.FromErr(err)
388+
cloudProvider := ""
389+
if v, ok := d.GetOk("cloud_provider"); ok {
390+
cloudProvider = v.(string)
386391
}
387392

388-
assetsAws, _ := assets["aws"].(map[string]interface{})
389-
assetsGcp, _ := assets["gcp"].(map[string]interface{})
393+
cloudProviderID := ""
394+
if v, ok := d.GetOk("cloud_provider_id"); ok {
395+
cloudProviderID = v.(string)
396+
}
390397

391-
var ingestionURL string
392-
if assetsAws["snsMetadata"] != nil {
393-
ingestionURL = assetsAws["snsMetadata"].(map[string]interface{})["ingestionURL"].(string)
398+
componentType := ""
399+
if v, ok := d.GetOk("component_type"); ok {
400+
componentType = v.(string)
394401
}
395402

396-
d.SetId("cloudIngestionAssets")
397-
err = d.Set("aws", map[string]interface{}{
398-
"eventBusARN": assetsAws["eventBusARN"],
399-
"eventBusARNGov": assetsAws["eventBusARNGov"],
400-
"sns_routing_key": assetsAws["snsRoutingKey"],
401-
"sns_routing_url": ingestionURL,
402-
})
403+
assets, err := client.GetCloudIngestionAssetsSecure(ctx, cloudProvider, cloudProviderID, componentType)
403404
if err != nil {
404405
return diag.FromErr(err)
405406
}
406407

407-
err = d.Set("gcp_routing_key", assetsGcp["routingKey"])
408-
if err != nil {
409-
return diag.FromErr(err)
408+
d.SetId("cloudIngestionAssets")
409+
410+
// Set GCP data if available
411+
if gcpAssets, ok := assets["gcp"].(map[string]interface{}); ok {
412+
if routingKey, exists := gcpAssets["routingKey"]; exists {
413+
if err := d.Set("gcp_routing_key", routingKey); err != nil {
414+
return diag.FromErr(err)
415+
}
416+
}
417+
418+
if metadata, exists := gcpAssets["metadata"]; exists {
419+
if err := d.Set("gcp_metadata", metadata); err != nil {
420+
return diag.FromErr(err)
421+
}
422+
}
410423
}
411424

412-
err = d.Set("gcp_metadata", assetsGcp["metadata"])
413-
if err != nil {
414-
return diag.FromErr(err)
425+
// Set AWS data if available
426+
if awsAssets, ok := assets["aws"].(map[string]interface{}); ok {
427+
awsData := map[string]interface{}{
428+
"eventBusARN": awsAssets["eventBusARN"],
429+
"eventBusARNGov": awsAssets["eventBusARNGov"],
430+
}
431+
432+
// Add SNS specific fields if available
433+
if awsAssets["snsRoutingKey"] != nil {
434+
awsData["sns_routing_key"] = awsAssets["snsRoutingKey"]
435+
}
436+
437+
if snsMetadata, ok := awsAssets["snsMetadata"].(map[string]interface{}); ok && snsMetadata != nil {
438+
if ingestionURL, exists := snsMetadata["ingestionURL"]; exists {
439+
awsData["sns_routing_url"] = ingestionURL
440+
}
441+
}
442+
443+
// Add EventBridge specific fields if available
444+
if awsAssets["ebRoutingKey"] != nil {
445+
awsData["eb_routing_key"] = awsAssets["ebRoutingKey"]
446+
}
447+
448+
if ebMetadata, ok := awsAssets["ebMetadata"].(map[string]interface{}); ok && ebMetadata != nil {
449+
if ingestionURL, exists := ebMetadata["ingestionURL"]; exists {
450+
awsData["eb_routing_url"] = ingestionURL
451+
}
452+
if apiKey, exists := ebMetadata["apiKey"]; exists {
453+
awsData["eb_api_key"] = apiKey
454+
}
455+
}
456+
457+
if err := d.Set("aws", awsData); err != nil {
458+
return diag.FromErr(err)
459+
}
415460
}
416461

417462
return nil

sysdig/data_source_sysdig_secure_onboarding_test.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,8 @@ func TestAccCloudIngestionAssetsDataSource(t *testing.T) {
185185
{
186186
Config: `data "sysdig_secure_cloud_ingestion_assets" "assets" {}`,
187187
Check: resource.ComposeTestCheckFunc(
188-
resource.TestCheckResourceAttr("data.sysdig_secure_cloud_ingestion_assets.assets", "aws.%", "4"),
189-
// not asserting the gov exported fields because not every backend environment is gov supported and thus will have empty values
190-
191188
resource.TestCheckResourceAttrSet("data.sysdig_secure_cloud_ingestion_assets.assets", "gcp_routing_key"),
189+
resource.TestCheckResourceAttrSet("data.sysdig_secure_cloud_ingestion_assets.assets", "aws.eventBusARN"),
192190
// metadata fields are opaque to api backend; cloudingestion controls what fields are passed
193191
// asserts ingestionType and ingestionURL in metadata since it is required
194192
resource.TestCheckResourceAttr("data.sysdig_secure_cloud_ingestion_assets.assets", "gcp_metadata.ingestionType", "gcp"),
@@ -205,6 +203,18 @@ func TestAccCloudIngestionAssetsDataSource(t *testing.T) {
205203
resource.TestCheckResourceAttrSet("data.sysdig_secure_cloud_ingestion_assets.assets", "aws.sns_routing_url"),
206204
),
207205
},
206+
{
207+
Config: `data "sysdig_secure_cloud_ingestion_assets" "assets" {
208+
cloud_provider = "aws"
209+
cloud_provider_id = "012345678901"
210+
component_type = "COMPONENT_WEBHOOK_DATASOURCE"
211+
}`,
212+
Check: resource.ComposeTestCheckFunc(
213+
resource.TestCheckResourceAttrSet("data.sysdig_secure_cloud_ingestion_assets.assets", "aws.eb_routing_key"),
214+
resource.TestCheckResourceAttrSet("data.sysdig_secure_cloud_ingestion_assets.assets", "aws.eb_routing_url"),
215+
resource.TestCheckResourceAttrSet("data.sysdig_secure_cloud_ingestion_assets.assets", "aws.eb_api_key"),
216+
),
217+
},
208218
},
209219
})
210220
}

0 commit comments

Comments
 (0)