Files
opentf/internal/command/views/json/change_summary.go
Jarrett Duskey ecd4dc5c61 Add count of forgotten resources to plan and apply outputs. (#2010)
Signed-off-by: Jarrett Duskey <jarrett@duskey.io>
Signed-off-by: Christian Mesh <christianmesh1@gmail.com>
Co-authored-by: Christian Mesh <christianmesh1@gmail.com>
2025-02-24 14:53:32 -05:00

66 lines
1.9 KiB
Go

// Copyright (c) The OpenTofu Authors
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) 2023 HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package json
import (
"fmt"
"strings"
)
type Operation string
const (
OperationApplied Operation = "apply"
OperationDestroyed Operation = "destroy"
OperationPlanned Operation = "plan"
)
type ChangeSummary struct {
Add int `json:"add"`
Change int `json:"change"`
Import int `json:"import"`
Remove int `json:"remove"`
Forget int `json:"forget"`
Operation Operation `json:"operation"`
}
// The summary strings for apply and plan are accidentally a public interface
// used by Terraform Cloud and Terraform Enterprise, so the exact formats of
// these strings are important.
func (cs *ChangeSummary) String() string {
var builder strings.Builder
switch cs.Operation {
case OperationApplied:
builder.WriteString("Apply complete! Resources: ")
if cs.Import > 0 {
builder.WriteString(fmt.Sprintf("%d imported, ", cs.Import))
}
builder.WriteString(fmt.Sprintf("%d added, %d changed, %d destroyed", cs.Add, cs.Change, cs.Remove))
if cs.Forget > 0 {
builder.WriteString(fmt.Sprintf(", %d forgotten.", cs.Forget))
} else {
builder.WriteString(".")
}
return builder.String()
case OperationDestroyed:
return fmt.Sprintf("Destroy complete! Resources: %d destroyed.", cs.Remove)
case OperationPlanned:
builder.WriteString("Plan: ")
if cs.Import > 0 {
builder.WriteString(fmt.Sprintf("%d to import, ", cs.Import))
}
builder.WriteString(fmt.Sprintf("%d to add, %d to change, %d to destroy", cs.Add, cs.Change, cs.Remove))
if cs.Forget > 0 {
builder.WriteString(fmt.Sprintf(", %d to forget.", cs.Forget))
} else {
builder.WriteString(".")
}
return builder.String()
default:
return fmt.Sprintf("%s: %d add, %d change, %d destroy", cs.Operation, cs.Add, cs.Change, cs.Remove)
}
}