Skip to content

Commit

Permalink
teigi: roger: add check deleted checks
Browse files Browse the repository at this point in the history
Signed-off-by: Arthur Outhenin-Chalandre <[email protected]>
  • Loading branch information
MrFreezeex committed Jul 8, 2022
1 parent d5d4f91 commit 7f68620
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 8 deletions.
4 changes: 2 additions & 2 deletions cern/resource_roger.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func resourceRogerRead(ctx context.Context, d *schema.ResourceData, meta interfa
log.Printf("[DEBUG] Creating roger read request for %s", hostname)
resp, err := client.Get(ctx, hostname)
if err != nil {
return diag.Errorf("Error reading roger state: %s", err)
return diag.FromErr(CheckDeleted(d, "Error reading roger state", err))
}

if err := d.Set("hostname", hostname); err != nil {
Expand Down Expand Up @@ -216,7 +216,7 @@ func resourceRogerDelete(ctx context.Context, d *schema.ResourceData, meta inter
log.Printf("[DEBUG] Creating roger delete request for %s", hostname)
_, err := client.Delete(ctx, hostname)
if err != nil {
return diag.Errorf("Error deleting roger state: %s", err)
return diag.FromErr(CheckDeleted(d, "Error deleting roger state", err))
}

return nil
Expand Down
4 changes: 2 additions & 2 deletions cern/resource_teigi_secret.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ func resourceTeigiSecretRead(ctx context.Context, d *schema.ResourceData, meta i
scope, entity, key)
secretResponse, err := client.Get(ctx, scope, entity, key)
if err != nil {
return diag.Errorf("Unable to get secret: %s", err)
return diag.FromErr(CheckDeleted(d, "Unable to get secret", err))
}

if err := d.Set(scope, entity); err != nil {
Expand Down Expand Up @@ -160,7 +160,7 @@ func resourceTeigiSecretDelete(ctx context.Context, d *schema.ResourceData, meta
scope, entity, key)
err = client.Delete(ctx, scope, entity, key)
if err != nil {
return diag.Errorf("Unable to delete secret: %s", err)
return diag.FromErr(CheckDeleted(d, "Unable to delete secret", err))
}

return nil
Expand Down
32 changes: 32 additions & 0 deletions cern/util_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,40 @@ import (
"net/url"
"strings"
"time"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

type HTTPError struct {
URL string
StatusCode int
RespBody string
}

func (e HTTPError) Error() string {
return fmt.Sprintf(
"HTTP Error:{\n"+
" url: [%s]\n"+
" statusCode: [%d]\n"+
" respBody: [%s]\n"+
"}",
e.URL,
e.StatusCode,
e.RespBody,
)
}

// Taken from terraform-openstack-provider
// CheckDeleted checks the error to see if it's a 404 (Not Found) and, if so,
// sets the resource ID to the empty string instead of throwing an error.
func CheckDeleted(d *schema.ResourceData, prefix string, err error) error {
if httpError, ok := err.(HTTPError); ok && httpError.StatusCode == 404 {
d.SetId("")
return nil
}

return fmt.Errorf("%s: %s", prefix, err)
}
func resolveURL(u *url.URL) (*url.URL, error) {
rand.Seed(time.Now().Unix()) // initialize global pseudo random generator
// Take a url, extract the hostname, resolve to canonical
Expand Down
5 changes: 5 additions & 0 deletions cern/util_roger.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@ func (r Roger) do(ctx context.Context, rogerRequest RogerRequest, method string)
if err != nil {
return nil, err
}

if resp.StatusCode < 200 && resp.StatusCode >= 300 {
return nil, HTTPError{url, resp.StatusCode, string(body[:])}
}

if method != "POST" && method != "DELETE" && method != "PUT" {
err = json.Unmarshal(body, &rogerResponse)
if err != nil {
Expand Down
8 changes: 4 additions & 4 deletions cern/util_teigi.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,15 +130,15 @@ func (t Teigi) do(ctx context.Context, method string, scope string, entity strin
}
defer resp.Body.Close()

if resp.StatusCode < 200 && resp.StatusCode >= 300 {
return nil, fmt.Errorf("non 2xx error code (%d)", resp.StatusCode)
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}

if resp.StatusCode < 200 && resp.StatusCode >= 300 {
return nil, HTTPError{url, resp.StatusCode, string(body[:])}
}

var secretResponse SecretResponse
if method == "GET" {
err = json.Unmarshal(body, &secretResponse)
Expand Down

0 comments on commit 7f68620

Please sign in to comment.