Skip to content

Commit 8bf8a67

Browse files
committed
add data_source_sysdig_monitor_teams and data_source_sysdig_secure_teams
1 parent a62c796 commit 8bf8a67

File tree

6 files changed

+355
-0
lines changed

6 files changed

+355
-0
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
package sysdig
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
)
9+
10+
func dataSourceSysdigMonitorTeams() *schema.Resource {
11+
return &schema.Resource{
12+
ReadContext: dataSourceSysdigMonitorTeamsRead,
13+
Schema: map[string]*schema.Schema{
14+
"teams": {
15+
Type: schema.TypeList,
16+
Computed: true,
17+
Elem: &schema.Resource{
18+
Schema: map[string]*schema.Schema{
19+
"id": {
20+
Type: schema.TypeInt,
21+
Computed: true,
22+
},
23+
"name": {
24+
Type: schema.TypeString,
25+
Computed: true,
26+
},
27+
"theme": {
28+
Type: schema.TypeString,
29+
Computed: true,
30+
},
31+
"description": {
32+
Type: schema.TypeString,
33+
Computed: true,
34+
},
35+
"scope_by": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
},
39+
"filter": {
40+
Type: schema.TypeString,
41+
Computed: true,
42+
},
43+
"can_use_sysdig_capture": {
44+
Type: schema.TypeBool,
45+
Computed: true,
46+
},
47+
"can_see_infrastructure_events": {
48+
Type: schema.TypeBool,
49+
Computed: true,
50+
},
51+
"can_use_aws_data": {
52+
Type: schema.TypeBool,
53+
Computed: true,
54+
},
55+
"default_team": {
56+
Type: schema.TypeBool,
57+
Computed: true,
58+
},
59+
"user_roles": {
60+
Type: schema.TypeSet,
61+
Computed: true,
62+
Elem: &schema.Resource{
63+
Schema: map[string]*schema.Schema{
64+
"email": {
65+
Type: schema.TypeString,
66+
Computed: true,
67+
},
68+
"role": {
69+
Type: schema.TypeString,
70+
Computed: true,
71+
},
72+
},
73+
},
74+
},
75+
"entrypoint": {
76+
Type: schema.TypeList,
77+
Computed: true,
78+
Elem: &schema.Resource{
79+
Schema: map[string]*schema.Schema{
80+
"type": {
81+
Type: schema.TypeString,
82+
Computed: true,
83+
},
84+
"selection": {
85+
Type: schema.TypeString,
86+
Computed: true,
87+
},
88+
},
89+
},
90+
},
91+
"version": {
92+
Type: schema.TypeInt,
93+
Computed: true,
94+
},
95+
},
96+
},
97+
},
98+
},
99+
}
100+
}
101+
102+
func dataSourceSysdigMonitorTeamsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
103+
clients := meta.(SysdigClients)
104+
client, err := getMonitorTeamClient(clients)
105+
if err != nil {
106+
return diag.FromErr(err)
107+
}
108+
109+
teams, err := client.ListTeams(ctx)
110+
if err != nil {
111+
return diag.FromErr(err)
112+
}
113+
114+
var result []map[string]interface{}
115+
for _, team := range teams {
116+
result = append(result, map[string]interface{}{
117+
"id": team.ID,
118+
"name": team.Name,
119+
})
120+
}
121+
d.SetId("sysdig_monitor_teams")
122+
if err := d.Set("teams", result); err != nil {
123+
return diag.FromErr(err)
124+
}
125+
126+
return nil
127+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package sysdig_test
2+
3+
import (
4+
"fmt"
5+
"github.com/draios/terraform-provider-sysdig/sysdig"
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
7+
"testing"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
)
11+
12+
func TestAccDataSourceSysdigMonitorTeams(t *testing.T) {
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: preCheckAnyEnv(t, SysdigSecureApiTokenEnv),
15+
ProviderFactories: map[string]func() (*schema.Provider, error){
16+
"sysdig": func() (*schema.Provider, error) {
17+
return sysdig.Provider(), nil
18+
},
19+
},
20+
Steps: []resource.TestStep{
21+
{
22+
Config: testAccDataSourceSysdigMonitorTeamsConfig(randomText(10)),
23+
Check: resource.ComposeTestCheckFunc(
24+
resource.TestCheckResourceAttrSet("data.sysdig_secure_teams.test", "teams.0.id"),
25+
),
26+
},
27+
},
28+
})
29+
}
30+
31+
func testAccDataSourceSysdigMonitorTeamsConfig(name string) string {
32+
return fmt.Sprintf(`
33+
resource "sysdig_monitor_team" "sample" {
34+
name = "%s"
35+
description = "A monitor secure team"
36+
scope_by = "host"
37+
filter = "container.image.repo = \"sysdig/agent\""
38+
can_use_sysdig_capture = true
39+
can_see_infrastructure_events = true
40+
41+
entrypoint {
42+
type = "Dashboards"
43+
}
44+
}
45+
46+
data "sysdig_monitor_teams" "test" {}
47+
`, name)
48+
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package sysdig
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
)
9+
10+
func dataSourceSysdigSecureTeams() *schema.Resource {
11+
return &schema.Resource{
12+
ReadContext: dataSourceSysdigSecureTeamsRead,
13+
Schema: map[string]*schema.Schema{
14+
"teams": {
15+
Type: schema.TypeList,
16+
Computed: true,
17+
Elem: &schema.Resource{
18+
Schema: map[string]*schema.Schema{
19+
"id": {
20+
Type: schema.TypeInt,
21+
Computed: true,
22+
},
23+
"name": {
24+
Type: schema.TypeString,
25+
Computed: true,
26+
},
27+
"theme": {
28+
Type: schema.TypeString,
29+
Computed: true,
30+
},
31+
"description": {
32+
Type: schema.TypeString,
33+
Computed: true,
34+
},
35+
"scope_by": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
},
39+
"filter": {
40+
Type: schema.TypeString,
41+
Computed: true,
42+
},
43+
"use_sysdig_capture": {
44+
Type: schema.TypeBool,
45+
Computed: true,
46+
},
47+
"default_team": {
48+
Type: schema.TypeBool,
49+
Computed: true,
50+
},
51+
"user_roles": {
52+
Type: schema.TypeSet,
53+
Computed: true,
54+
Elem: &schema.Resource{
55+
Schema: map[string]*schema.Schema{
56+
"email": {
57+
Type: schema.TypeString,
58+
Computed: true,
59+
},
60+
"role": {
61+
Type: schema.TypeString,
62+
Computed: true,
63+
},
64+
},
65+
},
66+
},
67+
"zone_ids": {
68+
Type: schema.TypeList,
69+
Computed: true,
70+
Elem: &schema.Schema{
71+
Type: schema.TypeInt,
72+
},
73+
},
74+
"all_zones": {
75+
Type: schema.TypeBool,
76+
Computed: true,
77+
},
78+
"version": {
79+
Type: schema.TypeInt,
80+
Computed: true,
81+
},
82+
},
83+
},
84+
},
85+
},
86+
}
87+
}
88+
89+
func dataSourceSysdigSecureTeamsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
90+
clients := meta.(SysdigClients)
91+
client, err := getSecureTeamClient(clients)
92+
if err != nil {
93+
return diag.FromErr(err)
94+
}
95+
96+
teams, err := client.ListTeams(ctx)
97+
if err != nil {
98+
return diag.FromErr(err)
99+
}
100+
101+
var result []map[string]interface{}
102+
for _, team := range teams {
103+
result = append(result, map[string]interface{}{
104+
"id": team.ID,
105+
"name": team.Name,
106+
})
107+
}
108+
d.SetId("sysdig_secure_teams")
109+
if err := d.Set("teams", result); err != nil {
110+
return diag.FromErr(err)
111+
}
112+
113+
return nil
114+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package sysdig_test
2+
3+
import (
4+
"fmt"
5+
"github.com/draios/terraform-provider-sysdig/sysdig"
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
7+
"testing"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
)
11+
12+
func TestAccDataSourceSysdigSecureTeams(t *testing.T) {
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: preCheckAnyEnv(t, SysdigSecureApiTokenEnv),
15+
ProviderFactories: map[string]func() (*schema.Provider, error){
16+
"sysdig": func() (*schema.Provider, error) {
17+
return sysdig.Provider(), nil
18+
},
19+
},
20+
Steps: []resource.TestStep{
21+
{
22+
Config: testAccDataSourceSysdigSecureTeamsConfig(randomText(5)),
23+
Check: resource.ComposeTestCheckFunc(
24+
resource.TestCheckResourceAttrSet("data.sysdig_secure_teams.test", "teams.0.id"),
25+
),
26+
},
27+
},
28+
})
29+
}
30+
31+
func testAccDataSourceSysdigSecureTeamsConfig(name string) string {
32+
return fmt.Sprintf(`
33+
resource "sysdig_secure_team" "test" {
34+
name = "test-secure-team-%s"
35+
description = "A test secure team"
36+
}
37+
38+
data "sysdig_secure_teams" "test" {}
39+
`, name)
40+
}

