Skip to content

Commit 0d528b2

Browse files
authored
refactor(lists): refactor list to use v2 client (#310)
1 parent 1776250 commit 0d528b2

File tree

8 files changed

+139
-131
lines changed

8 files changed

+139
-131
lines changed

sysdig/internal/client/secure/client.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ type SysdigSecureClient interface {
2222
UpdateRule(context.Context, Rule) (Rule, error)
2323
DeleteRule(context.Context, int) error
2424

25-
CreateList(context.Context, List) (List, error)
26-
GetListById(context.Context, int) (List, error)
27-
DeleteList(context.Context, int) error
28-
UpdateList(context.Context, List) (List, error)
29-
3025
CreateVulnerabilityExceptionList(context.Context, *VulnerabilityExceptionList) (*VulnerabilityExceptionList, error)
3126
GetVulnerabilityExceptionListByID(context.Context, string) (*VulnerabilityExceptionList, error)
3227
DeleteVulnerabilityExceptionList(context.Context, string) error

sysdig/internal/client/secure/lists.go

Lines changed: 0 additions & 87 deletions
This file was deleted.

sysdig/internal/client/secure/models.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -140,29 +140,6 @@ func RuleFromJSON(body []byte) (rule Rule, err error) {
140140
return
141141
}
142142

143-
// -------- List --------
144-
145-
type List struct {
146-
Name string `json:"name"`
147-
Items Items `json:"items"`
148-
Append bool `json:"append"`
149-
ID int `json:"id,omitempty"`
150-
Version int `json:"version,omitempty"`
151-
}
152-
type Items struct {
153-
Items []string `json:"items"`
154-
}
155-
156-
func (l *List) ToJSON() io.Reader {
157-
payload, _ := json.Marshal(l)
158-
return bytes.NewBuffer(payload)
159-
}
160-
161-
func ListFromJSON(body []byte) (list List, err error) {
162-
err = json.Unmarshal(body, &list)
163-
return
164-
}
165-
166143
// -------- VulnerabilityExceptionList --------
167144

168145
type VulnerabilityExceptionList struct {

sysdig/internal/client/v2/list.go

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package v2
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"net/http"
7+
)
8+
9+
const (
10+
CreateListPath = "%s/api/secure/falco/lists"
11+
GetListPath = "%s/api/secure/falco/lists/%d"
12+
UpdateListPath = "%s/api/secure/falco/lists/%d"
13+
DeleteListPath = "%s/api/secure/falco/lists/%d"
14+
)
15+
16+
type ListInterface interface {
17+
CreateList(ctx context.Context, list List) (List, error)
18+
GetListByID(ctx context.Context, id int) (List, error)
19+
UpdateList(ctx context.Context, list List) (List, error)
20+
DeleteList(ctx context.Context, id int) error
21+
}
22+
23+
func (client *Client) CreateList(ctx context.Context, list List) (List, error) {
24+
payload, err := Marshal[List](list)
25+
if err != nil {
26+
return List{}, err
27+
}
28+
29+
response, err := client.requester.Request(ctx, http.MethodPost, client.CreateListURL(), payload)
30+
if err != nil {
31+
return List{}, err
32+
}
33+
defer response.Body.Close()
34+
35+
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
36+
return List{}, client.ErrorFromResponse(response)
37+
}
38+
39+
return Unmarshal[List](response.Body)
40+
}
41+
42+
func (client *Client) GetListByID(ctx context.Context, id int) (List, error) {
43+
response, err := client.requester.Request(ctx, http.MethodGet, client.GetListURL(id), nil)
44+
if err != nil {
45+
return List{}, err
46+
}
47+
defer response.Body.Close()
48+
49+
if response.StatusCode != http.StatusOK {
50+
return List{}, client.ErrorFromResponse(response)
51+
}
52+
53+
list, err := Unmarshal[List](response.Body)
54+
if err != nil {
55+
return List{}, err
56+
}
57+
58+
if list.Version == 0 {
59+
return List{}, fmt.Errorf("list with ID: %d does not exists", id)
60+
}
61+
62+
return list, nil
63+
}
64+
65+
func (client *Client) UpdateList(ctx context.Context, list List) (List, error) {
66+
payload, err := Marshal[List](list)
67+
if err != nil {
68+
return List{}, err
69+
}
70+
71+
response, err := client.requester.Request(ctx, http.MethodPut, client.UpdateListURL(list.ID), payload)
72+
if err != nil {
73+
return List{}, err
74+
}
75+
defer response.Body.Close()
76+
77+
if response.StatusCode != http.StatusOK {
78+
return List{}, client.ErrorFromResponse(response)
79+
}
80+
81+
return Unmarshal[List](response.Body)
82+
}
83+
84+
func (client *Client) DeleteList(ctx context.Context, id int) error {
85+
response, err := client.requester.Request(ctx, http.MethodDelete, client.DeleteListURL(id), nil)
86+
if err != nil {
87+
return err
88+
}
89+
defer response.Body.Close()
90+
91+
if response.StatusCode != http.StatusNoContent && response.StatusCode != http.StatusOK {
92+
return client.ErrorFromResponse(response)
93+
}
94+
95+
return nil
96+
}
97+
98+
func (client *Client) CreateListURL() string {
99+
return fmt.Sprintf(CreateListPath, client.config.url)
100+
}
101+
102+
func (client *Client) GetListURL(id int) string {
103+
return fmt.Sprintf(GetListPath, client.config.url, id)
104+
}
105+
106+
func (client *Client) UpdateListURL(id int) string {
107+
return fmt.Sprintf(UpdateListPath, client.config.url, id)
108+
}
109+
110+
func (client *Client) DeleteListURL(id int) string {
111+
return fmt.Sprintf(DeleteListPath, client.config.url, id)
112+
}

sysdig/internal/client/v2/model.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,18 @@ type Monitor struct {
177177
StdDevFactor float64 `json:"stdDevFactor"`
178178
}
179179

180+
type List struct {
181+
Name string `json:"name"`
182+
Items Items `json:"items"`
183+
Append bool `json:"append"`
184+
ID int `json:"id,omitempty"`
185+
Version int `json:"version,omitempty"`
186+
}
187+
188+
type Items struct {
189+
Items []string `json:"items"`
190+
}
191+
180192
type Macro struct {
181193
ID int `json:"id,omitempty"`
182194
Version int `json:"version,omitempty"`

sysdig/internal/client/v2/sysdig.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type SysdigMonitor interface {
2828

2929
type SysdigSecure interface {
3030
SysdigCommon
31+
ListInterface
3132
MacroInterface
3233
}
3334

sysdig/resource_sysdig_secure_list.go

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

33
import (
44
"context"
5+
v2 "github.com/draios/terraform-provider-sysdig/sysdig/internal/client/v2"
56
"strconv"
67
"strings"
78
"time"
89

910
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11-
12-
"github.com/draios/terraform-provider-sysdig/sysdig/internal/client/secure"
1312
)
1413

1514
func resourceSysdigSecureList() *schema.Resource {
@@ -57,8 +56,12 @@ func resourceSysdigSecureList() *schema.Resource {
5756
}
5857
}
5958

59+
func getSecureListClient(c SysdigClients) (v2.ListInterface, error) {
60+
return c.sysdigSecureClientV2()
61+
}
62+
6063
func resourceSysdigListCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
61-
client, err := meta.(SysdigClients).sysdigSecureClient()
64+
client, err := getSecureListClient(meta.(SysdigClients))
6265
if err != nil {
6366
return diag.FromErr(err)
6467
}
@@ -76,7 +79,7 @@ func resourceSysdigListCreate(ctx context.Context, d *schema.ResourceData, meta
7679
}
7780

7881
func resourceSysdigListUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
79-
client, err := meta.(SysdigClients).sysdigSecureClient()
82+
client, err := getSecureListClient(meta.(SysdigClients))
8083
if err != nil {
8184
return diag.FromErr(err)
8285
}
@@ -95,13 +98,13 @@ func resourceSysdigListUpdate(ctx context.Context, d *schema.ResourceData, meta
9598
}
9699

97100
func resourceSysdigListRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
98-
client, err := meta.(SysdigClients).sysdigSecureClient()
101+
client, err := getSecureListClient(meta.(SysdigClients))
99102
if err != nil {
100103
return diag.FromErr(err)
101104
}
102105

103106
id, _ := strconv.Atoi(d.Id())
104-
list, err := client.GetListById(ctx, id)
107+
list, err := client.GetListByID(ctx, id)
105108

106109
if err != nil {
107110
d.SetId("")
@@ -116,7 +119,7 @@ func resourceSysdigListRead(ctx context.Context, d *schema.ResourceData, meta in
116119
}
117120

118121
func resourceSysdigListDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
119-
client, err := meta.(SysdigClients).sysdigSecureClient()
122+
client, err := getSecureListClient(meta.(SysdigClients))
120123
if err != nil {
121124
return diag.FromErr(err)
122125
}
@@ -130,11 +133,11 @@ func resourceSysdigListDelete(ctx context.Context, d *schema.ResourceData, meta
130133
return nil
131134
}
132135

133-
func listFromResourceData(d *schema.ResourceData) secure.List {
134-
list := secure.List{
136+
func listFromResourceData(d *schema.ResourceData) v2.List {
137+
list := v2.List{
135138
Name: d.Get("name").(string),
136139
Append: d.Get("append").(bool),
137-
Items: secure.Items{Items: []string{}},
140+
Items: v2.Items{Items: []string{}},
138141
}
139142

140143
items := d.Get("items").([]interface{})

sysdig/resource_sysdig_secure_list_test.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package sysdig_test
44

55
import (
66
"fmt"
7-
"os"
87
"testing"
98

109
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
@@ -19,11 +18,7 @@ func TestAccList(t *testing.T) {
1918
fixedRandomText := rText()
2019

2120
resource.ParallelTest(t, resource.TestCase{
22-
PreCheck: func() {
23-
if v := os.Getenv("SYSDIG_SECURE_API_TOKEN"); v == "" {
24-
t.Fatal("SYSDIG_SECURE_API_TOKEN must be set for acceptance tests")
25-
}
26-
},
21+
PreCheck: preCheckAnyEnv(t, SysdigSecureApiTokenEnv),
2722
ProviderFactories: map[string]func() (*schema.Provider, error){
2823
"sysdig": func() (*schema.Provider, error) {
2924
return sysdig.Provider(), nil

0 commit comments

Comments
 (0)