Skip to content

Commit

Permalink
Try recovering from panics to make the provider more reliable
Browse files Browse the repository at this point in the history
  • Loading branch information
mumoshu committed Oct 21, 2020
1 parent 7f20d09 commit a84021e
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 13 deletions.
2 changes: 1 addition & 1 deletion pkg/helmfile/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func Provider() terraform.ResourceProvider {
},
},
ResourcesMap: map[string]*schema.Resource{
"helmfile_release_set": resourceShellHelmfileReleaseSet(),
"helmfile_release_set": resourceHelmfileReleaseSet(),
"helmfile_release": resourceHelmfileRelease(),
"helmfile_embedding_example": resourceHelmfileEmbeddingExample(),
},
Expand Down
46 changes: 40 additions & 6 deletions pkg/helmfile/resource_release.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import (
"encoding/json"
"fmt"
"github.com/rs/xid"
"golang.org/x/xerrors"
"io/ioutil"
"runtime/debug"

"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
Expand Down Expand Up @@ -150,7 +152,13 @@ func resourceHelmfileRelease() *schema.Resource {
}

//helpers to unwravel the recursive bits by adding a base condition
func resourceHelmfileReleaseCreate(d *schema.ResourceData, meta interface{}) error {
func resourceHelmfileReleaseCreate(d *schema.ResourceData, _ interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

rs, err := NewReleaseSetWithSingleRelease(d)
if err != nil {
return err
Expand All @@ -168,7 +176,13 @@ func resourceHelmfileReleaseCreate(d *schema.ResourceData, meta interface{}) err
return nil
}

func resourceHelmfileReleaseRead(d *schema.ResourceData, meta interface{}) error {
func resourceHelmfileReleaseRead(d *schema.ResourceData, _ interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

rs, err := NewReleaseSetWithSingleRelease(d)
if err != nil {
return err
Expand All @@ -177,7 +191,13 @@ func resourceHelmfileReleaseRead(d *schema.ResourceData, meta interface{}) error
return ReadReleaseSet(rs, d)
}

func resourceHelmfileReleaseUpdate(d *schema.ResourceData, meta interface{}) error {
func resourceHelmfileReleaseUpdate(d *schema.ResourceData, _ interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

rs, err := NewReleaseSetWithSingleRelease(d)
if err != nil {
return err
Expand All @@ -186,7 +206,13 @@ func resourceHelmfileReleaseUpdate(d *schema.ResourceData, meta interface{}) err
return UpdateReleaseSet(rs, d)
}

func resourceHelmfileReleaseDiff(d *schema.ResourceDiff, meta interface{}) error {
func resourceHelmfileReleaseDiff(d *schema.ResourceDiff, _ interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

rs, err := NewReleaseSetWithSingleRelease(d)
if err != nil {
return err
Expand All @@ -198,13 +224,21 @@ func resourceHelmfileReleaseDiff(d *schema.ResourceDiff, meta interface{}) error
}

if diff != "" {
d.SetNewComputed(KeyApplyOutput)
if err := d.SetNewComputed(KeyApplyOutput); err != nil {
return xerrors.Errorf("setting new computed %s: %w", KeyApplyOutput, err)
}
}

return nil
}

func resourceHelmfileReleaseDelete(d *schema.ResourceData, meta interface{}) error {
func resourceHelmfileReleaseDelete(d *schema.ResourceData, _ interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

rs, err := NewReleaseSetWithSingleRelease(d)
if err != nil {
return err
Expand Down
43 changes: 37 additions & 6 deletions pkg/helmfile/resource_release_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"github.com/rs/xid"
"log"
"os"
"runtime/debug"
"strings"
)

Expand Down Expand Up @@ -142,7 +143,7 @@ var ReleaseSetSchema = map[string]*schema.Schema{
},
}

func resourceShellHelmfileReleaseSet() *schema.Resource {
func resourceHelmfileReleaseSet() *schema.Resource {
return &schema.Resource{
Create: resourceReleaseSetCreate,
Delete: resourceReleaseSetDelete,
Expand All @@ -157,7 +158,13 @@ func resourceShellHelmfileReleaseSet() *schema.Resource {
}

//helpers to unwravel the recursive bits by adding a base condition
func resourceReleaseSetCreate(d *schema.ResourceData, meta interface{}) error {
func resourceReleaseSetCreate(d *schema.ResourceData, meta interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

fs, err := NewReleaseSet(d)
if err != nil {
return err
Expand All @@ -181,7 +188,13 @@ func newId() string {
return id
}

func resourceReleaseSetRead(d *schema.ResourceData, meta interface{}) error {
func resourceReleaseSetRead(d *schema.ResourceData, meta interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

fs, err := NewReleaseSet(d)
if err != nil {
return err
Expand All @@ -194,7 +207,13 @@ func resourceReleaseSetRead(d *schema.ResourceData, meta interface{}) error {
return nil
}

func resourceReleaseSetDiff(d *schema.ResourceDiff, meta interface{}) error {
func resourceReleaseSetDiff(d *schema.ResourceDiff, meta interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

old, new := d.GetChange(KeyWorkingDirectory)
log.Printf("Getting old and new working directories for id %q: old = %v, new = %v, got = %v", d.Id(), old, new, d.Get(KeyWorkingDirectory))

Expand Down Expand Up @@ -249,7 +268,13 @@ func resourceReleaseSetDiff(d *schema.ResourceDiff, meta interface{}) error {
return nil
}

func resourceReleaseSetUpdate(d *schema.ResourceData, meta interface{}) error {
func resourceReleaseSetUpdate(d *schema.ResourceData, meta interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

fs, err := NewReleaseSet(d)
if err != nil {
return err
Expand All @@ -258,7 +283,13 @@ func resourceReleaseSetUpdate(d *schema.ResourceData, meta interface{}) error {
return UpdateReleaseSet(fs, d)
}

func resourceReleaseSetDelete(d *schema.ResourceData, meta interface{}) error {
func resourceReleaseSetDelete(d *schema.ResourceData, meta interface{}) (finalErr error) {
defer func() {
if err := recover(); err != nil {
finalErr = fmt.Errorf("unhandled error: %v\n%s", err, debug.Stack())
}
}()

fs, err := NewReleaseSet(d)
if err != nil {
return err
Expand Down

0 comments on commit a84021e

Please sign in to comment.