Skip to content

Commit 9c2b3c8

Browse files
Merge branch 'feature-oktaml-terraform' of https://github.com/harshampatel-sysdig/terraform-provider-sysdig into feature-oktaml-terraform
2 parents 9fd8297 + 7d69eab commit 9c2b3c8

22 files changed

+250
-538
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ terraform {
8181
required_providers {
8282
sysdig = {
8383
source = "local/sysdiglabs/sysdig"
84-
version = "~> 2.0.0"
84+
version = "~> 3.0.0"
8585
}
8686
}
8787
}

sysdig/data_source_sysdig_monitor_notification_channel_team_email.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ func dataSourceSysdigMonitorNotificationChannelTeamEmail() *schema.Resource {
2424
Type: schema.TypeInt,
2525
Computed: true,
2626
},
27+
"include_admin_users": {
28+
Type: schema.TypeBool,
29+
Computed: true,
30+
},
2731
}),
2832
}
2933
}

sysdig/data_source_sysdig_monitor_notification_channel_team_email_test.go

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
)
1515

1616
func TestAccMonitorNotificationChannelTeamEmailDataSource(t *testing.T) {
17-
rText := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
17+
rText := func() string { return acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) }
1818

1919
resource.ParallelTest(t, resource.TestCase{
2020
PreCheck: sysdigOrIBMMonitorPreCheck(t),
@@ -25,11 +25,21 @@ func TestAccMonitorNotificationChannelTeamEmailDataSource(t *testing.T) {
2525
},
2626
Steps: []resource.TestStep{
2727
{
28-
Config: monitorNotificationChannelTeamEmail(rText),
28+
Config: monitorNotificationChannelTeamEmail(rText()),
2929
Check: resource.ComposeAggregateTestCheckFunc(
3030
resource.TestCheckResourceAttrPair("data.sysdig_monitor_notification_channel_team_email.nc_team_email", "id", "sysdig_monitor_notification_channel_team_email.nc_team_email", "id"),
3131
resource.TestCheckResourceAttrPair("data.sysdig_monitor_notification_channel_team_email.nc_team_email", "name", "sysdig_monitor_notification_channel_team_email.nc_team_email", "name"),
3232
resource.TestCheckResourceAttrPair("data.sysdig_monitor_notification_channel_team_email.nc_team_email", "team_id", "sysdig_monitor_notification_channel_team_email.nc_team_email", "team_id"),
33+
resource.TestCheckResourceAttrPair("data.sysdig_monitor_notification_channel_team_email.nc_team_email", "include_admin_users", "sysdig_monitor_notification_channel_team_email.nc_team_email", "include_admin_users"),
34+
),
35+
},
36+
{
37+
Config: resourceMonitorNotificationChannelTeamEmailWithIncludeAdminUsers(rText()),
38+
Check: resource.ComposeAggregateTestCheckFunc(
39+
resource.TestCheckResourceAttrPair("data.sysdig_monitor_notification_channel_team_email.nc_team_email_2", "id", "sysdig_monitor_notification_channel_team_email.nc_team_email_2", "id"),
40+
resource.TestCheckResourceAttrPair("data.sysdig_monitor_notification_channel_team_email.nc_team_email_2", "name", "sysdig_monitor_notification_channel_team_email.nc_team_email_2", "name"),
41+
resource.TestCheckResourceAttrPair("data.sysdig_monitor_notification_channel_team_email.nc_team_email_2", "team_id", "sysdig_monitor_notification_channel_team_email.nc_team_email_2", "team_id"),
42+
resource.TestCheckResourceAttrPair("data.sysdig_monitor_notification_channel_team_email.nc_team_email_2", "include_admin_users", "sysdig_monitor_notification_channel_team_email.nc_team_email_2", "include_admin_users"),
3343
),
3444
},
3545
},
@@ -54,3 +64,23 @@ data "sysdig_monitor_notification_channel_team_email" "nc_team_email" {
5464
}
5565
`, name, name)
5666
}
67+
68+
func resourceMonitorNotificationChannelTeamEmailWithIncludeAdminUsers(name string) string {
69+
return fmt.Sprintf(`
70+
resource "sysdig_monitor_team" "sample_data_2" {
71+
name = "monitor-sample-data-%s"
72+
entrypoint {
73+
type = "Explore"
74+
}
75+
}
76+
resource "sysdig_monitor_notification_channel_team_email" "nc_team_email_2" {
77+
name = "%s"
78+
team_id = sysdig_monitor_team.sample_data_2.id
79+
include_admin_users = true
80+
}
81+
82+
data "sysdig_monitor_notification_channel_team_email" "nc_team_email_2" {
83+
name = sysdig_monitor_notification_channel_team_email.nc_team_email_2.name
84+
}
85+
`, name, name)
86+
}

sysdig/data_source_sysdig_secure_notification_channel_team_email.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ func dataSourceSysdigSecureNotificationChannelTeamEmail() *schema.Resource {
2424
Type: schema.TypeInt,
2525
Computed: true,
2626
},
27+
"include_admin_users": {
28+
Type: schema.TypeBool,
29+
Computed: true,
30+
},
2731
}),
2832
}
2933
}

sysdig/data_source_sysdig_secure_notification_channel_team_email_test.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
)
1515

1616
func TestAccSecureNotificationChannelTeamEmailDataSource(t *testing.T) {
17-
rText := acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)
17+
rText := func() string { return acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) }
1818

1919
resource.ParallelTest(t, resource.TestCase{
2020
PreCheck: preCheckAnyEnv(t, SysdigSecureApiTokenEnv, SysdigIBMSecureAPIKeyEnv),
@@ -25,11 +25,21 @@ func TestAccSecureNotificationChannelTeamEmailDataSource(t *testing.T) {
2525
},
2626
Steps: []resource.TestStep{
2727
{
28-
Config: secureNotificationChannelTeamEmail(rText),
28+
Config: secureNotificationChannelTeamEmail(rText()),
2929
Check: resource.ComposeAggregateTestCheckFunc(
3030
resource.TestCheckResourceAttrPair("data.sysdig_secure_notification_channel_team_email.nc_team_email", "id", "sysdig_secure_notification_channel_team_email.nc_team_email", "id"),
3131
resource.TestCheckResourceAttrPair("data.sysdig_secure_notification_channel_team_email.nc_team_email", "name", "sysdig_secure_notification_channel_team_email.nc_team_email", "name"),
3232
resource.TestCheckResourceAttrPair("data.sysdig_secure_notification_channel_team_email.nc_team_email", "team_id", "sysdig_secure_notification_channel_team_email.nc_team_email", "team_id"),
33+
resource.TestCheckResourceAttrPair("data.sysdig_secure_notification_channel_team_email.nc_team_email", "include_admin_users", "sysdig_secure_notification_channel_team_email.nc_team_email", "include_admin_users"),
34+
),
35+
},
36+
{
37+
Config: resourceSecureNotificationChannelTeamEmailWithIncludeAdminUsers(rText()),
38+
Check: resource.ComposeAggregateTestCheckFunc(
39+
resource.TestCheckResourceAttrPair("data.sysdig_secure_notification_channel_team_email.nc_team_email_2", "id", "sysdig_secure_notification_channel_team_email.nc_team_email_2", "id"),
40+
resource.TestCheckResourceAttrPair("data.sysdig_secure_notification_channel_team_email.nc_team_email_2", "name", "sysdig_secure_notification_channel_team_email.nc_team_email_2", "name"),
41+
resource.TestCheckResourceAttrPair("data.sysdig_secure_notification_channel_team_email.nc_team_email_2", "team_id", "sysdig_secure_notification_channel_team_email.nc_team_email_2", "team_id"),
42+
resource.TestCheckResourceAttrPair("data.sysdig_secure_notification_channel_team_email.nc_team_email_2", "include_admin_users", "sysdig_secure_notification_channel_team_email.nc_team_email_2", "include_admin_users"),
3343
),
3444
},
3545
},
@@ -52,3 +62,21 @@ data "sysdig_secure_notification_channel_team_email" "nc_team_email" {
5262
}
5363
`, name, name)
5464
}
65+
66+
func resourceSecureNotificationChannelTeamEmailWithIncludeAdminUsers(name string) string {
67+
return fmt.Sprintf(`
68+
resource "sysdig_secure_team" "sample_data_2" {
69+
name = "secure-sample-data-%s"
70+
all_zones = "true"
71+
}
72+
resource "sysdig_secure_notification_channel_team_email" "nc_team_email_2" {
73+
name = "%s"
74+
team_id = sysdig_secure_team.sample_data_2.id
75+
include_admin_users = true
76+
}
77+
78+
data "sysdig_secure_notification_channel_team_email" "nc_team_email_2" {
79+
name = sysdig_secure_notification_channel_team_email.nc_team_email_2.name
80+
}
81+
`, name, name)
82+
}

