Skip to content

Commit a8a081d

Browse files
committed
add stateful policy and rule support
1 parent e60877e commit a8a081d

File tree

6 files changed

+436
-11
lines changed

6 files changed

+436
-11
lines changed

sysdig/internal/client/v2/model.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -520,12 +520,15 @@ type Rule struct {
520520
}
521521

522522
const (
523-
RuleTypeContainer = "CONTAINER"
524-
RuleTypeFalco = "FALCO"
525-
RuleTypeFilesystem = "FILESYSTEM"
526-
RuleTypeNetwork = "NETWORK"
527-
RuleTypeProcess = "PROCESS"
528-
RuleTypeSyscall = "SYSCALL"
523+
RuleTypeContainer = "CONTAINER"
524+
RuleTypeFalco = "FALCO"
525+
RuleTypeFilesystem = "FILESYSTEM"
526+
RuleTypeNetwork = "NETWORK"
527+
RuleTypeProcess = "PROCESS"
528+
RuleTypeSyscall = "SYSCALL"
529+
RuleTypeStatefulSequence = "STATEFUL_SEQUENCE"
530+
StatefulUniqPercentRuleType = "STATEFUL_UNIQ_PERCENT"
531+
StatefulCountRuleType = "STATEFUL_COUNT"
529532
)
530533

