Skip to content

Commit 000b507

Browse files
authored
feat(secure-rule, secure-policy) use status code to determine if resource needs to be recreated (#409)
* use status code to determine if resource needs to be recreated * refactor response to match other resources * set id to "" for policy 404's too
1 parent e07821e commit 000b507

11 files changed

+62
-24
lines changed

sysdig/internal/client/v2/rules.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const (
1818
type RuleInterface interface {
1919
Base
2020
CreateRule(ctx context.Context, rule Rule) (Rule, error)
21-
GetRuleByID(ctx context.Context, ruleID int) (Rule, error)
21+
GetRuleByID(ctx context.Context, ruleID int) (Rule, int, error)
2222
UpdateRule(ctx context.Context, rule Rule) (Rule, error)
2323
DeleteRule(ctx context.Context, ruleID int) error
2424
GetRuleGroup(ctx context.Context, ruleName string, ruleType string) ([]Rule, error)
@@ -43,18 +43,19 @@ func (client *Client) CreateRule(ctx context.Context, rule Rule) (Rule, error) {
4343
return Unmarshal[Rule](response.Body)
4444
}
4545

46-
func (client *Client) GetRuleByID(ctx context.Context, ruleID int) (Rule, error) {
46+
func (client *Client) GetRuleByID(ctx context.Context, ruleID int) (Rule, int, error) {
4747
response, err := client.requester.Request(ctx, http.MethodGet, client.GetRuleByIDURL(ruleID), nil)
4848
if err != nil {
49-
return Rule{}, err
49+
return Rule{}, 0, err
5050
}
5151
defer response.Body.Close()
5252

5353
if response.StatusCode != http.StatusOK {
54-
return Rule{}, client.ErrorFromResponse(response)
54+
return Rule{}, response.StatusCode, client.ErrorFromResponse(response)
5555
}
5656

57-
return Unmarshal[Rule](response.Body)
57+
rule, err := Unmarshal[Rule](response.Body)
58+
return rule, 0, err
5859
}
5960

6061
func (client *Client) UpdateRule(ctx context.Context, rule Rule) (Rule, error) {

sysdig/resource_sysdig_secure_custom_policy.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,9 @@ func resourceSysdigCustomPolicyRead(ctx context.Context, d *schema.ResourceData,
141141
policy, statusCode, err := client.GetPolicyByID(ctx, id)
142142

143143
if err != nil {
144-
d.SetId("")
145144
if statusCode == http.StatusNotFound {
145+
d.SetId("")
146+
} else {
146147
return diag.FromErr(err)
147148
}
148149
}

sysdig/resource_sysdig_secure_managed_policy.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,9 @@ func resourceSysdigManagedPolicyRead(ctx context.Context, d *schema.ResourceData
112112
policy, statusCode, err := client.GetPolicyByID(ctx, id)
113113

114114
if err != nil {
115-
d.SetId("")
116115
if statusCode == http.StatusNotFound {
116+
d.SetId("")
117+
} else {
117118
return diag.FromErr(err)
118119
}
119120
}
@@ -134,8 +135,9 @@ func resourceSysdigManagedPolicyDelete(ctx context.Context, d *schema.ResourceDa
134135
// Reset everything back to default values for managed policy
135136
policy, statusCode, err := client.GetPolicyByID(ctx, id)
136137
if err != nil {
137-
d.SetId("")
138138
if statusCode == http.StatusNotFound {
139+
d.SetId("")
140+
} else {
139141
return diag.FromErr(err)
140142
}
141143
}
@@ -169,8 +171,9 @@ func resourceSysdigManagedPolicyUpdate(ctx context.Context, d *schema.ResourceDa
169171
policy, statusCode, err := client.GetPolicyByID(ctx, id)
170172

171173
if err != nil {
172-
d.SetId("")
173174
if statusCode == http.StatusNotFound {
175+
d.SetId("")
176+
} else {
174177
return diag.FromErr(err)
175178
}
176179
}

sysdig/resource_sysdig_secure_managed_ruleset.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,9 @@ func resourceSysdigManagedRulesetRead(ctx context.Context, d *schema.ResourceDat
149149
policy, statusCode, err := client.GetPolicyByID(ctx, id)
150150

151151
if err != nil {
152-
d.SetId("")
153152
if statusCode == http.StatusNotFound {
153+
d.SetId("")
154+
} else {
154155
return diag.FromErr(err)
155156
}
156157
}
@@ -187,8 +188,9 @@ func resourceSysdigManagedRulesetUpdate(ctx context.Context, d *schema.ResourceD
187188
policy, statusCode, err := client.GetPolicyByID(ctx, id)
188189

189190
if err != nil {
190-
d.SetId("")
191191
if statusCode == http.StatusNotFound {
192+
d.SetId("")
193+
} else {
192194
return diag.FromErr(err)
193195
}
194196
}

sysdig/resource_sysdig_secure_policy.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,9 @@ func resourceSysdigPolicyRead(ctx context.Context, d *schema.ResourceData, meta
291291
policy, statusCode, err := client.GetPolicyByID(ctx, id)
292292

293293
if err != nil {
294-
d.SetId("")
295294
if statusCode == http.StatusNotFound {
295+
d.SetId("")
296+
} else {
296297
return diag.FromErr(err)
297298
}
298299
}

sysdig/resource_sysdig_secure_rule_container.go

Lines changed: 7 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

@@ -79,10 +80,14 @@ func resourceSysdigRuleContainerRead(ctx context.Context, d *schema.ResourceData
7980
return diag.FromErr(err)
8081
}
8182

82-
rule, err := client.GetRuleByID(ctx, id)
83+
rule, statusCode, err := client.GetRuleByID(ctx, id)
8384

8485
if err != nil {
85-
d.SetId("")
86+
if statusCode == http.StatusNotFound {
87+
d.SetId("")
88+
} else {
89+
return diag.FromErr(err)
90+
}
8691
}
8792

8893
if rule.Details.Containers == nil {

sysdig/resource_sysdig_secure_rule_falco.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"errors"
77
"fmt"
8+
"net/http"
89
"strconv"
910
"strings"
1011
"time"
@@ -133,9 +134,13 @@ func resourceSysdigRuleFalcoRead(ctx context.Context, d *schema.ResourceData, me
133134
return diag.FromErr(err)
134135
}
135136

136-
rule, err := client.GetRuleByID(ctx, id)
137+
rule, statusCode, err := client.GetRuleByID(ctx, id)
137138
if err != nil {
138-
d.SetId("")
139+
if statusCode == http.StatusNotFound {
140+
d.SetId("")
141+
} else {
142+
return diag.FromErr(err)
143+
}
139144
}
140145

141146
if rule.Details.Append != nil && !(*(rule.Details.Append)) {

sysdig/resource_sysdig_secure_rule_filesystem.go

Lines changed: 7 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

@@ -110,9 +111,13 @@ func resourceSysdigRuleFilesystemRead(ctx context.Context, d *schema.ResourceDat
110111
return diag.FromErr(err)
111112
}
112113

113-
rule, err := client.GetRuleByID(ctx, id)
114+
rule, statusCode, err := client.GetRuleByID(ctx, id)
114115
if err != nil {
115-
d.SetId("")
116+
if statusCode == http.StatusNotFound {
117+
d.SetId("")
118+
} else {
119+
return diag.FromErr(err)
120+
}
116121
}
117122

118123
updateResourceDataForRule(d, rule)

sysdig/resource_sysdig_secure_rule_network.go

Lines changed: 7 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

@@ -118,10 +119,14 @@ func resourceSysdigRuleNetworkRead(ctx context.Context, d *schema.ResourceData,
118119
return diag.FromErr(err)
119120
}
120121

121-
rule, err := client.GetRuleByID(ctx, id)
122+
rule, statusCode, err := client.GetRuleByID(ctx, id)
122123

123124
if err != nil {
124-
d.SetId("")
125+
if statusCode == http.StatusNotFound {
126+
d.SetId("")
127+
} else {
128+
return diag.FromErr(err)
129+
}
125130
}
126131
updateResourceDataForRule(d, rule)
127132

sysdig/resource_sysdig_secure_rule_process.go

Lines changed: 7 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

@@ -79,10 +80,14 @@ func resourceSysdigRuleProcessRead(ctx context.Context, d *schema.ResourceData,
7980
return diag.FromErr(err)
8081
}
8182

82-
rule, err := client.GetRuleByID(ctx, id)
83+
rule, statusCode, err := client.GetRuleByID(ctx, id)
8384

8485
if err != nil {
85-
d.SetId("")
86+
if statusCode == http.StatusNotFound {
87+
d.SetId("")
88+
} else {
89+
return diag.FromErr(err)
90+
}
8691
}
8792

8893
if rule.Details.Processes == nil {

0 commit comments

Comments
 (0)