Skip to content

Commit ccc0ded

Browse files
(secure-onboarding) Handle and populate errors from secure backend (#455)
Fix summary: ------------- Currently any of the backend API errors are returned by the provider as: "Error: Empty Summary: This is always a bug in the provider and should be reported to the provider developers." This is not useful at all. Hence, surfacing up the errors coming from backend during Create/Read/Update/Delete operations for secure_cloud_auth_account and secure_organization resources. Testing done: --------------- Tested on an actual setup that errors are populated appropriately.
1 parent dd84530 commit ccc0ded

File tree

4 files changed

+34
-27
lines changed

4 files changed

+34
-27
lines changed

sysdig/internal/client/v2/cloudauth.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,34 @@ const (
1919

2020
type CloudauthAccountSecureInterface interface {
2121
Base
22-
CreateCloudauthAccountSecure(ctx context.Context, cloudAccount *CloudauthAccountSecure) (*CloudauthAccountSecure, error)
22+
CreateCloudauthAccountSecure(ctx context.Context, cloudAccount *CloudauthAccountSecure) (*CloudauthAccountSecure, string, error)
2323
GetCloudauthAccountSecure(ctx context.Context, accountID string) (*CloudauthAccountSecure, string, error)
2424
DeleteCloudauthAccountSecure(ctx context.Context, accountID string) (string, error)
2525
UpdateCloudauthAccountSecure(ctx context.Context, accountID string, cloudAccount *CloudauthAccountSecure) (*CloudauthAccountSecure, string, error)
2626
}
2727

28-
func (client *Client) CreateCloudauthAccountSecure(ctx context.Context, cloudAccount *CloudauthAccountSecure) (*CloudauthAccountSecure, error) {
28+
func (client *Client) CreateCloudauthAccountSecure(ctx context.Context, cloudAccount *CloudauthAccountSecure) (*CloudauthAccountSecure, string, error) {
2929
payload, err := client.marshalProto(cloudAccount)
3030
if err != nil {
31-
return nil, err
31+
return nil, "", err
3232
}
3333

3434
response, err := client.requester.Request(ctx, http.MethodPost, client.cloudauthAccountsURL(), payload)
3535
if err != nil {
36-
return nil, err
36+
return nil, "", err
3737
}
3838
defer response.Body.Close()
3939

4040
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated {
41-
err = client.ErrorFromResponse(response)
42-
return nil, err
41+
errStatus, err := client.ErrorAndStatusFromResponse(response)
42+
return nil, errStatus, err
4343
}
4444

45-
return client.unmarshalProto(response.Body)
45+
cloudauthAccount, err := client.unmarshalProto(response.Body)
46+
if err != nil {
47+
return nil, "", err
48+
}
49+
return cloudauthAccount, "", nil
4650
}
4751

4852
func (client *Client) GetCloudauthAccountSecure(ctx context.Context, accountID string) (*CloudauthAccountSecure, string, error) {

sysdig/internal/client/v2/organization.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,34 @@ const (
1717

1818
type OrganizationSecureInterface interface {
1919
Base
20-
CreateOrganizationSecure(ctx context.Context, org *OrganizationSecure) (*OrganizationSecure, error)
20+
CreateOrganizationSecure(ctx context.Context, org *OrganizationSecure) (*OrganizationSecure, string, error)
2121
GetOrganizationSecure(ctx context.Context, orgID string) (*OrganizationSecure, string, error)
2222
DeleteOrganizationSecure(ctx context.Context, orgID string) (string, error)
2323
UpdateOrganizationSecure(ctx context.Context, orgID string, org *OrganizationSecure) (*OrganizationSecure, string, error)
2424
}
2525

26-
func (client *Client) CreateOrganizationSecure(ctx context.Context, org *OrganizationSecure) (*OrganizationSecure, error) {
26+
func (client *Client) CreateOrganizationSecure(ctx context.Context, org *OrganizationSecure) (*OrganizationSecure, string, error) {
2727
payload, err := client.marshalOrg(org)
2828
if err != nil {
29-
return nil, err
29+
return nil, "", err
3030
}
3131

3232
response, err := client.requester.Request(ctx, http.MethodPost, client.organizationsURL(), payload)
3333
if err != nil {
34-
return nil, err
34+
return nil, "", err
3535
}
3636
defer response.Body.Close()
3737

3838
if response.StatusCode != http.StatusOK && response.StatusCode != http.StatusCreated && response.StatusCode != http.StatusAccepted {
39-
err = client.ErrorFromResponse(response)
40-
return nil, err
39+
errStatus, err := client.ErrorAndStatusFromResponse(response)
40+
return nil, errStatus, err
4141
}
4242

43-
return client.unmarshalOrg(response.Body)
43+
organization, err := client.unmarshalOrg(response.Body)
44+
if err != nil {
45+
return nil, "", err
46+
}
47+
return organization, "", nil
4448
}
4549

4650
func (client *Client) GetOrganizationSecure(ctx context.Context, orgID string) (*OrganizationSecure, string, error) {

sysdig/resource_sysdig_secure_cloud_auth_account.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,9 @@ func resourceSysdigSecureCloudauthAccountCreate(ctx context.Context, data *schem
181181
return diag.FromErr(err)
182182
}
183183

184-
cloudauthAccount, err := client.CreateCloudauthAccountSecure(ctx, cloudauthAccountFromResourceData(data))
184+
cloudauthAccount, errStatus, err := client.CreateCloudauthAccountSecure(ctx, cloudauthAccountFromResourceData(data))
185185
if err != nil {
186-
return diag.FromErr(err)
186+
return diag.Errorf("Error creating resource: %s %s", errStatus, err)
187187
}
188188

189189
data.SetId(cloudauthAccount.Id)
@@ -206,11 +206,10 @@ func resourceSysdigSecureCloudauthAccountRead(ctx context.Context, data *schema.
206206
if strings.Contains(errStatus, "404") {
207207
return nil
208208
}
209-
return diag.FromErr(err)
209+
return diag.Errorf("Error reading resource: %s %s", errStatus, err)
210210
}
211211

212212
err = cloudauthAccountToResourceData(data, cloudauthAccount)
213-
214213
if err != nil {
215214
return diag.FromErr(err)
216215
}
@@ -229,23 +228,23 @@ func resourceSysdigSecureCloudauthAccountUpdate(ctx context.Context, data *schem
229228
if strings.Contains(errStatus, "404") {
230229
return nil
231230
}
232-
return diag.FromErr(err)
231+
return diag.Errorf("Error reading resource: %s %s", errStatus, err)
233232
}
234233

235234
newCloudAccount := cloudauthAccountFromResourceData(data)
236235

237236
// validate and reject non-updatable resource schema fields upfront
238237
err = validateCloudauthAccountUpdate(existingCloudAccount, newCloudAccount)
239238
if err != nil {
240-
return diag.FromErr(err)
239+
return diag.Errorf("Error updating resource: %s", err)
241240
}
242241

243242
_, errStatus, err = client.UpdateCloudauthAccountSecure(ctx, data.Id(), newCloudAccount)
244243
if err != nil {
245244
if strings.Contains(errStatus, "404") {
246245
return nil
247246
}
248-
return diag.FromErr(err)
247+
return diag.Errorf("Error updating resource: %s %s", errStatus, err)
249248
}
250249

251250
return nil
@@ -263,7 +262,7 @@ func resourceSysdigSecureCloudauthAccountDelete(ctx context.Context, data *schem
263262
if strings.Contains(errStatus, "404") {
264263
return nil
265264
}
266-
return diag.FromErr(err)
265+
return diag.Errorf("Error deleting resource: %s %s", errStatus, err)
267266
}
268267

269268
return nil

sysdig/resource_sysdig_secure_organization.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ func resourceSysdigSecureOrganizationCreate(ctx context.Context, data *schema.Re
6161

6262
org := secureOrganizationFromResourceData(data)
6363

64-
orgCreated, err := client.CreateOrganizationSecure(ctx, org)
64+
orgCreated, errStatus, err := client.CreateOrganizationSecure(ctx, org)
6565
if err != nil {
66-
return diag.FromErr(err)
66+
return diag.Errorf("Error creating resource: %s %s", errStatus, err)
6767
}
6868

6969
data.SetId(orgCreated.Id)
@@ -82,7 +82,7 @@ func resourceSysdigSecureOrganizationDelete(ctx context.Context, data *schema.Re
8282
if strings.Contains(errStatus, "404") {
8383
return nil
8484
}
85-
return diag.FromErr(err)
85+
return diag.Errorf("Error deleting resource: %s %s", errStatus, err)
8686
}
8787

8888
return nil
@@ -99,7 +99,7 @@ func resourceSysdigSecureOrganizationRead(ctx context.Context, data *schema.Reso
9999
if strings.Contains(errStatus, "404") {
100100
return nil
101101
}
102-
return diag.FromErr(err)
102+
return diag.Errorf("Error reading resource: %s %s", errStatus, err)
103103
}
104104

105105
err = secureOrganizationToResourceData(data, org)
@@ -123,7 +123,7 @@ func resourceSysdigSecureOrganizationUpdate(ctx context.Context, data *schema.Re
123123
if strings.Contains(errStatus, "404") {
124124
return nil
125125
}
126-
return diag.FromErr(err)
126+
return diag.Errorf("Error updating resource: %s %s", errStatus, err)
127127
}
128128

129129
return nil

0 commit comments

Comments
 (0)