531534
type Details struct {

sysdig/internal/client/v2/rules.go

Lines changed: 96 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ import (
88
)
99

1010
const (
11-
CreateRulePath = "%s/api/secure/rules?skipPolicyV2Msg=%t"
12-
GetRuleByIDPath = "%s/api/secure/rules/%d"
13-
UpdateRulePath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
14-
DeleteURLPath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
15-
GetRuleGroupPath = "%s/api/secure/rules/groups?name=%s&type=%s"
11+
CreateRulePath = "%s/api/secure/rules?skipPolicyV2Msg=%t"
12+
GetRuleByIDPath = "%s/api/secure/rules/%d"
13+
UpdateRulePath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
14+
DeleteURLPath = "%s/api/secure/rules/%d?skipPolicyV2Msg=%t"
15+
GetRuleGroupPath = "%s/api/secure/rules/groups?name=%s&type=%s"
16+
CreateStatefulRulePath = "%s/api/policies/v3/statefulRules"
17+
UpdateStatefulRulePath = "%s/api/policies/v3/statefulRules/%d"
18+
DeleteStatefulRulePath = "%s/api/policies/v3/statefulRules/%d"
19+
GetStatefulRuleGroupPath = "%s/api/policies/v3/statefulRules/groups?name=%s&type=%s"
1620
)
1721

1822
type RuleInterface interface {
@@ -22,6 +26,10 @@ type RuleInterface interface {
2226
UpdateRule(ctx context.Context, rule Rule) (Rule, error)
2327
DeleteRule(ctx context.Context, ruleID int) error
2428
GetRuleGroup(ctx context.Context, ruleName string, ruleType string) ([]Rule, error)
29+
CreateStatefulRule(ctx context.Context, rule Rule) (Rule, error)
30+
UpdateStatefulRule(ctx context.Context, rule Rule) (Rule, error)
31+
DeleteStatefulRule(ctx context.Context, ruleID int) error
32+
GetStatefulRuleGroup(ctx context.Context, ruleName string, ruleType string) ([]Rule, error)
2533
}
2634

2735
func (client *Client) CreateRule(ctx context.Context, rule Rule) (Rule, error) {
@@ -125,3 +133,86 @@ func (client *Client) DeleteRuleURL(ruleID int) string {
125133
func (client *Client) GetRuleGroupURL(ruleName string, ruleType string) string {
126134
return fmt.Sprintf(GetRuleGroupPath, client.config.url, url.QueryEscape(ruleName), url.QueryEscape(ruleType))
127135
}
136+
137+
func (client *Client) CreateStatefulRuleURL() string {
138+
return fmt.Sprintf(CreateStatefulRulePath, client.config.url)
139+
}
140+
141+
func (client *Client) UpdateStatefulRuleURL(ruleID int) string {
142+
return fmt.Sprintf(UpdateStatefulRulePath, client.config.url, ruleID)
143+
}
144+
145+
func (client *Client) DeleteStatefulRuleURL(ruleID int) string {
146+
return fmt.Sprintf(DeleteStatefulRulePath, client.config.url, ruleID)
147+
}
148+
149+
func (client *Client) GetStatefulRuleGroupURL(ruleName string, ruleType string) string {
150+
return fmt.Sprintf(GetStatefulRuleGroupPath, client.config.url, url.QueryEscape(ruleName), url.QueryEscape(ruleType))
151+
}
152+
153+
func (client *Client) CreateStatefulRule(ctx context.Context, rule Rule) (Rule, error) {
154+
payload, err := Marshal(rule)
155+
if err != nil {
156+
return Rule{}, err
157+
}
158+
response, err := client.requester.Request(ctx, http.MethodPost, client.CreateStatefulRuleURL(), payload)
159+
if err != nil {
160+
return Rule{}, err
161+
}
162+
defer response.Body.Close()
163+
164+
if response.StatusCode != http.StatusOK {
165+
return Rule{}, client.ErrorFromResponse(response)
166+
}
167+
168+
return Unmarshal[Rule](response.Body)
169+
}
170+
171+
func (client *Client) UpdateStatefulRule(ctx context.Context, rule Rule) (Rule, error) {
172+
payload, err := Marshal(rule)
173+
if err != nil {
174+
return Rule{}, err
175+
}
176+
177+
response, err := client.requester.Request(ctx, http.MethodPut, client.UpdateStatefulRuleURL(rule.ID), payload)
178+
if err != nil {
179+
return Rule{}, err
180+
}
181+
182+
defer response.Body.Close()
183+
184+
if response.StatusCode != http.StatusOK {
185+
return Rule{}, client.ErrorFromResponse(response)
186+
}
187+
188+
return Unmarshal[Rule](response.Body)
189+
}
190+
191+
func (client *Client) DeleteStatefulRule(ctx context.Context, ruleID int) error {
192+
fmt.Println("deleting stateful rule")
193+
response, err := client.requester.Request(ctx, http.MethodDelete, client.DeleteStatefulRuleURL(ruleID), nil)
194+
if err != nil {
195+
return err
196+
}
197+
defer response.Body.Close()
198+
199+
if response.StatusCode != http.StatusNoContent && response.StatusCode != http.StatusOK {
200+
return client.ErrorFromResponse(response)
201+
}
202+
203+
return err
204+
}
205+
206+
func (client *Client) GetStatefulRuleGroup(ctx context.Context, ruleName string, ruleType string) ([]Rule, error) {
207+
response, err := client.requester.Request(ctx, http.MethodGet, client.GetStatefulRuleGroupURL(ruleName, ruleType), nil)
208+
if err != nil {
209+
return []Rule{}, err
210+
}
211+
defer response.Body.Close()
212+
213+
if response.StatusCode != http.StatusOK {
214+
return []Rule{}, client.ErrorFromResponse(response)
215+
}
216+
217+
return Unmarshal[[]Rule](response.Body)
218+
}

sysdig/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ func (p *SysdigProvider) Provider() *schema.Provider {
148148
"sysdig_secure_rule_process": resourceSysdigSecureRuleProcess(),
149149
"sysdig_secure_rule_syscall": resourceSysdigSecureRuleSyscall(),
150150
"sysdig_secure_rule_falco": resourceSysdigSecureRuleFalco(),
151+
"sysdig_secure_rule_stateful": resourceSysdigSecureStatefulRule(),
151152
"sysdig_secure_team": resourceSysdigSecureTeam(),
152153
"sysdig_secure_list": resourceSysdigSecureList(),
153154
"sysdig_secure_macro": resourceSysdigSecureMacro(),

sysdig/resource_sysdig_secure_policy.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ var validatePolicyType = validation.StringInSlice([]string{
3333
"aws_machine_learning",
3434
"machine_learning",
3535
"guardduty",
36+
"awscloudtrail_stateful",
3637
}, false)
3738

3839
func resourceSysdigSecurePolicy() *schema.Resource {

0 commit comments

Comments
 (0)