Skip to content

Commit

Permalink
also post on empty plan (#1616)
Browse files Browse the repository at this point in the history
  • Loading branch information
motatoes authored Jul 12, 2024
1 parent 313ff2c commit 61d7552
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 15 deletions.
23 changes: 8 additions & 15 deletions libs/terraform_utils/plan_summary.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,6 @@ type PlanSummary struct {
ResourcesDeleted uint `json:"resources_deleted"`
}

type TerraformPlan struct {
ResourceChanges []ResourceChange `json:"resource_changes"`
}

type ResourceChange struct {
Name string `json:"name"`
Address string `json:"address"`
Type string `json:"type"`
Change Change `json:"change"`
ChangeType string `json:"change_type"`
}

type Change struct {
Actions []string `json:"actions"`
}
Expand Down Expand Up @@ -71,8 +59,8 @@ func (p *PlanSummary) ToJson() map[string]interface{} {
"resources_deleted": p.ResourcesDeleted,
}
}
func parseTerraformPlanOutput(terraformJson string) (*TerraformPlan, error) {
var plan TerraformPlan
func parseTerraformPlanOutput(terraformJson string) (*tfjson.Plan, error) {
var plan tfjson.Plan
if err := json.Unmarshal([]byte(terraformJson), &plan); err != nil {
return nil, fmt.Errorf("Unable to parse the plan file: %v", err)
}
Expand All @@ -86,13 +74,18 @@ func GetPlanSummary(planJson string) (bool, *PlanSummary, error) {
return false, nil, fmt.Errorf("Error while parsing json file: %v", err)
}
isPlanEmpty := true

for _, change := range tfplan.ResourceChanges {
if len(change.Change.Actions) != 1 || change.Change.Actions[0] != "no-op" {
isPlanEmpty = false
break
}
}

if tfplan.OutputChanges != nil {
isPlanEmpty = false
}

planSummary := PlanSummary{}
for _, resourceChange := range tfplan.ResourceChanges {
switch resourceChange.Change.Actions[0] {
Expand All @@ -112,7 +105,7 @@ func GetPlanFootprint(planJson string) (*TerraformPlanFootprint, error) {
if err != nil {
return nil, err
}
planAddresses := lo.Map[ResourceChange, string](tfplan.ResourceChanges, func(change ResourceChange, idx int) string {
planAddresses := lo.Map[*tfjson.ResourceChange, string](tfplan.ResourceChanges, func(change *tfjson.ResourceChange, idx int) string {
return change.Address
})
footprint := TerraformPlanFootprint{
Expand Down
8 changes: 8 additions & 0 deletions libs/terraform_utils/plan_summary_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ func TestPlanOutputNonEmpty(t *testing.T) {
assert.False(t, isEmpty)
}

func TestGetPlanSummaryOnlyOutputsChanged(t *testing.T) {
onlyOutputsChangedJson := "{\"format_version\":\"1.2\",\"terraform_version\":\"1.7.3\",\"planned_values\":{\"outputs\":{\"tt\":{\"sensitive\":false,\"type\":\"string\",\"value\":\"yy\"}},\"root_module\":{}},\"output_changes\":{\"tt\":{\"actions\":[\"create\"],\"before\":null,\"after\":\"yy\",\"after_unknown\":false,\"before_sensitive\":false,\"after_sensitive\":false}},\"prior_state\":{\"format_version\":\"1.0\",\"terraform_version\":\"1.7.3\",\"values\":{\"outputs\":{\"tt\":{\"sensitive\":false,\"value\":\"yy\",\"type\":\"string\"}},\"root_module\":{}}},\"configuration\":{\"root_module\":{\"outputs\":{\"tt\":{\"expression\":{\"constant_value\":\"yy\"}}}}},\"timestamp\":\"2024-07-12T14:50:56Z\",\"errored\":false}\n"
isEmpty, _, err := GetPlanSummary(onlyOutputsChangedJson)
assert.Nil(t, err)
assert.False(t, isEmpty)

}

func TestPlanOutputInvalidJsonFailsGracefully(t *testing.T) {
InvalidJson := "{\"format_version\":\" notsovalid"
_, _, err := GetPlanSummary(InvalidJson)
Expand Down

0 comments on commit 61d7552

Please sign in to comment.