Skip to content

Commit 2206171

Browse files
authored
refactor(cloudaccount): remove monitor client, refactor to v2 (#319)
1 parent 1f5c356 commit 2206171

File tree

7 files changed

+132
-132
lines changed

7 files changed

+132
-132
lines changed

sysdig/internal/client/monitor/client.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ type SysdigMonitorClient interface {
4242
CreateDashboard(context.Context, *model.Dashboard) (*model.Dashboard, error)
4343
UpdateDashboard(context.Context, *model.Dashboard) (*model.Dashboard, error)
4444
DeleteDashboard(context.Context, int) error
45-
46-
GetCloudAccountById(context.Context, int) (*CloudAccount, error)
47-
CreateCloudAccount(context.Context, *CloudAccount) (*CloudAccount, error)
48-
UpdateCloudAccount(context.Context, int, *CloudAccount) (*CloudAccount, error)
49-
DeleteCloudAccountById(context.Context, int) error
5045
}
5146

5247
func WithExtraHeaders(client SysdigMonitorClient, extraHeaders map[string]string) SysdigMonitorClient {

sysdig/internal/client/monitor/cloud_account.go

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

sysdig/internal/client/monitor/models.go

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,9 @@
11
package monitor
22

33
import (
4-
"bytes"
54
"encoding/json"
6-
"io"
75
)
86

9-
type CloudAccountCredentials struct {
10-
AccountId string `json:"accountId"`
11-
}
12-
13-
type CloudAccount struct {
14-
Id int `json:"id"`
15-
Platform string `json:"platform"`
16-
IntegrationType string `json:"integrationType"`
17-
Credentials CloudAccountCredentials `json:"credentials"`
18-
AdditionalOptions string `json:"additionalOptions"`
19-
}
20-
21-
type cloudAccountWrapper struct {
22-
CloudAccount CloudAccount `json:"provider"`
23-
}
24-
25-
func CloudAccountFromJSON(body []byte) *CloudAccount {
26-
var result cloudAccountWrapper
27-
_ = json.Unmarshal(body, &result)
28-
29-
return &result.CloudAccount
30-
}
31-
32-
func CloudAccountToJSON(providerInfo *CloudAccount) io.Reader {
33-
payload, _ := json.Marshal(*providerInfo)
34-
return bytes.NewBuffer(payload)
35-
}
36-
377
// -------- Notification Channels --------
388

399
type NotificationChannelOptions struct {

sysdig/internal/client/v2/cloud_account.go

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const (
1212
cloudAccountPath = "%s/api/cloud/v2/accounts/%s"
1313
cloudAccountWithExternalIDPath = "%s/api/cloud/v2/accounts/%s?includeExternalID=true"
1414
trustedCloudIdentityPath = "%s/api/cloud/v2/%s/trustedIdentity"
15+
providersPath = "%v/api/v2/providers"
1516
)
1617

1718
type CloudAccountSecureInterface interface {
@@ -23,6 +24,14 @@ type CloudAccountSecureInterface interface {
2324
GetTrustedCloudIdentitySecure(ctx context.Context, provider string) (string, error)
2425
}
2526

27+
type CloudAccountMonitorInterface interface {
28+
Base
29+
CreateCloudAccountMonitor(ctx context.Context, provider *CloudAccountMonitor) (*CloudAccountMonitor, error)
30+
UpdateCloudAccountMonitor(ctx context.Context, id int, provider *CloudAccountMonitor) (*CloudAccountMonitor, error)
31+
GetCloudAccountMonitor(ctx context.Context, id int) (*CloudAccountMonitor, error)
32+
DeleteCloudAccountMonitor(ctx context.Context, id int) error
33+
}
34+
2635
func (client *Client) CreateCloudAccountSecure(ctx context.Context, cloudAccount *CloudAccountSecure) (*CloudAccountSecure, error) {
2736
payload, err := Marshal(cloudAccount)
2837
if err != nil {
@@ -121,3 +130,92 @@ func (client *Client) cloudAccountURL(accountID string, includeExternalID bool)
121130
func (client *Client) trustedCloudIdentityURL(provider string) string {
122131
return fmt.Sprintf(trustedCloudIdentityPath, client.config.url, provider)
123132
}
133+
134+
func (client *Client) CreateCloudAccountMonitor(ctx context.Context, provider *CloudAccountMonitor) (*CloudAccountMonitor, error) {
135+
payload, err := Marshal(provider)
136+
if err != nil {
137+
return nil, err
138+
}
139+
140+
response, err := client.requester.Request(ctx, http.MethodPost, client.getProvidersURL(), payload)
141+
if err != nil {
142+
return nil, err
143+
}
144+
defer response.Body.Close()
145+
146+
if response.StatusCode != http.StatusCreated {
147+
return nil, client.ErrorFromResponse(response)
148+
}
149+
150+
wrapper, err := Unmarshal[cloudAccountWrapperMonitor](response.Body)
151+
if err != nil {
152+
return nil, err
153+
}
154+
155+
return &wrapper.CloudAccount, nil
156+
}
157+
158+
func (client *Client) UpdateCloudAccountMonitor(ctx context.Context, id int, provider *CloudAccountMonitor) (*CloudAccountMonitor, error) {
159+
payload, err := Marshal(provider)
160+
if err != nil {
161+
return nil, err
162+
}
163+
164+
response, err := client.requester.Request(ctx, http.MethodPut, client.getProviderURL(id), payload)
165+
if err != nil {
166+
return nil, err
167+
}
168+
defer response.Body.Close()
169+
170+
if response.StatusCode != http.StatusOK {
171+
return nil, client.ErrorFromResponse(response)
172+
}
173+
174+
wrapper, err := Unmarshal[cloudAccountWrapperMonitor](response.Body)
175+
if err != nil {
176+
return nil, err
177+
}
178+
179+
return &wrapper.CloudAccount, nil
180+
}
181+
182+
func (client *Client) GetCloudAccountMonitor(ctx context.Context, id int) (*CloudAccountMonitor, error) {
183+
response, err := client.requester.Request(ctx, http.MethodGet, client.getProviderURL(id), nil)
184+
if err != nil {
185+
return nil, err
186+
}
187+
defer response.Body.Close()
188+
189+
if response.StatusCode != http.StatusOK {
190+
return nil, client.ErrorFromResponse(response)
191+
}
192+
193+
wrapper, err := Unmarshal[cloudAccountWrapperMonitor](response.Body)
194+
if err != nil {
195+
return nil, err
196+
}
197+
198+
return &wrapper.CloudAccount, nil
199+
}
200+
201+
func (client *Client) DeleteCloudAccountMonitor(ctx context.Context, id int) error {
202+
response, err := client.requester.Request(ctx, http.MethodDelete, client.getProviderURL(id), nil)
203+
if err != nil {
204+
return err
205+
}
206+
defer response.Body.Close()
207+
208+
if response.StatusCode != http.StatusOK {
209+
return client.ErrorFromResponse(response)
210+
}
211+
212+
return nil
213+
}
214+
215+
func (client *Client) getProviderURL(id int) string {
216+
return fmt.Sprintf("%v/%v", client.getProvidersURL(), id)
217+
}
218+
219+
func (client *Client) getProvidersURL() string {
220+
return fmt.Sprintf(providersPath, client.config.url)
221+
}

sysdig/internal/client/v2/model.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,3 +378,19 @@ type ScanningPolicyAssignmentImage struct {
378378
Type string `json:"type"`
379379
Value string `json:"value"`
380380
}
381+
382+
type CloudAccountCredentialsMonitor struct {
383+
AccountId string `json:"accountId"`
384+
}
385+
386+
type CloudAccountMonitor struct {
387+
Id int `json:"id"`
388+
Platform string `json:"platform"`
389+
IntegrationType string `json:"integrationType"`
390+
Credentials CloudAccountCredentialsMonitor `json:"credentials"`
391+
AdditionalOptions string `json:"additionalOptions"`
392+
}
393+
394+
type cloudAccountWrapperMonitor struct {
395+
CloudAccount CloudAccountMonitor `json:"provider"`
396+
}

sysdig/internal/client/v2/sysdig.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type SysdigCommon interface {
2424
type SysdigMonitor interface {
2525
SysdigCommon
2626
MonitorCommon
27+
CloudAccountMonitorInterface
2728
}
2829

2930
type SysdigSecure interface {

sysdig/resource_sysdig_monitor_cloud_account.go

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

33
import (
44
"context"
5-
"github.com/draios/terraform-provider-sysdig/sysdig/internal/client/monitor"
5+
v2 "github.com/draios/terraform-provider-sysdig/sysdig/internal/client/v2"
66
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
77
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
88
"strconv"
@@ -47,15 +47,19 @@ func resourceSysdigMonitorCloudAccount() *schema.Resource {
4747
}
4848
}
4949

50+
func getMonitorCloudAccountClient(c SysdigClients) (v2.CloudAccountMonitorInterface, error) {
51+
return c.sysdigMonitorClientV2()
52+
}
53+
5054
func resourceSysdigMonitorCloudAccountCreate(ctx context.Context, data *schema.ResourceData, i interface{}) diag.Diagnostics {
51-
client, err := i.(SysdigClients).sysdigMonitorClient()
55+
client, err := getMonitorCloudAccountClient(i.(SysdigClients))
5256
if err != nil {
5357
return diag.FromErr(err)
5458
}
5559

5660
cloudAccount := monitorCloudAccountFromResourceData(data)
5761

58-
cloudAccountCreated, err := client.CreateCloudAccount(ctx, &cloudAccount)
62+
cloudAccountCreated, err := client.CreateCloudAccountMonitor(ctx, &cloudAccount)
5963
if err != nil {
6064
return diag.FromErr(err)
6165
}
@@ -66,7 +70,7 @@ func resourceSysdigMonitorCloudAccountCreate(ctx context.Context, data *schema.R
6670
}
6771

6872
func resourceSysdigMonitorCloudAccountDelete(ctx context.Context, data *schema.ResourceData, i interface{}) diag.Diagnostics {
69-
client, err := i.(SysdigClients).sysdigMonitorClient()
73+
client, err := getMonitorCloudAccountClient(i.(SysdigClients))
7074
if err != nil {
7175
return diag.FromErr(err)
7276
}
@@ -76,7 +80,7 @@ func resourceSysdigMonitorCloudAccountDelete(ctx context.Context, data *schema.R
7680
return diag.FromErr(err)
7781
}
7882

79-
err = client.DeleteCloudAccountById(ctx, id)
83+
err = client.DeleteCloudAccountMonitor(ctx, id)
8084
if err != nil {
8185
return diag.FromErr(err)
8286
}
@@ -85,7 +89,7 @@ func resourceSysdigMonitorCloudAccountDelete(ctx context.Context, data *schema.R
8589
}
8690

8791
func resourceSysdigMonitorCloudAccountRead(ctx context.Context, data *schema.ResourceData, i interface{}) diag.Diagnostics {
88-
client, err := i.(SysdigClients).sysdigMonitorClient()
92+
client, err := getMonitorCloudAccountClient(i.(SysdigClients))
8993
if err != nil {
9094
return diag.FromErr(err)
9195
}
@@ -95,7 +99,7 @@ func resourceSysdigMonitorCloudAccountRead(ctx context.Context, data *schema.Res
9599
return diag.FromErr(err)
96100
}
97101

98-
cloudAccount, err := client.GetCloudAccountById(ctx, id)
102+
cloudAccount, err := client.GetCloudAccountMonitor(ctx, id)
99103
if err != nil {
100104
return diag.FromErr(err)
101105
}
@@ -109,7 +113,7 @@ func resourceSysdigMonitorCloudAccountRead(ctx context.Context, data *schema.Res
109113
}
110114

111115
func resourceSysdigMonitorCloudAccountUpdate(ctx context.Context, data *schema.ResourceData, i interface{}) diag.Diagnostics {
112-
client, err := i.(SysdigClients).sysdigMonitorClient()
116+
client, err := getMonitorCloudAccountClient(i.(SysdigClients))
113117
if err != nil {
114118
return diag.FromErr(err)
115119
}
@@ -121,26 +125,26 @@ func resourceSysdigMonitorCloudAccountUpdate(ctx context.Context, data *schema.R
121125
return diag.FromErr(err)
122126
}
123127

124-
_, err = client.UpdateCloudAccount(ctx, id, &cloudAccount)
128+
_, err = client.UpdateCloudAccountMonitor(ctx, id, &cloudAccount)
125129
if err != nil {
126130
return diag.FromErr(err)
127131
}
128132

129133
return nil
130134
}
131135

132-
func monitorCloudAccountFromResourceData(data *schema.ResourceData) monitor.CloudAccount {
133-
return monitor.CloudAccount{
136+
func monitorCloudAccountFromResourceData(data *schema.ResourceData) v2.CloudAccountMonitor {
137+
return v2.CloudAccountMonitor{
134138
Platform: data.Get("cloud_provider").(string),
135139
IntegrationType: data.Get("integration_type").(string),
136140
AdditionalOptions: data.Get("additional_options").(string),
137-
Credentials: monitor.CloudAccountCredentials{
141+
Credentials: v2.CloudAccountCredentialsMonitor{
138142
AccountId: data.Get("account_id").(string),
139143
},
140144
}
141145
}
142146

143-
func monitorCloudAccountToResourceData(data *schema.ResourceData, cloudAccount *monitor.CloudAccount) error {
147+
func monitorCloudAccountToResourceData(data *schema.ResourceData, cloudAccount *v2.CloudAccountMonitor) error {
144148
err := data.Set("cloud_provider", cloudAccount.Platform)
145149
if err != nil {
146150
return err

0 commit comments

Comments
 (0)