Skip to content

Commit 8a1eb5d

Browse files
feat(onboarding): cloud ingestion assets (#541)
* feat(onboarding): cloud ingestion assets * Handle schema types for gcp and uncomment test assertions * Update docs --------- Co-authored-by: Ravina Dhruve <[email protected]> Co-authored-by: Ravina Dhruve <[email protected]>
1 parent e3e7c4e commit 8a1eb5d

File tree

5 files changed

+153
-9
lines changed

5 files changed

+153
-9
lines changed

sysdig/data_source_sysdig_secure_onboarding.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,72 @@ func dataSourceSysdigSecureAgentlessScanningAssetsRead(ctx context.Context, d *s
282282
return nil
283283
}
284284

285+
func dataSourceSysdigSecureCloudIngestionAssets() *schema.Resource {
286+
timeout := 5 * time.Minute
287+
288+
return &schema.Resource{
289+
ReadContext: dataSourceSysdigSecureCloudIngestionAssetsRead,
290+
291+
Timeouts: &schema.ResourceTimeout{
292+
Read: schema.DefaultTimeout(timeout),
293+
},
294+
295+
Schema: map[string]*schema.Schema{
296+
"aws": {
297+
Type: schema.TypeMap,
298+
Computed: true,
299+
Elem: &schema.Schema{
300+
Type: schema.TypeString,
301+
},
302+
},
303+
"gcp_routing_key": {
304+
Type: schema.TypeString,
305+
Computed: true,
306+
},
307+
"gcp_metadata": {
308+
Type: schema.TypeMap,
309+
Computed: true,
310+
},
311+
},
312+
}
313+
}
314+
315+
// Retrieves the information of a resource form the file and loads it in Terraform
316+
func dataSourceSysdigSecureCloudIngestionAssetsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
317+
client, err := getSecureOnboardingClient(meta.(SysdigClients))
318+
if err != nil {
319+
return diag.FromErr(err)
320+
}
321+
322+
assets, err := client.GetCloudIngestionAssetsSecure(ctx)
323+
if err != nil {
324+
return diag.FromErr(err)
325+
}
326+
327+
assetsAws, _ := assets["aws"].(map[string]interface{})
328+
assetsGcp, _ := assets["gcp"].(map[string]interface{})
329+
330+
d.SetId("cloudIngestionAssets")
331+
err = d.Set("aws", map[string]interface{}{
332+
"eventBusARN": assetsAws["eventBusARN"],
333+
})
334+
if err != nil {
335+
return diag.FromErr(err)
336+
}
337+
338+
err = d.Set("gcp_routing_key", assetsGcp["routingKey"])
339+
if err != nil {
340+
return diag.FromErr(err)
341+
}
342+
343+
err = d.Set("gcp_metadata", assetsGcp["metadata"])
344+
if err != nil {
345+
return diag.FromErr(err)
346+
}
347+
348+
return nil
349+
}
350+
285351
var matchFirstCap = regexp.MustCompile("(.)([A-Z][a-z]+)")
286352
var matchAllCap = regexp.MustCompile("([a-z0-9])([A-Z])")
287353

