Skip to content

Commit 67f37a1

Browse files
feat(onboarding): Datasource for OCI Trusted app group (#577)
* feat(onboarding): Datasource for OCI Trusted app group Change summary: ---------------- - Adding new datasource secure_trusted_oracle_app to fetch OCI trusted identity per app group. - Added acc tests and docs for the new datasource. * Add user ocid * Uncomment ACC test assertions * Fix tests
1 parent 2249b87 commit 67f37a1

File tree

5 files changed

+151
-0
lines changed

5 files changed

+151
-0
lines changed

sysdig/data_source_sysdig_secure_onboarding.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,62 @@ func dataSourceSysdigSecureCloudIngestionAssetsRead(ctx context.Context, d *sche
400400
return nil
401401
}
402402

403+
func dataSourceSysdigSecureTrustedOracleApp() *schema.Resource {
404+
timeout := 5 * time.Minute
405+
406+
return &schema.Resource{
407+
ReadContext: dataSourceSysdigSecureTrustedOracleAppRead,
408+
409+
Timeouts: &schema.ResourceTimeout{
410+
Read: schema.DefaultTimeout(timeout),
411+
},
412+
413+
Schema: map[string]*schema.Schema{
414+
"name": {
415+
Type: schema.TypeString,
416+
Required: true,
417+
ValidateFunc: validation.StringInSlice([]string{"config_posture", "onboarding"}, false),
418+
},
419+
"tenancy_ocid": {
420+
Type: schema.TypeString,
421+
Computed: true,
422+
},
423+
"group_ocid": {
424+
Type: schema.TypeString,
425+
Computed: true,
426+
},
427+
"user_ocid": {
428+
Type: schema.TypeString,
429+
Computed: true,
430+
},
431+
},
432+
}
433+
}
434+
435+
// Retrieves the information of a resource from the file and loads it in Terraform
436+
func dataSourceSysdigSecureTrustedOracleAppRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
437+
client, err := getSecureOnboardingClient(meta.(SysdigClients))
438+
if err != nil {
439+
return diag.FromErr(err)
440+
}
441+
442+
app := d.Get("name").(string)
443+
trustedIdentityGroup, err := client.GetTrustedOracleAppSecure(ctx, app)
444+
if err != nil {
445+
return diag.FromErr(err)
446+
}
447+
d.SetId(app)
448+
for k, v := range trustedIdentityGroup {
449+
fmt.Printf("%s, %s\n", k, snakeCase(k))
450+
err = d.Set(snakeCase(k), v)
451+
if err != nil {
452+
return diag.FromErr(err)
453+
}
454+
}
455+
456+
return nil
457+
}
458+
403459
var matchFirstCap = regexp.MustCompile("(.)([A-Z][a-z]+)")
404460
var matchAllCap = regexp.MustCompile("([a-z0-9])([A-Z])")
405461

sysdig/data_source_sysdig_secure_onboarding_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,44 @@ func TestAccCloudIngestionAssetsDataSource(t *testing.T) {
191191
},
192192
})
193193
}
194+
195+
func TestAccTrustedOracleAppDataSource(t *testing.T) {
196+
resource.ParallelTest(t, resource.TestCase{
197+
PreCheck: func() {
198+
if v := os.Getenv("SYSDIG_SECURE_API_TOKEN"); v == "" {
199+
t.Fatal("SYSDIG_SECURE_API_TOKEN must be set for acceptance tests")
200+
}
201+
},
202+
ProviderFactories: map[string]func() (*schema.Provider, error){
203+
"sysdig": func() (*schema.Provider, error) {
204+
return sysdig.Provider(), nil
205+
},
206+
},
207+
Steps: []resource.TestStep{
208+
{
209+
Config: `data "sysdig_secure_trusted_oracle_app" "invalid" { name = "invalid" }`,
210+
ExpectError: regexp.MustCompile(`.*expected name to be one of.*`),
211+
},
212+
{
213+
Config: `data "sysdig_secure_trusted_oracle_app" "config_posture" { name = "config_posture" }`,
214+
Check: resource.ComposeTestCheckFunc(
215+
resource.TestCheckResourceAttr("data.sysdig_secure_trusted_oracle_app.config_posture", "name", "config_posture"),
216+
// not asserting the oci exported fields because not every backend environment is oci supported yet and thus will have empty values
217+
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_oracle_app.config_posture", "tenancy_ocid"), // uncomment to assert a non empty value
218+
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_oracle_app.config_posture", "group_ocid"), // uncomment to assert a non empty value
219+
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_oracle_app.config_posture", "user_ocid"), // uncomment to assert a non empty value
220+
),
221+
},
222+
{
223+
Config: `data "sysdig_secure_trusted_oracle_app" "onboarding" { name = "onboarding" }`,
224+
Check: resource.ComposeTestCheckFunc(
225+
resource.TestCheckResourceAttr("data.sysdig_secure_trusted_oracle_app.onboarding", "name", "onboarding"),
226+
// not asserting the oci exported fields because not every backend environment is oci supported yet and thus will have empty values
227+
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_oracle_app.onboarding", "tenancy_ocid"), // uncomment to assert a non empty value
228+
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_oracle_app.onboarding", "group_ocid"), // uncomment to assert a non empty value
229+
// resource.TestCheckResourceAttrSet("data.sysdig_secure_trusted_oracle_app.onboarding", "user_ocid"), // uncomment to assert a non empty value
230+
),
231+
},
232+
},
233+
})
234+
}