sysdig/internal/client/v2/cloud_account.go

Lines changed: 4 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,12 @@ import (
77
)
88

99
const (
10-
cloudAccountsPath = "%s/api/cloud/v2/accounts"
11-
cloudAccountsWithExternalIDPath = "%s/api/cloud/v2/accounts?includeExternalID=true&upsert=true"
12-
cloudAccountPath = "%s/api/cloud/v2/accounts/%s"
13-
cloudAccountWithExternalIDPath = "%s/api/cloud/v2/accounts/%s?includeExternalID=true"
14-
providersPath = "%v/api/v2/providers"
15-
costCloudAccountPath = "%s/api/cloudaccount"
16-
costProviderURL = "%s/api/cloudaccount/features/cost/account?id=%d"
17-
updateCostProviderURL = "%s/api/cloudaccount/features/cost"
10+
providersPath = "%v/api/v2/providers"
11+
costCloudAccountPath = "%s/api/cloudaccount"
12+
costProviderURL = "%s/api/cloudaccount/features/cost/account?id=%d"
13+
updateCostProviderURL = "%s/api/cloudaccount/features/cost"
1814
)
1915

20-
type CloudAccountSecureInterface interface {
21-
Base
22-
CreateCloudAccountSecure(ctx context.Context, cloudAccount *CloudAccountSecure) (*CloudAccountSecure, error)
23-
GetCloudAccountSecureByID(ctx context.Context, accountID string) (*CloudAccountSecure, error)
24-
DeleteCloudAccountSecure(ctx context.Context, accountID string) error
25-
UpdateCloudAccountSecure(ctx context.Context, accountID string, cloudAccount *CloudAccountSecure) (*CloudAccountSecure, error)
26-
}
27-
2816
type CloudAccountMonitorInterface interface {
2917
Base
3018
CreateCloudAccountMonitor(ctx context.Context, provider *CloudAccountMonitor) (*CloudAccountMonitor, error)
@@ -36,89 +24,6 @@ type CloudAccountMonitorInterface interface {
3624
DeleteCloudAccountMonitor(ctx context.Context, id int) error
3725
}
3826

39-
func (c *Client) CreateCloudAccountSecure(ctx context.Context, cloudAccount *CloudAccountSecure) (createdAccount *CloudAccountSecure, err error) {
40-
payload, err := Marshal(cloudAccount)
41-
if err != nil {
42-
return nil, err
43-
}
44-
45-
response, err := c.requester.Request(ctx, http.MethodPost, c.cloudAccountsURL(true), payload)
46-
if err != nil {
47-
return nil, err
48-
}
49-
defer func() {
50-
if dErr := response.Body.Close(); dErr != nil {
51-
err = fmt.Errorf("unable to close response body: %w", dErr)
52-
}
53-
}()
54-
55-
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
56-
err = c.ErrorFromResponse(response)
57-
return nil, err
58-
}
59-
60-
return Unmarshal[*CloudAccountSecure](response.Body)
61-
}
62-
63-
func (c *Client) GetCloudAccountSecureByID(ctx context.Context, accountID string) (cloudAccount *CloudAccountSecure, err error) {
64-
response, err := c.requester.Request(ctx, http.MethodGet, c.cloudAccountURL(accountID, true), nil)
65-
if err != nil {
66-
return nil, err
67-
}
68-
defer func() {
69-
if dErr := response.Body.Close(); dErr != nil {
70-
err = fmt.Errorf("unable to close response body: %w", dErr)
71-
}
72-
}()
73-
74-
if response.StatusCode != http.StatusOK {
75-
return nil, c.ErrorFromResponse(response)
76-
}
77-
78-
return Unmarshal[*CloudAccountSecure](response.Body)
79-
}
80-
81-
func (c *Client) DeleteCloudAccountSecure(ctx context.Context, accountID string) (err error) {
82-
response, err := c.requester.Request(ctx, http.MethodDelete, c.cloudAccountURL(accountID, false), nil)
83-
if err != nil {
84-
return err
85-
}
86-
defer func() {
87-
if dErr := response.Body.Close(); dErr != nil {
88-
err = fmt.Errorf("unable to close response body: %w", dErr)
89-
}
90-
}()
91-
92-
if response.StatusCode != http.StatusNoContent && response.StatusCode != http.StatusOK {
93-
return c.ErrorFromResponse(response)
94-
}
95-
return nil
96-
}
97-
98-
func (c *Client) UpdateCloudAccountSecure(ctx context.Context, accountID string, cloudAccount *CloudAccountSecure) (updatedAccount *CloudAccountSecure, err error) {
99-
payload, err := Marshal(cloudAccount)
100-
if err != nil {
101-
return nil, err
102-
}
103-
104-
response, err := c.requester.Request(ctx, http.MethodPut, c.cloudAccountURL(accountID, true), payload)
105-
if err != nil {
106-
return nil, err
107-
}
108-
defer func() {
109-
if dErr := response.Body.Close(); dErr != nil {
110-
err = fmt.Errorf("unable to close response body: %w", dErr)
111-
}
112-
}()
113-
114-
if response.StatusCode != http.StatusOK {
115-
err = c.ErrorFromResponse(response)
116-
return nil, err
117-
}
118-
119-
return Unmarshal[*CloudAccountSecure](response.Body)
120-
}
121-
12227
func (c *Client) CreateCloudAccountMonitor(ctx context.Context, provider *CloudAccountMonitor) (createdProvider *CloudAccountMonitor, err error) {
12328
payload, err := Marshal(provider)
12429
if err != nil {
@@ -295,20 +200,6 @@ func (c *Client) DeleteCloudAccountMonitor(ctx context.Context, id int) (err err
295200
return nil
296201
}
297202

298-
func (c *Client) cloudAccountsURL(includeExternalID bool) string {
299-
if includeExternalID {
300-
return fmt.Sprintf(cloudAccountsWithExternalIDPath, c.config.url)
301-
}
302-
return fmt.Sprintf(cloudAccountsPath, c.config.url)
303-
}
304-
305-
func (c *Client) cloudAccountURL(accountID string, includeExternalID bool) string {
306-
if includeExternalID {
307-
return fmt.Sprintf(cloudAccountWithExternalIDPath, c.config.url, accountID)
308-
}
309-
return fmt.Sprintf(cloudAccountPath, c.config.url, accountID)
310-
}
311-
312203
func (c *Client) getProviderURL(id int) string {
313204
return fmt.Sprintf("%v/%v", c.getProvidersURL(), id)
314205
}

sysdig/internal/client/v2/model.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ type NotificationChannelOptions struct {
130130
Region string `json:"region,omitempty"` // Type: OpsGenie
131131
AllowInsecureConnections *bool `json:"allowInsecureConnections,omitempty"` // Type: prometheus alert manager, custom webhook, Webhook
132132
TeamID int `json:"teamId,omitempty"` // Type: team email
133+
IncludeAdminUsers *bool `json:"includeAdminUsers,omitempty"` // Type: team email
133134
HTTPMethod string `json:"httpMethod,omitempty"` // Type: custom webhook
134135
MonitorTemplate string `json:"monitorTemplate,omitempty"` // Type: custom webhook
135136
InstanceID string `json:"instanceId,omitempty"` // Type: ibm event notification

sysdig/internal/client/v2/sysdig.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ type SysdigSecure interface {
3939
SysdigCommon
4040
SecureCommon
4141

42-
CloudAccountSecureInterface
4342
CloudauthAccountComponentSecureInterface
4443
CloudauthAccountFeatureSecureInterface
4544
CloudauthAccountSecureInterface

sysdig/resource_sysdig_monitor_notification_channel_team_email.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ func resourceSysdigMonitorNotificationChannelTeamEmail() *schema.Resource {
3636
Type: schema.TypeInt,
3737
Required: true,
3838
},
39+
"include_admin_users": {
40+
Type: schema.TypeBool,
41+
Optional: true,
42+
Default: false,
43+
},
3944
}),
4045
}
4146
}
@@ -141,6 +146,8 @@ func monitorNotificationChannelTeamEmailFromResourceData(d *schema.ResourceData,
141146

142147
nc.Type = notificationChannelTypeTeamEmail
143148
nc.Options.TeamID = d.Get("team_id").(int)
149+
includeAdminUsers := d.Get("include_admin_users").(bool)
150+
nc.Options.IncludeAdminUsers = &includeAdminUsers
144151
return nc, err
145152
}
146153

