Skip to content

Commit c0683f7

Browse files
author
Ben Lucas
authored
feat(policies): Data source for sysdig_secure_rule_process (#350)
* add data source for sysdig_secure_rule_process * add tests for data source sysdig_secure_rule_process * add documentation for data source sysdig_secure_rule_process
1 parent 70b1801 commit c0683f7

File tree

6 files changed

+138
-2
lines changed

6 files changed

+138
-2
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package sysdig
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
v2 "github.com/draios/terraform-provider-sysdig/sysdig/internal/client/v2"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
)
11+
12+
func dataSourceSysdigSecureRuleProcess() *schema.Resource {
13+
timeout := 5 * time.Minute
14+
15+
return &schema.Resource{
16+
ReadContext: dataSourceSysdigRuleProcessRead,
17+
18+
Timeouts: &schema.ResourceTimeout{
19+
Read: schema.DefaultTimeout(timeout),
20+
},
21+
22+
Schema: createRuleDataSourceSchema(map[string]*schema.Schema{
23+
"matching": {
24+
Type: schema.TypeBool,
25+
Computed: true,
26+
},
27+
"processes": {
28+
Type: schema.TypeList,
29+
Computed: true,
30+
Elem: &schema.Schema{
31+
Type: schema.TypeString,
32+
},
33+
},
34+
}),
35+
}
36+
}
37+
38+
func dataSourceSysdigRuleProcessRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
39+
return commonDataSourceSysdigRuleRead(ctx, d, meta, v2.RuleTypeProcess, processRuleDataSourceToResourceData)
40+
}
41+
42+
func processRuleDataSourceToResourceData(rule v2.Rule, d *schema.ResourceData) diag.Diagnostics {
43+
if rule.Details.Processes == nil {
44+
return diag.Errorf("no process data for a process rule")
45+
}
46+
_ = d.Set("matching", rule.Details.Processes.MatchItems)
47+
_ = d.Set("processes", rule.Details.Processes.Items)
48+
49+
return nil
50+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
//go:build tf_acc_sysdig || tf_acc_sysdig_secure || tf_acc_policies
2+
3+
package sysdig_test
4+
5+
import (
6+
"fmt"
7+
"os"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
11+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
13+
14+
"github.com/draios/terraform-provider-sysdig/sysdig"
15+
)
16+
17+
func TestAccRuleProcessDataSource(t *testing.T) {
18+
rText := func() string { return acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum) }
19+
20+
resource.ParallelTest(t, resource.TestCase{
21+
PreCheck: func() {
22+
if v := os.Getenv("SYSDIG_SECURE_API_TOKEN"); v == "" {
23+
t.Fatal("SYSDIG_SECURE_API_TOKEN must be set for acceptance tests")
24+
}
25+
},
26+
ProviderFactories: map[string]func() (*schema.Provider, error){
27+
"sysdig": func() (*schema.Provider, error) {
28+
return sysdig.Provider(), nil
29+
},
30+
},
31+
Steps: []resource.TestStep{
32+
{
33+
Config: ruleProcessDataSource(rText()),
34+
},
35+
},
36+
})
37+
}
38+
39+
func ruleProcessDataSource(name string) string {
40+
return fmt.Sprintf(`
41+
%s
42+
43+
data "sysdig_secure_rule_process" "data_sample" {
44+
name = "TERRAFORM TEST %s"
45+
depends_on = [ sysdig_secure_rule_process.foo ]
46+
}
47+
`, ruleProcessWithName(name), name)
48+
}

sysdig/internal/client/v2/model.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ const (
263263
RuleTypeFalco = "FALCO"
264264
RuleTypeFilesystem = "FILESYSTEM"
265265
RuleTypeNetwork = "NETWORK"
266+
RuleTypeProcess = "PROCESS"
266267
)
267268

268269
type Details struct {

sysdig/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ func Provider() *schema.Provider {
135135
"sysdig_secure_rule_falco_count": dataSourceSysdigSecureRuleFalcoCount(),
136136
"sysdig_secure_rule_filesystem": dataSourceSysdigSecureRuleFilesystem(),
137137
"sysdig_secure_rule_network": dataSourceSysdigSecureRuleNetwork(),
138+
"sysdig_secure_rule_process": dataSourceSysdigSecureRuleProcess(),
138139

139140
"sysdig_current_user": dataSourceSysdigCurrentUser(),
140141
"sysdig_user": dataSourceSysdigUser(),

sysdig/resource_sysdig_secure_rule_process.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package sysdig
22

33
import (
44
"context"
5-
v2 "github.com/draios/terraform-provider-sysdig/sysdig/internal/client/v2"
65
"strconv"
76
"time"
87

8+
v2 "github.com/draios/terraform-provider-sysdig/sysdig/internal/client/v2"
9+
910
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1011

1112
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -134,7 +135,7 @@ func resourceSysdigRuleProcessDelete(ctx context.Context, d *schema.ResourceData
134135

135136
func resourceSysdigRuleProcessFromResourceData(d *schema.ResourceData) v2.Rule {
136137
rule := ruleFromResourceData(d)
137-
rule.Details.RuleType = "PROCESS"
138+
rule.Details.RuleType = v2.RuleTypeProcess
138139

139140
rule.Details.Processes = &v2.Processes{}
140141
rule.Details.Processes.MatchItems = d.Get("matching").(bool)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
subcategory: "Sysdig Secure"
3+
layout: "sysdig"
4+
page_title: "Sysdig: sysdig_secure_rule_process"
5+
description: |-
6+
Retrieves a Sysdig Secure Process Rule.
7+
---
8+
9+
# Data Source: sysdig_secure_rule_process
10+
11+
Retrieves the information of an existing Sysdig Secure Process Rule.
12+
13+
-> **Note:** Sysdig Terraform Provider is under rapid development at this point. If you experience any issue or discrepancy while using it, please make sure you have the latest version. If the issue persists, or you have a Feature Request to support an additional set of resources, please open a [new issue](https://github.com/sysdiglabs/terraform-provider-sysdig/issues/new) in the GitHub repository.
14+
15+
## Example Usage
16+
17+
```terraform
18+
data "sysdig_secure_rule_process" "example" {
19+
name = "Launch Suspicious Network Tool in Container"
20+
}
21+
```
22+
23+
## Argument Reference
24+
25+
* `name` - (Required) The name of the Secure rule to retrieve.
26+
27+
## Attributes Reference
28+
29+
In addition to the argument above, the following attributes are exported:
30+
31+
* `description` - The description of Secure rule.
32+
* `tags` - A list of tags for this rule.
33+
* `matching` - Defines if the process name matches or not with the provided list.
34+
* `processes` - List of processes to match.
35+
* `version` - Current version of the resource in Sysdig Secure.

0 commit comments

Comments
 (0)