Skip to content

Commit e6603c0

Browse files
committed
feat(onboarding): data source tenant external id
* adds external id as data source for use by sysdig tenants
1 parent 922da70 commit e6603c0

4 files changed

+101
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package sysdig
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
)
10+
11+
func dataSourceSysdigSecureTenantExternalID() *schema.Resource {
12+
timeout := 5 * time.Minute
13+
14+
return &schema.Resource{
15+
ReadContext: dataSourceSysdigSecureTenantExternalIDRead,
16+
17+
Timeouts: &schema.ResourceTimeout{
18+
Read: schema.DefaultTimeout(timeout),
19+
},
20+
21+
Schema: map[string]*schema.Schema{
22+
"external_id": {
23+
Type: schema.TypeString,
24+
Computed: true,
25+
},
26+
},
27+
}
28+
}
29+
30+
// Retrieves the information of a resource form the file and loads it in Terraform
31+
func dataSourceSysdigSecureTenantExternalIDRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
32+
client, err := getSecureCloudAccountClient(meta.(SysdigClients))
33+
if err != nil {
34+
return diag.FromErr(err)
35+
}
36+
37+
externalId, err := client.GetTenantExternalIDSecure(ctx)
38+
if err != nil {
39+
return diag.FromErr(err)
40+
}
41+
42+
d.SetId(externalId)
43+
err = d.Set("external_id", externalId)
44+
if err != nil {
45+
return diag.FromErr(err)
46+
}
47+
48+
return nil
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//go:build tf_acc_sysdig_secure
2+
3+
package sysdig_test
4+
5+
import (
6+
"os"
7+
"testing"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
12+
"github.com/draios/terraform-provider-sysdig/sysdig"
13+
)
14+
15+
func TestAccTenantExternalIDDataSource(t *testing.T) {
16+
resource.ParallelTest(t, resource.TestCase{
17+
PreCheck: func() {
18+
if v := os.Getenv("SYSDIG_SECURE_API_TOKEN"); v == "" {
19+
t.Fatal("SYSDIG_SECURE_API_TOKEN must be set for acceptance tests")
20+
}
21+
},
22+
ProviderFactories: map[string]func() (*schema.Provider, error){
23+
"sysdig": func() (*schema.Provider, error) {
24+
return sysdig.Provider(), nil
25+
},
26+
},
27+
Steps: []resource.TestStep{
28+
{
29+
Config: `data "sysdig_secure_tenant_external_id" "external_id" {}`,
30+
},
31+
},
32+
})
33+
}

sysdig/internal/client/v2/cloud_account.go

+18-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ const (
1111
cloudAccountsWithExternalIDPath = "%s/api/cloud/v2/accounts?includeExternalID=true&upsert=true"
1212
cloudAccountPath = "%s/api/cloud/v2/accounts/%s"
1313
cloudAccountWithExternalIDPath = "%s/api/cloud/v2/accounts/%s?includeExternalID=true"
14-
trustedCloudIdentityPath = "%s/api/cloud/v2/%s/trustedIdentity"
14+
onboardingTrustedIdentityPath = "%s/api/secure/onboarding/v2/trustedIdentity?provider=%s"
15+
onboardingTenantExternaIDPath = "%s/api/secure/onboarding/v2/externalID"
1516
providersPath = "%v/api/v2/providers"
1617
)
1718

@@ -22,6 +23,7 @@ type CloudAccountSecureInterface interface {
2223
DeleteCloudAccountSecure(ctx context.Context, accountID string) error
2324
UpdateCloudAccountSecure(ctx context.Context, accountID string, cloudAccount *CloudAccountSecure) (*CloudAccountSecure, error)
2425
GetTrustedCloudIdentitySecure(ctx context.Context, provider string) (string, error)
26+
GetTenantExternalIDSecure(ctx context.Context) (string, error)
2527
}
2628

2729
type CloudAccountMonitorInterface interface {
@@ -100,7 +102,21 @@ func (client *Client) UpdateCloudAccountSecure(ctx context.Context, accountID st
100102
}
101103

102104
func (client *Client) GetTrustedCloudIdentitySecure(ctx context.Context, provider string) (string, error) {
103-
response, err := client.requester.Request(ctx, http.MethodGet, client.trustedCloudIdentityURL(provider), nil)
105+
response, err := client.requester.Request(ctx, http.MethodGet, fmt.Sprintf(onboardingTrustedIdentityPath, client.config.url, provider), nil)
106+
if err != nil {
107+
return "", err
108+
}
109+
defer response.Body.Close()
110+
111+
if response.StatusCode != http.StatusOK {
112+
return "", client.ErrorFromResponse(response)
113+
}
114+
115+
return Unmarshal[string](response.Body)
116+
}
117+
118+
func (client *Client) GetTenantExternalIDSecure(ctx context.Context) (string, error) {
119+
response, err := client.requester.Request(ctx, http.MethodGet, fmt.Sprintf(onboardingTenantExternaIDPath, client.config.url), nil)
104120
if err != nil {
105121
return "", err
106122
}
@@ -127,10 +143,6 @@ func (client *Client) cloudAccountURL(accountID string, includeExternalID bool)
127143
return fmt.Sprintf(cloudAccountPath, client.config.url, accountID)
128144
}
129145

130-
func (client *Client) trustedCloudIdentityURL(provider string) string {
131-
return fmt.Sprintf(trustedCloudIdentityPath, client.config.url, provider)
132-
}
133-
134146
func (client *Client) CreateCloudAccountMonitor(ctx context.Context, provider *CloudAccountMonitor) (*CloudAccountMonitor, error) {
135147
payload, err := Marshal(provider)
136148
if err != nil {

sysdig/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ func (p *SysdigProvider) Provider() *schema.Provider {
195195
},
196196
DataSourcesMap: map[string]*schema.Resource{
197197
"sysdig_secure_trusted_cloud_identity": dataSourceSysdigSecureTrustedCloudIdentity(),
198+
"sysdig_secure_tenant_external_id": dataSourceSysdigSecureTenantExternalID(),
198199
"sysdig_secure_notification_channel": dataSourceSysdigSecureNotificationChannel(),
199200
"sysdig_secure_notification_channel_pagerduty": dataSourceSysdigSecureNotificationChannelPagerduty(),
200201
"sysdig_secure_notification_channel_email": dataSourceSysdigSecureNotificationChannelEmail(),

0 commit comments

Comments
 (0)