Skip to content

Commit d947ce3

Browse files
committed
add data_source_sysdig_monitor_teams and data_source_sysdig_secure_teams
1 parent a62c796 commit d947ce3

File tree

7 files changed

+361
-2
lines changed

7 files changed

+361
-2
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: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//go:build tf_acc_sysdig_monitor || tf_acc_onprem_monitor || tf_acc_ibm_monitor
2+
3+
package sysdig_test
4+
5+
import (
6+
"fmt"
7+
"github.com/draios/terraform-provider-sysdig/sysdig"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"testing"
10+
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
12+
)
13+
14+
func TestAccDataSourceSysdigMonitorTeams(t *testing.T) {
15+
resource.Test(t, resource.TestCase{
16+
PreCheck: preCheckAnyEnv(t, SysdigMonitorApiTokenEnv, SysdigIBMMonitorAPIKeyEnv),
17+
ProviderFactories: map[string]func() (*schema.Provider, error){
18+
"sysdig": func() (*schema.Provider, error) {
19+
return sysdig.Provider(), nil
20+
},
21+
},
22+
Steps: []resource.TestStep{
23+
{
24+
Config: testAccDataSourceSysdigMonitorTeamsConfig(randomText(10)),
25+
Check: resource.ComposeTestCheckFunc(
26+
resource.TestCheckResourceAttrSet("data.sysdig_monitor_teams.test", "teams.0.id"),
27+
),
28+
},
29+
},
30+
})
31+
}
32+
33+
func testAccDataSourceSysdigMonitorTeamsConfig(name string) string {
34+
return fmt.Sprintf(`
35+
resource "sysdig_monitor_team" "sample" {
36+
name = "%s"
37+
description = "A monitor secure team"
38+
scope_by = "host"
39+
filter = "container.image.repo = \"sysdig/agent\""
40+
can_use_sysdig_capture = true
41+
can_see_infrastructure_events = true
42+
43+
entrypoint {
44+
type = "Dashboards"
45+
}
46+
}
47+
48+
data "sysdig_monitor_teams" "test" {}
49+
`, name)
50+
}
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: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//go:build tf_acc_sysdig_secure || tf_acc_onprem_secure || tf_acc_ibm_secure
2+
3+
package sysdig_test
4+
5+
import (
6+
"fmt"
7+
"github.com/draios/terraform-provider-sysdig/sysdig"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"testing"
10+
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
12+
)
13+
14+
func TestAccDataSourceSysdigSecureTeams(t *testing.T) {
15+
resource.Test(t, resource.TestCase{
16+
PreCheck: preCheckAnyEnv(t, SysdigSecureApiTokenEnv, SysdigIBMSecureAPIKeyEnv),
17+
ProviderFactories: map[string]func() (*schema.Provider, error){
18+
"sysdig": func() (*schema.Provider, error) {
19+
return sysdig.Provider(), nil
20+
},
21+
},
22+
Steps: []resource.TestStep{
23+
{
24+
Config: testAccDataSourceSysdigSecureTeamsConfig(randomText(5)),
25+
Check: resource.ComposeTestCheckFunc(
26+
resource.TestCheckResourceAttrSet("data.sysdig_secure_teams.test", "teams.0.id"),
27+
),
28+
},
29+
},
30+
})
31+
}
32+
33+
func testAccDataSourceSysdigSecureTeamsConfig(name string) string {
34+
return fmt.Sprintf(`
35+
resource "sysdig_secure_team" "test" {
36+
name = "test-secure-team-%s"
37+
description = "A test secure team"
38+
}
39+
40+
data "sysdig_secure_teams" "test" {}
41+
`, name)
42+
}

sysdig/data_source_sysdig_secure_zone_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//go:build tf_acc_sysdig_secure || tf_acc_onprem_secure
1+
//go:build tf_acc_sysdig_secure || tf_acc_onprem_secure || tf_acc_ibm_secure
22

33
package sysdig_test
44

@@ -13,7 +13,7 @@ import (
1313

1414
func TestAccDataSourceSysdigSecureZone(t *testing.T) {
1515
resource.ParallelTest(t, resource.TestCase{
16-
PreCheck: preCheckAnyEnv(t, SysdigSecureApiTokenEnv),
16+
PreCheck: preCheckAnyEnv(t, SysdigSecureApiTokenEnv, SysdigIBMSecureAPIKeyEnv),
1717
ProviderFactories: map[string]func() (*schema.Provider, error){
1818
"sysdig": func() (*schema.Provider, error) {
1919
return sysdig.Provider(), nil

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
}

0 commit comments

Comments
 (0)