Skip to content

Commit 1e938ad

Browse files
authored
fix(read-resources): avoid panics and remove them from state if not found (#682)
1 parent 71269f0 commit 1e938ad

19 files changed

+88
-38
lines changed

sysdig/data_source_agent_access_keys.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package sysdig
22

33
import (
44
"context"
5+
"net/http"
56
"strconv"
67
"time"
78

@@ -68,8 +69,12 @@ func dataSourceSysdigAgentAccessKeyRead(ctx context.Context, d *schema.ResourceD
6869
}
6970

7071
agentKeyID := d.Get("id").(int)
71-
agentAccessKey, err := client.GetAgentAccessKeyByID(ctx, strconv.Itoa(agentKeyID))
72+
agentAccessKey, statusCode, err := client.GetAgentAccessKeyByID(ctx, strconv.Itoa(agentKeyID))
7273
if err != nil {
74+
if statusCode == http.StatusNotFound {
75+
d.SetId("")
76+
return nil
77+
}
7378
return diag.FromErr(err)
7479
}
7580
d.SetId(strconv.Itoa(agentAccessKey.ID))

sysdig/data_source_sysdig_monitor_team.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package sysdig
22

33
import (
44
"context"
5+
"net/http"
56
"strconv"
67

78
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -120,8 +121,12 @@ func dataSourceSysdigMonitorTeamRead(ctx context.Context, d *schema.ResourceData
120121
return diag.FromErr(err)
121122
}
122123

123-
team, err := client.GetTeamByID(ctx, id)
124+
team, statusCode, err := client.GetTeamByID(ctx, id)
124125
if err != nil {
126+
if statusCode == http.StatusNotFound {
127+
d.SetId("")
128+
return nil
129+
}
125130
return diag.FromErr(err)
126131
}
127132

sysdig/data_source_sysdig_secure_team.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package sysdig
22

33
import (
44
"context"
5+
"net/http"
56
"strconv"
67

78
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -99,8 +100,12 @@ func dataSourceSysdigSecureTeamRead(ctx context.Context, d *schema.ResourceData,
99100
return diag.FromErr(err)
100101
}
101102

102-
team, err := client.GetTeamByID(ctx, id)
103+
team, statusCode, err := client.GetTeamByID(ctx, id)
103104
if err != nil {
105+
if statusCode == http.StatusNotFound {
106+
d.SetId("")
107+
return nil
108+
}
104109
return diag.FromErr(err)
105110
}
106111

sysdig/data_source_sysdig_user.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package sysdig
22

33
import (
44
"context"
5+
"net/http"
56
"strconv"
67
"time"
78

@@ -50,9 +51,14 @@ func dataSourceSysdigUserRead(ctx context.Context, d *schema.ResourceData, meta
5051
return diag.FromErr(err)
5152
}
5253

53-
u, err := client.GetUserByEmail(ctx, d.Get("email").(string))
54+
u, statusCode, err := client.GetUserByEmail(ctx, d.Get("email").(string))
5455
if err != nil {
55-
return diag.FromErr(err)
56+
if statusCode == http.StatusNotFound {
57+
d.SetId("")
58+
return nil
59+
} else {
60+
return diag.FromErr(err)
61+
}
5662
}
5763

5864
d.SetId(strconv.Itoa(u.ID))

sysdig/internal/client/v2/agentaccesskey.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ const (
1515

1616
type AgentAccessKeyInterface interface {
1717
Base
18-
GetAgentAccessKeyByID(ctx context.Context, id string) (*AgentAccessKey, error)
18+
GetAgentAccessKeyByID(ctx context.Context, id string) (*AgentAccessKey, int, error)
1919
CreateAgentAccessKey(ctx context.Context, agentAccessKey *AgentAccessKey) (*AgentAccessKey, error)
2020
DeleteAgentAccessKey(ctx context.Context, id string) error
2121
UpdateAgentAccessKey(ctx context.Context, agentAccessKey *AgentAccessKey, id string) (*AgentAccessKey, error)
2222
}
2323

24-
func (c *Client) GetAgentAccessKeyByID(ctx context.Context, id string) (accessKey *AgentAccessKey, err error) {
24+
func (c *Client) GetAgentAccessKeyByID(ctx context.Context, id string) (accessKey *AgentAccessKey, statusCode int, err error) {
2525
response, err := c.requester.Request(ctx, http.MethodGet, c.getAgentAccessKeyByIDUrl(id), nil)
2626
if err != nil {
27-
return nil, err
27+
return nil, 0, err
2828
}
2929
defer func() {
3030
if dErr := response.Body.Close(); dErr != nil {
@@ -34,10 +34,11 @@ func (c *Client) GetAgentAccessKeyByID(ctx context.Context, id string) (accessKe
3434

3535
if response.StatusCode != http.StatusOK {
3636
err = c.ErrorFromResponse(response)
37-
return nil, err
37+
return nil, response.StatusCode, err
3838
}
3939

40-
return Unmarshal[*AgentAccessKey](response.Body)
40+
result, err := Unmarshal[*AgentAccessKey](response.Body)
41+
return result, response.StatusCode, err
4142
}
4243

4344
func (c *Client) CreateAgentAccessKey(ctx context.Context, agentAccessKey *AgentAccessKey) (createdAccessKey *AgentAccessKey, err error) {

sysdig/internal/client/v2/teams.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const (
1515
type TeamInterface interface {
1616
Base
1717
GetUserIDByEmail(ctx context.Context, userRoles []UserRoles) ([]UserRoles, error)
18-
GetTeamByID(ctx context.Context, id int) (t Team, err error)
18+
GetTeamByID(ctx context.Context, id int) (t Team, statusCode int, err error)
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
@@ -66,10 +66,10 @@ func (c *Client) GetUserIDByEmail(ctx context.Context, userRoles []UserRoles) (m
6666
return modifiedUserRoles, nil
6767
}
6868

69-
func (c *Client) GetTeamByID(ctx context.Context, id int) (team Team, err error) {
69+
func (c *Client) GetTeamByID(ctx context.Context, id int) (team Team, statusCode int, err error) {
7070
response, err := c.requester.Request(ctx, http.MethodGet, c.getTeamURL(id), nil)
7171
if err != nil {
72-
return Team{}, err
72+
return Team{}, 0, err
7373
}
7474
defer func() {
7575
if dErr := response.Body.Close(); dErr != nil {
@@ -78,15 +78,15 @@ func (c *Client) GetTeamByID(ctx context.Context, id int) (team Team, err error)
7878
}()
7979

8080
if response.StatusCode != http.StatusOK {
81-
return Team{}, c.ErrorFromResponse(response)
81+
return Team{}, response.StatusCode, c.ErrorFromResponse(response)
8282
}
8383

8484
wrapper, err := Unmarshal[teamWrapper](response.Body)
8585
if err != nil {
86-
return Team{}, c.ErrorFromResponse(response)
86+
return Team{}, response.StatusCode, c.ErrorFromResponse(response)
8787
}
8888

89-
return wrapper.Team, err
89+
return wrapper.Team, response.StatusCode, err
9090
}
9191

9292
func (c *Client) CreateTeam(ctx context.Context, team Team) (createdTeam Team, err error) {

sysdig/internal/client/v2/users.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,19 @@ const (
1717

1818
type UserInterface interface {
1919
Base
20-
GetUserByID(ctx context.Context, id int) (*User, error)
21-
GetUserByUsername(ctx context.Context, username string) (*User, error)
22-
GetUserByEmail(ctx context.Context, email string) (*User, error)
20+
GetUserByID(ctx context.Context, id int) (*User, int, error)
21+
GetUserByUsername(ctx context.Context, username string) (*User, int, error)
22+
GetUserByEmail(ctx context.Context, email string) (*User, int, error)
2323
CreateUser(ctx context.Context, user *User) (*User, error)
2424
UpdateUser(ctx context.Context, user *User) (*User, error)
2525
DeleteUser(ctx context.Context, id int) error
2626
GetCurrentUser(ctx context.Context) (u *User, err error)
2727
}
2828

29-
func (c *Client) GetUserByID(ctx context.Context, id int) (user *User, error error) {
29+
func (c *Client) GetUserByID(ctx context.Context, id int) (user *User, statusCode int, error error) {
3030
response, err := c.requester.Request(ctx, http.MethodGet, c.getUserURL(id), nil)
3131
if err != nil {
32-
return nil, err
32+
return nil, 0, err
3333
}
3434
defer func() {
3535
if dErr := response.Body.Close(); dErr != nil {
@@ -38,21 +38,21 @@ func (c *Client) GetUserByID(ctx context.Context, id int) (user *User, error err
3838
}()
3939

4040
if response.StatusCode != http.StatusOK {
41-
return nil, c.ErrorFromResponse(response)
41+
return nil, response.StatusCode, c.ErrorFromResponse(response)
4242
}
4343

4444
wrapper, err := Unmarshal[userWrapper](response.Body)
4545
if err != nil {
46-
return nil, err
46+
return nil, 0, err
4747
}
4848

49-
return &wrapper.User, nil
49+
return &wrapper.User, response.StatusCode, nil
5050
}
5151

52-
func (c *Client) GetUserByUsername(ctx context.Context, username string) (user *User, err error) {
52+
func (c *Client) GetUserByUsername(ctx context.Context, username string) (user *User, statusCode int, err error) {
5353
response, err := c.requester.Request(ctx, http.MethodGet, c.getUserByUsernameURL(username), nil)
5454
if err != nil {
55-
return nil, err
55+
return nil, 0, err
5656
}
5757
defer func() {
5858
if dErr := response.Body.Close(); dErr != nil {
@@ -61,18 +61,18 @@ func (c *Client) GetUserByUsername(ctx context.Context, username string) (user *
6161
}()
6262

6363
if response.StatusCode != http.StatusOK {
64-
return nil, c.ErrorFromResponse(response)
64+
return nil, response.StatusCode, c.ErrorFromResponse(response)
6565
}
6666

6767
wrapper, err := Unmarshal[userWrapper](response.Body)
6868
if err != nil {
69-
return nil, err
69+
return nil, 0, err
7070
}
7171

72-
return &wrapper.User, nil
72+
return &wrapper.User, response.StatusCode, nil
7373
}
7474

75-
func (c *Client) GetUserByEmail(ctx context.Context, email string) (*User, error) {
75+
func (c *Client) GetUserByEmail(ctx context.Context, email string) (*User, int, error) {
7676
return c.GetUserByUsername(ctx, email)
7777
}
7878

sysdig/resource_sysdig_agent_access_key.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package sysdig
33
import (
44
"context"
55
"fmt"
6+
"net/http"
67
"strconv"
78
"time"
89

@@ -157,8 +158,12 @@ func resourceSysdigAgentAccessKeyRead(ctx context.Context, d *schema.ResourceDat
157158

158159
agentKeyID := d.Id()
159160

160-
agentAccessKey, err := client.GetAgentAccessKeyByID(ctx, agentKeyID)
161+
agentAccessKey, statusCode, err := client.GetAgentAccessKeyByID(ctx, agentKeyID)
161162
if err != nil {
163+
if statusCode == http.StatusNotFound {
164+
d.SetId("")
165+
return nil
166+
}
162167
return diag.FromErr(err)
163168
}
164169

sysdig/resource_sysdig_monitor_team.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package sysdig
22

33
import (
44
"context"
5+
"net/http"
56
"strconv"
67
"time"
78

@@ -183,9 +184,12 @@ func resourceSysdigMonitorTeamRead(ctx context.Context, d *schema.ResourceData,
183184
}
184185

185186
id, _ := strconv.Atoi(d.Id())
186-
t, err := client.GetTeamByID(ctx, id)
187+
t, statusCode, err := client.GetTeamByID(ctx, id)
187188
if err != nil {
188-
d.SetId("")
189+
if statusCode == http.StatusNotFound {
190+
d.SetId("")
191+
return nil
192+
}
189193
return diag.FromErr(err)
190194
}
191195

sysdig/resource_sysdig_secure_custom_policy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ func resourceSysdigCustomPolicyRead(ctx context.Context, d *schema.ResourceData,
193193
if err != nil {
194194
if statusCode == http.StatusNotFound {
195195
d.SetId("")
196+
return nil
196197
} else {
197198
return diag.FromErr(err)
198199
}

0 commit comments

Comments
 (0)