@@ -151,6 +158,9 @@ func monitorNotificationChannelTeamEmailToResourceData(nc *v2.NotificationChanne
151158
}
152159

153160
_ = d.Set("team_id", nc.Options.TeamID)
161+
if nc.Options.IncludeAdminUsers != nil {
162+
_ = d.Set("include_admin_users", *nc.Options.IncludeAdminUsers)
163+
}
154164

155165
return err
156166
}

sysdig/resource_sysdig_monitor_notification_channel_team_email_test.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ func TestAccMonitorNotificationChannelTeamEmail(t *testing.T) {
4242
ImportStateVerify: true,
4343
ImportStateVerifyIgnore: []string{"send_test_notification"},
4444
},
45+
{
46+
Config: monitorNotificationChannelTeamEmailWithIncludeAdminUsers(rText()),
47+
},
48+
{
49+
ResourceName: "sysdig_monitor_notification_channel_team_email.sample_team_email3",
50+
ImportState: true,
51+
ImportStateVerify: true,
52+
ImportStateVerifyIgnore: []string{"send_test_notification"},
53+
},
4554
},
4655
})
4756
}
@@ -51,7 +60,7 @@ func monitorNotificationChannelTeamEmailWithName(name string) string {
5160
resource "sysdig_monitor_team" "sample1" {
5261
name = "monitor-sample-%s"
5362
entrypoint {
54-
type = "Explore"
63+
type = "Explore"
5564
}
5665
}
5766
resource "sysdig_monitor_notification_channel_team_email" "sample_team_email1" {
@@ -68,7 +77,7 @@ func monitorNotificationChannelTeamEmailSharedWithCurrentTeam(name string) strin
6877
resource "sysdig_monitor_team" "sample2" {
6978
name = "monitor-sample-%s"
7079
entrypoint {
71-
type = "Explore"
80+
type = "Explore"
7281
}
7382
}
7483
resource "sysdig_monitor_notification_channel_team_email" "sample_team_email2" {
@@ -80,3 +89,21 @@ resource "sysdig_monitor_notification_channel_team_email" "sample_team_email2" {
8089
share_with_current_team = true
8190
}`, name, name)
8291
}
92+
93+
func monitorNotificationChannelTeamEmailWithIncludeAdminUsers(name string) string {
94+
return fmt.Sprintf(`
95+
resource "sysdig_monitor_team" "sample3" {
96+
name = "monitor-sample-%s"
97+
entrypoint {
98+
type = "Explore"
99+
}
100+
}
101+
resource "sysdig_monitor_notification_channel_team_email" "sample_team_email3" {
102+
name = "Example Channel %s - team email"
103+
enabled = true
104+
team_id = sysdig_monitor_team.sample3.id
105+
include_admin_users = true
106+
notify_when_ok = true
107+
notify_when_resolved = true
108+
}`, name, name)
109+
}

0 commit comments

Comments
 (0)