sysdig/data_source_sysdig_secure_onboarding_test.go

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,27 +75,27 @@ func TestAccTrustedAzureAppDataSource(t *testing.T) {
7575
Config: `data "sysdig_secure_trusted_azure_app" "config_posture" { name = "config_posture" }`,
7676
Check: resource.ComposeTestCheckFunc(
7777
resource.TestCheckResourceAttr("data.sysdig_secure_trusted_azure_app.config_posture", "name", "config_posture"),
78-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.config_posture", "application_id"), // uncomment to assert a non empty value
79-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.config_posture", "tenant_id"), // uncomment to assert a non empty value
80-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.config_posture", "service_principal_id"), // uncomment to assert a non empty value
78+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.config_posture", "application_id"), // uncomment to assert a non empty value
79+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.config_posture", "tenant_id"), // uncomment to assert a non empty value
80+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.config_posture", "service_principal_id"), // uncomment to assert a non empty value
8181
),
8282
},
8383
{
8484
Config: `data "sysdig_secure_trusted_azure_app" "onboarding" { name = "onboarding" }`,
8585
Check: resource.ComposeTestCheckFunc(
8686
resource.TestCheckResourceAttr("data.sysdig_secure_trusted_azure_app.onboarding", "name", "onboarding"),
87-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.onboarding", "application_id"), // uncomment to assert a non empty value
88-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.onboarding", "tenant_id"), // uncomment to assert a non empty value
89-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.onboarding", "service_principal_id"), // uncomment to assert a non empty value
87+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.onboarding", "application_id"), // uncomment to assert a non empty value
88+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.onboarding", "tenant_id"), // uncomment to assert a non empty value
89+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.onboarding", "service_principal_id"), // uncomment to assert a non empty value
9090
),
9191
},
9292
{
9393
Config: `data "sysdig_secure_trusted_azure_app" "threat_detection" { name = "threat_detection" }`,
9494
Check: resource.ComposeTestCheckFunc(
9595
resource.TestCheckResourceAttr("data.sysdig_secure_trusted_azure_app.threat_detection", "name", "threat_detection"),
96-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.threat_detection", "application_id"), // uncomment to assert a non empty value
97-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.threat_detection", "tenant_id"), // uncomment to assert a non empty value
98-
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.threat_detection", "service_principal_id"), // uncomment to assert a non empty value
96+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.threat_detection", "application_id"), // uncomment to assert a non empty value
97+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.threat_detection", "tenant_id"), // uncomment to assert a non empty value
98+
resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_azure_app.threat_detection", "service_principal_id"), // uncomment to assert a non empty value
9999
),
100100
},
101101
},
@@ -147,3 +147,32 @@ func TestAccAgentlessScanningAssetsDataSource(t *testing.T) {
147147
},
148148
})
149149
}
150+
151+
func TestAccCloudIngestionAssetsDataSource(t *testing.T) {
152+
resource.ParallelTest(t, resource.TestCase{
153+
PreCheck: func() {
154+
if v := os.Getenv("SYSDIG_SECURE_API_TOKEN"); v == "" {
155+
t.Fatal("SYSDIG_SECURE_API_TOKEN must be set for acceptance tests")
156+
}
157+
},
158+
ProviderFactories: map[string]func() (*schema.Provider, error){
159+
"sysdig": func() (*schema.Provider, error) {
160+
return sysdig.Provider(), nil
161+
},
162+
},
163+
Steps: []resource.TestStep{
164+
{
165+
Config: `data "sysdig_secure_cloud_ingestion_assets" "assets" {}`,
166+
Check: resource.ComposeTestCheckFunc(
167+
resource.TestCheckResourceAttr("data.sysdig_secure_cloud_ingestion_assets.assets", "aws.%", "1"),
168+
resource.TestCheckResourceAttrSet("data.sysdig_secure_cloud_ingestion_assets.assets", "gcp_routing_key"),
169+
170+
// metadata fields are opaque to api backend; cloudingestion controls what fields are passed
171+
// asserts ingestionType and ingestionURL in metadata since it is required
172+
resource.TestCheckResourceAttr("data.sysdig_secure_cloud_ingestion_assets.assets", "gcp_metadata.ingestionType", "gcp"),
173+
resource.TestCheckResourceAttrSet("data.sysdig_secure_cloud_ingestion_assets.assets", "gcp_metadata.ingestionURL"),
174+
),
175+
},
176+
},
177+
})
178+
}

