Skip to content

Commit 4e36518

Browse files
authored
feat(datasource): agentless scanning assets (#516)
1 parent eff1320 commit 4e36518

File tree

5 files changed

+173
-2
lines changed

5 files changed

+173
-2
lines changed

sysdig/data_source_sysdig_secure_onboarding.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,93 @@ func dataSourceSysdigSecureTenantExternalIDRead(ctx context.Context, d *schema.R
133133

134134
return nil
135135
}
136+
137+
func dataSourceSysdigSecureAgentlessScanningAssets() *schema.Resource {
138+
timeout := 5 * time.Minute
139+
140+
return &schema.Resource{
141+
ReadContext: dataSourceSysdigSecureAgentlessScanningAssetsRead,
142+
143+
Timeouts: &schema.ResourceTimeout{
144+
Read: schema.DefaultTimeout(timeout),
145+
},
146+
147+
Schema: map[string]*schema.Schema{
148+
"aws": {
149+
Type: schema.TypeMap,
150+
Computed: true,
151+
Elem: &schema.Schema{
152+
Type: schema.TypeString,
153+
},
154+
},
155+
"azure": {
156+
Type: schema.TypeMap,
157+
Computed: true,
158+
Elem: &schema.Schema{
159+
Type: schema.TypeString,
160+
},
161+
},
162+
"backend": {
163+
Type: schema.TypeMap,
164+
Computed: true,
165+
Elem: &schema.Schema{
166+
Type: schema.TypeString,
167+
},
168+
},
169+
"gcp": {
170+
Type: schema.TypeMap,
171+
Computed: true,
172+
Elem: &schema.Schema{
173+
Type: schema.TypeString,
174+
},
175+
},
176+
},
177+
}
178+
}
179+
180+
// Retrieves the information of a resource form the file and loads it in Terraform
181+
func dataSourceSysdigSecureAgentlessScanningAssetsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
182+
client, err := getSecureOnboardingClient(meta.(SysdigClients))
183+
if err != nil {
184+
return diag.FromErr(err)
185+
}
186+
187+
assets, err := client.GetAgentlessScanningAssetsSecure(ctx)
188+
if err != nil {
189+
return diag.FromErr(err)
190+
}
191+
192+
assetsAws, _ := assets["aws"].(map[string]interface{})
193+
assetsAzure, _ := assets["azure"].(map[string]interface{})
194+
assetsBackend, _ := assets["backend"].(map[string]interface{})
195+
assetsGcp, _ := assets["gcp"].(map[string]interface{})
196+
197+
d.SetId("agentlessScanningAssets")
198+
err = d.Set("aws", map[string]interface{}{
199+
"account_id": assetsAws["accountId"],
200+
})
201+
if err != nil {
202+
return diag.FromErr(err)
203+
}
204+
err = d.Set("azure", map[string]interface{}{
205+
"service_principal_id": assetsAzure["servicePrincipalId"],
206+
"tenant_id": assetsAzure["tenantId"],
207+
})
208+
if err != nil {
209+
return diag.FromErr(err)
210+
}
211+
err = d.Set("backend", map[string]interface{}{
212+
"cloud_id": assetsBackend["cloudId"],
213+
"type": assetsBackend["type"],
214+
})
215+
if err != nil {
216+
return diag.FromErr(err)
217+
}
218+
err = d.Set("gcp", map[string]interface{}{
219+
"worker_identity": assetsGcp["workerIdentity"],
220+
})
221+
if err != nil {
222+
return diag.FromErr(err)
223+
}
224+
return nil
225+
}

sysdig/data_source_sysdig_secure_onboarding_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,29 @@ func TestAccTenantExternalIDDataSource(t *testing.T) {
8181
},
8282
})
8383
}
84+
85+
func TestAccAgentlessScanningAssetsDataSource(t *testing.T) {
86+
resource.ParallelTest(t, resource.TestCase{
87+
PreCheck: func() {
88+
if v := os.Getenv("SYSDIG_SECURE_API_TOKEN"); v == "" {
89+
t.Fatal("SYSDIG_SECURE_API_TOKEN must be set for acceptance tests")
90+
}
91+
},
92+
ProviderFactories: map[string]func() (*schema.Provider, error){
93+
"sysdig": func() (*schema.Provider, error) {
94+
return sysdig.Provider(), nil
95+
},
96+
},
97+
Steps: []resource.TestStep{
98+
{
99+
Config: `data "sysdig_secure_agentless_scanning_assets" "assets" {}`,
100+
Check: resource.ComposeTestCheckFunc(
101+
resource.TestCheckResourceAttr("data.sysdig_secure_agentless_scanning_assets.assets", "aws.%", "1"),
102+
resource.TestCheckResourceAttr("data.sysdig_secure_agentless_scanning_assets.assets", "azure.%", "2"),
103+
resource.TestCheckResourceAttr("data.sysdig_secure_agentless_scanning_assets.assets", "backend.%", "2"),
104+
resource.TestCheckResourceAttr("data.sysdig_secure_agentless_scanning_assets.assets", "gcp.%", "1"),
105+
),
106+
},
107+
},
108+
})
109+
}