sysdig/internal/client/v2/onboarding.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const (
1313
onboardingAgentlessScanningAssetsPath = "%s/api/secure/onboarding/v2/agentlessScanningAssets"
1414
onboardingCloudIngestionAssetsPath = "%s/api/secure/onboarding/v2/cloudIngestionAssets"
1515
onboardingTrustedRegulationAssetsPath = "%s/api/secure/onboarding/v2/trustedRegulationAssets?provider=%s"
16+
onboardingTrustedOracleAppPath = "%s/api/secure/onboarding/v2/trustedOracleApp?app=%s"
1617
)
1718

1819
type OnboardingSecureInterface interface {
@@ -23,6 +24,7 @@ type OnboardingSecureInterface interface {
2324
GetAgentlessScanningAssetsSecure(ctx context.Context) (map[string]any, error)
2425
GetCloudIngestionAssetsSecure(ctx context.Context) (map[string]any, error)
2526
GetTrustedCloudRegulationAssetsSecure(ctx context.Context, provider string) (map[string]string, error)
27+
GetTrustedOracleAppSecure(ctx context.Context, app string) (map[string]string, error)
2628
}
2729

2830
func (client *Client) GetTrustedCloudIdentitySecure(ctx context.Context, provider string) (string, error) {
@@ -108,3 +110,17 @@ func (client *Client) GetTrustedCloudRegulationAssetsSecure(ctx context.Context,
108110

109111
return Unmarshal[map[string]string](response.Body)
110112
}
113+
114+
func (client *Client) GetTrustedOracleAppSecure(ctx context.Context, app string) (map[string]string, error) {
115+
response, err := client.requester.Request(ctx, http.MethodGet, fmt.Sprintf(onboardingTrustedOracleAppPath, client.config.url, app), nil)
116+
if err != nil {
117+
return nil, err
118+
}
119+
defer response.Body.Close()
120+
121+
if response.StatusCode != http.StatusOK {
122+
return nil, client.ErrorFromResponse(response)
123+
}
124+
125+
return Unmarshal[map[string]string](response.Body)
126+
}

sysdig/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ func (p *SysdigProvider) Provider() *schema.Provider {
203203
"sysdig_secure_cloud_ingestion_assets": dataSourceSysdigSecureCloudIngestionAssets(),
204204
"sysdig_secure_trusted_azure_app": dataSourceSysdigSecureTrustedAzureApp(),
205205
"sysdig_secure_trusted_cloud_identity": dataSourceSysdigSecureTrustedCloudIdentity(),
206+
"sysdig_secure_trusted_oracle_app": dataSourceSysdigSecureTrustedOracleApp(),
206207
"sysdig_secure_tenant_external_id": dataSourceSysdigSecureTenantExternalID(),
207208
"sysdig_secure_notification_channel": dataSourceSysdigSecureNotificationChannel(),
208209
"sysdig_secure_notification_channel_pagerduty": dataSourceSysdigSecureNotificationChannelPagerduty(),
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
subcategory: "Sysdig Secure"
3+
layout: "sysdig"
4+
page_title: "Sysdig: sysdig_secure_trusted_oracle_app"
5+
description: |-
6+
Retrieves information about the Sysdig Secure Trusted Oracle App
7+
---
8+
9+
# Data Source: sysdig_secure_trusted_oracle_app
10+
11+
Retrieves information about the Sysdig Secure Trusted Oracle App
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_trusted_oracle_app" "onboarding" {
19+
name = "onboarding"
20+
}
21+
```
22+
23+
## Argument Reference
24+
25+
* `name` - (Required) Sysdig's Oracle App name. Currently supported applications are `config_posture` and `onboarding`.
26+
27+
28+
## Attributes Reference
29+
30+
In addition to all arguments above, the following attributes are exported:
31+
32+
* `tenancy_ocid` - The application's associated tenancy OCI identifer.
33+
34+
* `group_ocid` - The application's associated usergroup OCI identifier.
35+
36+
* `user_ocid` - The application's associated user OCI identifier.
37+

0 commit comments

Comments
 (0)