sysdig/internal/client/v2/onboarding.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const (
1111
onboardingTrustedAzureAppPath = "%s/api/secure/onboarding/v2/trustedAzureApp?app=%s"
1212
onboardingTenantExternaIDPath = "%s/api/secure/onboarding/v2/externalID"
1313
onboardingAgentlessScanningAssetsPath = "%s/api/secure/onboarding/v2/agentlessScanningAssets"
14+
onboardingCloudIngestionAssetsPath = "%s/api/secure/onboarding/v2/cloudIngestionAssets"
1415
)
1516

1617
type OnboardingSecureInterface interface {
@@ -19,6 +20,7 @@ type OnboardingSecureInterface interface {
1920
GetTrustedAzureAppSecure(ctx context.Context, app string) (map[string]string, error)
2021
GetTenantExternalIDSecure(ctx context.Context) (string, error)
2122
GetAgentlessScanningAssetsSecure(ctx context.Context) (map[string]any, error)
23+
GetCloudIngestionAssetsSecure(ctx context.Context) (map[string]any, error)
2224
}
2325

2426
func (client *Client) GetTrustedCloudIdentitySecure(ctx context.Context, provider string) (string, error) {
@@ -76,3 +78,17 @@ func (client *Client) GetAgentlessScanningAssetsSecure(ctx context.Context) (map
7678

7779
return Unmarshal[map[string]interface{}](response.Body)
7880
}
81+
82+
func (client *Client) GetCloudIngestionAssetsSecure(ctx context.Context) (map[string]interface{}, error) {
83+
response, err := client.requester.Request(ctx, http.MethodGet, fmt.Sprintf(onboardingCloudIngestionAssetsPath, client.config.url), nil)
84+
if err != nil {
85+
return nil, err
86+
}
87+
defer response.Body.Close()
88+
89+
if response.StatusCode != http.StatusOK {
90+
return nil, client.ErrorFromResponse(response)
91+
}
92+
93+
return Unmarshal[map[string]interface{}](response.Body)
94+
}

sysdig/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ func (p *SysdigProvider) Provider() *schema.Provider {
197197
},
198198
DataSourcesMap: map[string]*schema.Resource{
199199
"sysdig_secure_agentless_scanning_assets": dataSourceSysdigSecureAgentlessScanningAssets(),
200+
"sysdig_secure_cloud_ingestion_assets": dataSourceSysdigSecureCloudIngestionAssets(),
200201
"sysdig_secure_trusted_azure_app": dataSourceSysdigSecureTrustedAzureApp(),
201202
"sysdig_secure_trusted_cloud_identity": dataSourceSysdigSecureTrustedCloudIdentity(),
202203
"sysdig_secure_tenant_external_id": dataSourceSysdigSecureTenantExternalID(),
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
subcategory: "Sysdig Secure"
3+
layout: "sysdig"
4+
page_title: "Sysdig: sysdig_secure_cloud_ingestion_assets"
5+
description: |-
6+
Retrieves information about the Sysdig Secure Cloud Ingestion Assets
7+
---
8+
9+
# Data Source: sysdig_secure_cloud_ingestion_assets
10+
11+
Retrieves information about the Sysdig Secure Cloud Ingestion Assets
12+
13+
-> **Note:** Sysdig Terraform Provider is under rapid development at this point. If you experience any issue or discrepancy while using it, please make sure you have the latest version. If the issue persists, or you have a Feature Request to support an additional set of resources, please open a [new issue](https://github.com/sysdiglabs/terraform-provider-sysdig/issues/new) in the GitHub repository.
14+
15+
## Example Usage
16+
17+
```terraform
18+
data "sysdig_secure_cloud_ingestion_assets" "assets" {}
19+
```
20+
21+
## Argument Reference
22+
23+
## Attributes Reference
24+
25+
In addition to all arguments above, the following attributes are exported:
26+
27+
* `aws.eventBusARN` - AWS event bus from which Sysdig Cloud Ingestion operates
28+
29+
* `gcp_routing_key` - GCP ingestion routing key
30+
31+
* `gcp_metadata` - GCP ingestion metadata
32+

0 commit comments

Comments
 (0)