sysdig/internal/client/v2/onboarding.go

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@ import (
77
)
88

99
const (
10-
onboardingTrustedIdentityPath = "%s/api/secure/onboarding/v2/trustedIdentity?provider=%s"
11-
onboardingTenantExternaIDPath = "%s/api/secure/onboarding/v2/externalID"
10+
onboardingTrustedIdentityPath = "%s/api/secure/onboarding/v2/trustedIdentity?provider=%s"
11+
onboardingTenantExternaIDPath = "%s/api/secure/onboarding/v2/externalID"
12+
onboardingAgentlessScanningAssetsPath = "%s/api/secure/onboarding/v2/agentlessScanningAssets"
1213
)
1314

1415
type OnboardingSecureInterface interface {
1516
Base
1617
GetTrustedCloudIdentitySecure(ctx context.Context, provider string) (string, error)
1718
GetTenantExternalIDSecure(ctx context.Context) (string, error)
19+
GetAgentlessScanningAssetsSecure(ctx context.Context) (map[string]interface{}, error)
1820
}
1921

2022
func (client *Client) GetTrustedCloudIdentitySecure(ctx context.Context, provider string) (string, error) {
@@ -44,3 +46,17 @@ func (client *Client) GetTenantExternalIDSecure(ctx context.Context) (string, er
4446

4547
return Unmarshal[string](response.Body)
4648
}
49+
50+
func (client *Client) GetAgentlessScanningAssetsSecure(ctx context.Context) (map[string]interface{}, error) {
51+
response, err := client.requester.Request(ctx, http.MethodGet, fmt.Sprintf(onboardingAgentlessScanningAssetsPath, client.config.url), nil)
52+
if err != nil {
53+
return nil, err
54+
}
55+
defer response.Body.Close()
56+
57+
if response.StatusCode != http.StatusOK {
58+
return nil, client.ErrorFromResponse(response)
59+
}
60+
61+
return Unmarshal[map[string]interface{}](response.Body)
62+
}

sysdig/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ func (p *SysdigProvider) Provider() *schema.Provider {
194194
"sysdig_secure_posture_policy": resourceSysdigSecurePosturePolicy(),
195195
},
196196
DataSourcesMap: map[string]*schema.Resource{
197+
"sysdig_secure_agentless_scanning_assets": dataSourceSysdigSecureAgentlessScanningAssets(),
197198
"sysdig_secure_trusted_cloud_identity": dataSourceSysdigSecureTrustedCloudIdentity(),
198199
"sysdig_secure_tenant_external_id": dataSourceSysdigSecureTenantExternalID(),
199200
"sysdig_secure_notification_channel": dataSourceSysdigSecureNotificationChannel(),
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
subcategory: "Sysdig Secure"
3+
layout: "sysdig"
4+
page_title: "Sysdig: sysdig_secure_agentless_scanning_assets"
5+
description: |-
6+
Retrieves information about the Sysdig Secure Agentless Scanning Assets
7+
---
8+
9+
# Data Source: sysdig_secure_agentless_scanning_assets
10+
11+
Retrieves information about the Sysdig Secure Agentless Scanning 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_agentless_scanning_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.account_id` - AWS account sandbox in which Sysdig Agentless Scanning operates
28+
29+
* `azure.service_principal_id` - Azure service principal id for use with Sysdig Agentless Scanning
30+
31+
* `azure.tenant_id` - Azure tenant id in which Sysdig Agentless Scanning operates
32+
33+
* `backend.cloud_id` - Sysdig backend cloud identifier
34+
35+
* `backend.type` - Sysdig backend cloud type
36+
37+
* `gcp.worker_identity` - GCP worker indentity id
38+

0 commit comments

Comments
 (0)