Skip to content

Commit

Permalink
resource,iac: return errors when collecting ops
Browse files Browse the repository at this point in the history
We want to be able to bubble up errors when collecting ops as opposed to
panicing in the middle
  • Loading branch information
dschofie committed Apr 22, 2024
1 parent 13fd94c commit 6b46e13
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 16 deletions.
6 changes: 5 additions & 1 deletion cmd/iac.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"sync"

"github.com/samsarahq/go/oops"
"github.com/santiago-labs/telophasecli/cmd/runner"
"github.com/santiago-labs/telophasecli/resource"
"github.com/santiago-labs/telophasecli/resourceoperation"
Expand All @@ -27,7 +28,10 @@ func runIAC(
return
}

ops := resourceoperation.CollectAccountOps(ctx, consoleUI, cmd, &acct, stacks)
ops, err := resourceoperation.CollectAccountOps(ctx, consoleUI, cmd, &acct, stacks)
if err != nil {
panic(oops.Wrapf(err, "error collecting account ops for acct: %s", acct.AccountID))
}

if len(ops) == 0 {
consoleUI.Print("No stacks to deploy\n", acct)
Expand Down
31 changes: 20 additions & 11 deletions resource/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func (a Account) AllTags() []string {
return tags
}

func (a Account) AllBaselineStacks() []Stack {
func (a Account) AllBaselineStacks() ([]Stack, error) {
var stacks []Stack
if a.Parent != nil {
stacks = append(stacks, a.Parent.AllBaselineStacks()...)
Expand All @@ -81,32 +81,36 @@ func (a Account) AllBaselineStacks() []Stack {
var returnStacks []Stack
for i := range stacks {
if stacks[i].Region == "all" {
returnStacks = append(returnStacks, a.GenerateStacks(stacks[i])...)
generatedStacks, err := a.GenerateStacks(stacks[i])
if err != nil {
return nil, err
}
returnStacks = append(returnStacks, generatedStacks...)
continue
}
returnStacks = append(returnStacks, stacks[i])
}

return returnStacks
return returnStacks, nil
}

func (a Account) GenerateStacks(stack Stack) []Stack {
func (a Account) GenerateStacks(stack Stack) ([]Stack, error) {
// We only generate multiple stacks if the region is "all"
if stack.Region != "all" {
return []Stack{stack}
return []Stack{stack}, nil
}

sess, err := awssess.DefaultSession()
if err != nil {
panic(fmt.Sprintf("error starting sess: %s", err))
return nil, oops.Wrapf(err, "error starting sess")
}
acctClient := account.New(sess)
output, err := acctClient.ListRegions(&account.ListRegionsInput{
AccountId: &a.AccountID,
MaxResults: aws.Int64(50),
})
if err != nil {
panic(oops.Wrapf(err, "listing regions for account: (%s)", a.AccountID))
return nil, oops.Wrapf(err, "listing regions for account: (%s)", a.AccountID)
}

var stacks []Stack
Expand All @@ -121,13 +125,18 @@ func (a Account) GenerateStacks(stack Stack) []Stack {
}
}

return stacks
return stacks, nil
}

func (a Account) FilterBaselineStacks(stackNames string) []Stack {
func (a Account) FilterBaselineStacks(stackNames string) ([]Stack, error) {
var matchingStacks []Stack
targetStackNames := strings.Split(stackNames, ",")
for _, stack := range a.AllBaselineStacks() {
baselineStacks, err := a.AllBaselineStacks()
if err != nil {
return nil, err
}

for _, stack := range baselineStacks {
acctStackNames := strings.Split(stack.Name, ",")
var matchingStackNames []string
for _, name := range acctStackNames {
Expand All @@ -146,7 +155,7 @@ func (a Account) FilterBaselineStacks(stackNames string) []Stack {
})
}
}
return matchingStacks
return matchingStacks, nil
}

func (a Account) FilterServiceControlPolicies(stackNames string) []Stack {
Expand Down
16 changes: 12 additions & 4 deletions resourceoperation/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,21 @@ func CollectAccountOps(
operation int,
acct *resource.Account,
stackFilter string,
) []ResourceOperation {
) ([]ResourceOperation, error) {

var acctStacks []resource.Stack
if stackFilter != "" && stackFilter != "*" {
acctStacks = append(acctStacks, acct.FilterBaselineStacks(stackFilter)...)
baselineStacks, err := acct.FilterBaselineStacks(stackFilter)
if err != nil {
return nil, err
}
acctStacks = append(acctStacks, baselineStacks...)
} else {
acctStacks = append(acctStacks, acct.AllBaselineStacks()...)
baselineStacks, err := acct.AllBaselineStacks()
if err != nil {
return nil, err
}
acctStacks = append(acctStacks, baselineStacks...)
}

var ops []ResourceOperation
Expand All @@ -68,7 +76,7 @@ func CollectAccountOps(
}
}

return ops
return ops, nil
}

func (ao *accountOperation) AddDependent(op ResourceOperation) {
Expand Down

0 comments on commit 6b46e13

Please sign in to comment.