sysdig/internal/client/v2/teams.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ type TeamInterface interface {
1919
CreateTeam(ctx context.Context, tRequest Team) (t Team, err error)
2020
UpdateTeam(ctx context.Context, tRequest Team) (t Team, err error)
2121
DeleteTeam(ctx context.Context, id int) error
22+
ListTeams(ctx context.Context) ([]Team, error)
23+
}
24+
25+
type teamsWrapper struct {
26+
Teams []Team `json:"teams"`
2227
}
2328

2429
func (client *Client) GetUserIDByEmail(ctx context.Context, userRoles []UserRoles) ([]UserRoles, error) {
@@ -154,6 +159,25 @@ func (client *Client) DeleteTeam(ctx context.Context, id int) error {
154159
return nil
155160
}
156161

162+
func (client *Client) ListTeams(ctx context.Context) ([]Team, error) {
163+
response, err := client.requester.Request(ctx, http.MethodGet, client.GetTeamsURL(), nil)
164+
if err != nil {
165+
return nil, err
166+
}
167+
defer response.Body.Close()
168+
169+
if response.StatusCode != http.StatusOK {
170+
return nil, client.ErrorFromResponse(response)
171+
}
172+
173+
wrapper, err := Unmarshal[teamsWrapper](response.Body)
174+
if err != nil {
175+
return nil, err
176+
}
177+
178+
return wrapper.Teams, nil
179+
}
180+
157181
func (client *Client) GetUsersLightURL() string {
158182
return fmt.Sprintf(GetUsersLightPath, client.config.url)
159183
}

sysdig/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ func (p *SysdigProvider) Provider() *schema.Provider {
239239
"sysdig_secure_rule_stateful_count": dataSourceSysdigSecureRuleStatefulCount(),
240240
"sysdig_secure_zone": dataSourceSysdigSecureZone(),
241241
"sysdig_secure_team": dataSourceSysdigSecureTeam(),
242+
"sysdig_secure_teams": dataSourceSysdigSecureTeams(),
242243

243244
"sysdig_current_user": dataSourceSysdigCurrentUser(),
244245
"sysdig_user": dataSourceSysdigUser(),
@@ -262,6 +263,7 @@ func (p *SysdigProvider) Provider() *schema.Provider {
262263
"sysdig_monitor_notification_channel_ibm_function": dataSourceSysdigMonitorNotificationChannelIBMFunction(),
263264
"sysdig_monitor_custom_role_permissions": dataSourceSysdigMonitorCustomRolePermissions(),
264265
"sysdig_monitor_team": dataSourceSysdigMonitorTeam(),
266+
"sysdig_monitor_teams": dataSourceSysdigMonitorTeams(),
265267
"sysdig_secure_posture_policy": dataSourceSysdigSecurePosturePolicy(),
266268
},
267269
ConfigureContextFunc: p.providerConfigure,

0 commit comments

Comments
 (0)