plandiff

package
v0.19.921 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 7, 2026 License: AGPL-3.0 Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ColorizeAction

func ColorizeAction(action string) string

func ColorizeActionSymbol

func ColorizeActionSymbol(action string) string

func FormatChangeBlock

func FormatChangeBlock(before, after any) string

func FormatDiff

func FormatDiff(before, after string) string

func FormatHelmPlan

func FormatHelmPlan(parsed *ParsedHelmPlan) string

FormatHelmPlan formats a parsed Helm plan for terminal output

func FormatKeyValue

func FormatKeyValue(key string, value any, indent int) string

func FormatKubernetesPlan

func FormatKubernetesPlan(parsed *ParsedKubernetesPlan, planText string) string

FormatKubernetesPlan formats a parsed Kubernetes plan for terminal output

func FormatPlan

func FormatPlan(jsonStr string) (string, error)

FormatPlan detects the plan type and returns a formatted string for terminal output. It automatically detects whether the JSON is a Terraform, Helm, or Kubernetes plan and uses the appropriate parser and formatter.

func FormatResourceHeader

func FormatResourceHeader(resourceType, name, action string) string

func FormatSectionHeader

func FormatSectionHeader(title string) string

func FormatSummary

func FormatSummary(summary Summary) string

func FormatTerraformPlan

func FormatTerraformPlan(parsed *ParsedTerraformPlan) string

FormatTerraformPlan formats a parsed Terraform plan for terminal output

func FormatUnifiedDiff

func FormatUnifiedDiff(before, after string) string

func HasChanges

func HasChanges(jsonStr string) (bool, error)

HasChanges detects the plan type and returns true if the plan has any meaningful changes. This can be used to determine if approval is needed or if the plan is a no-op.

func HasHelmChanges

func HasHelmChanges(parsed *ParsedHelmPlan) bool

HasHelmChanges returns true if the parsed plan has any changes

func HasKubernetesChanges

func HasKubernetesChanges(parsed *ParsedKubernetesPlan) bool

HasKubernetesChanges returns true if the parsed plan has any changes

func HasTerraformChanges

func HasTerraformChanges(parsed *ParsedTerraformPlan) bool

HasChanges returns true if the parsed plan has any non-no-op changes

func IndentString

func IndentString(s string, indent int) string

func IsCreativeAction

func IsCreativeAction(action string) bool

func IsDestructiveAction

func IsDestructiveAction(action string) bool

func IsModifyAction

func IsModifyAction(action string) bool

func TruncateString

func TruncateString(s string, maxLen int) string

Types

type HelmDiffEntry

type HelmDiffEntry struct {
	Path     string `json:"path"`
	Original string `json:"original"`
	Applied  string `json:"applied"`
	Type     int    `json:"type"`
	Payload  string `json:"payload"`
}

HelmDiffEntry represents an entry in a Helm diff

type HelmDiffItem

type HelmDiffItem struct {
	API       string          `json:"api"`
	Kind      string          `json:"kind"`
	Name      string          `json:"name"`
	Namespace string          `json:"namespace"`
	Before    string          `json:"before,omitempty"`
	After     string          `json:"after,omitempty"`
	Entries   []HelmDiffEntry `json:"entries,omitempty"`
}

HelmDiffItem represents a single Helm diff item

type HelmK8sChangeAction

type HelmK8sChangeAction string

HelmK8sChangeAction represents Helm and Kubernetes change actions

const (
	HelmK8sActionAdd       HelmK8sChangeAction = "add"
	HelmK8sActionAdded     HelmK8sChangeAction = "added"
	HelmK8sActionChange    HelmK8sChangeAction = "change"
	HelmK8sActionChanged   HelmK8sChangeAction = "changed"
	HelmK8sActionDestroy   HelmK8sChangeAction = "destroy"
	HelmK8sActionDestroyed HelmK8sChangeAction = "destroyed"
)

type HelmModePlan

type HelmModePlan struct {
	PlanContents string `json:"plan_contents,omitempty"`
}

HelmModePlan holds Helm plan contents

type HelmPlan

type HelmPlan struct {
	Plan            string         `json:"plan"`
	Op              string         `json:"op"`
	HelmContentDiff []HelmDiffItem `json:"helm_content_diff"`
}

HelmPlan represents a Helm plan structure

func MustParseHelm

func MustParseHelm(jsonStr string) *HelmPlan

MustParseHelm parses a JSON string as a Helm plan or panics

type K8sManifestMode

type K8sManifestMode struct {
	PlanContents string `json:"plan_contents,omitempty"`
}

K8sManifestMode holds Kubernetes manifest plan contents

type KubernetesDiffEntry

type KubernetesDiffEntry struct {
	Path     string `json:"path"`
	Original string `json:"original"`
	Applied  string `json:"applied"`
	Type     int    `json:"type"`
	Payload  string `json:"payload"`
}

KubernetesDiffEntry represents an entry in a Kubernetes diff

type KubernetesDiffItem

type KubernetesDiffItem struct {
	Version   string                `json:"_version"`
	Name      string                `json:"name"`
	Namespace string                `json:"namespace"`
	Kind      string                `json:"kind"`
	API       string                `json:"api"`
	Resource  string                `json:"resource"`
	Op        string                `json:"op"`
	Type      int                   `json:"type"` // 1=add, 2=delete, 3=change
	DryRun    bool                  `json:"dry_run"`
	Error     string                `json:"error,omitempty"`
	Entries   []KubernetesDiffEntry `json:"entries,omitempty"`
}

KubernetesDiffItem represents a single Kubernetes diff item

type KubernetesPlan

type KubernetesPlan struct {
	Plan           string               `json:"plan"`
	Op             string               `json:"op"`
	K8sContentDiff []KubernetesDiffItem `json:"k8s_content_diff"`
}

KubernetesPlan represents a Kubernetes plan structure

func MustParseKubernetes

func MustParseKubernetes(jsonStr string) *KubernetesPlan

MustParseKubernetes parses a JSON string as a Kubernetes plan or panics

type ParsedHelmChange

type ParsedHelmChange struct {
	Workspace    string              `json:"workspace"`
	Release      string              `json:"release"`
	Resource     string              `json:"resource"`
	ResourceType string              `json:"resource_type"`
	Action       HelmK8sChangeAction `json:"action"`
	Before       *string             `json:"before,omitempty"`
	After        *string             `json:"after,omitempty"`
}

ParsedHelmChange represents a parsed Helm change

type ParsedHelmPlan

type ParsedHelmPlan struct {
	Summary Summary            `json:"summary"`
	Changes []ParsedHelmChange `json:"changes"`
}

ParsedHelmPlan holds the parsed results of a Helm plan

func ParseHelmPlan

func ParseHelmPlan(plan *HelmPlan) *ParsedHelmPlan

ParseHelmPlan parses a HelmPlan into a structured ParsedHelmPlan

type ParsedKubernetesChange

type ParsedKubernetesChange struct {
	Namespace    string              `json:"namespace"`
	Name         string              `json:"name"`
	Resource     string              `json:"resource"`
	ResourceType string              `json:"resource_type"`
	Action       HelmK8sChangeAction `json:"action"`
	Before       *string             `json:"before,omitempty"`
	After        *string             `json:"after,omitempty"`
}

ParsedKubernetesChange represents a parsed Kubernetes change

type ParsedKubernetesError

type ParsedKubernetesError struct {
	Namespace    string `json:"namespace"`
	Name         string `json:"name"`
	Resource     string `json:"resource"`
	ResourceType string `json:"resource_type"`
	Error        string `json:"error"`
}

ParsedKubernetesError represents a Kubernetes plan error

type ParsedKubernetesPlan

type ParsedKubernetesPlan struct {
	Summary Summary                  `json:"summary"`
	Changes []ParsedKubernetesChange `json:"changes"`
	Errors  []ParsedKubernetesError  `json:"errors,omitempty"`
}

ParsedKubernetesPlan holds the parsed results of a Kubernetes plan

func ParseKubernetesPlan

func ParseKubernetesPlan(plan *KubernetesPlan) *ParsedKubernetesPlan

ParseKubernetesPlan parses a KubernetesPlan into a structured ParsedKubernetesPlan

type ParsedTerraformPlan

type ParsedTerraformPlan struct {
	Resources struct {
		Summary Summary                         `json:"summary"`
		Changes []ParsedTerraformResourceChange `json:"changes"`
	} `json:"resources"`
	Outputs struct {
		Summary Summary                 `json:"summary"`
		Changes []TerraformOutputChange `json:"changes"`
	} `json:"outputs"`
	Drift struct {
		Summary Summary                         `json:"summary"`
		Changes []ParsedTerraformResourceChange `json:"changes"`
	} `json:"drift"`
}

ParsedTerraformPlan holds the parsed results of a Terraform plan

func ParseTerraformPlan

func ParseTerraformPlan(plan *TerraformPlan) *ParsedTerraformPlan

ParseTerraformPlan parses a TerraformPlan into a structured ParsedTerraformPlan

type ParsedTerraformResourceChange

type ParsedTerraformResourceChange struct {
	Address  string                `json:"address"`
	Module   *string               `json:"module,omitempty"`
	Resource string                `json:"resource"`
	Name     string                `json:"name"`
	Action   TerraformChangeAction `json:"action"`
	Before   any                   `json:"before,omitempty"`
	After    any                   `json:"after,omitempty"`
}

ParsedTerraformResourceChange represents a flattened resource change

type PlanType

type PlanType string

PlanType represents the type of deployment plan

const (
	PlanTypeTerraform  PlanType = "terraform_plan"
	PlanTypeHelm       PlanType = "helm_approval"
	PlanTypeKubernetes PlanType = "kubernetes_manifest_approval"
	PlanTypeUnknown    PlanType = "unknown"
)

func DetectPlanType

func DetectPlanType(jsonStr string) (PlanType, any, error)

DetectPlanType attempts to detect the plan type from a JSON string and returns the plan type along with the parsed plan structure. It first tries to unwrap the runner job API response, then detects the plan type.

func GetPlanType

func GetPlanType(jsonStr string) (PlanType, error)

GetPlanType returns the detected plan type for a JSON string. This is useful when you need to know the type before formatting.

type RunnerJobPlanWrapper

type RunnerJobPlanWrapper struct {
	SandboxMode        *SandboxModePlan `json:"sandbox_mode,omitempty"`
	ApplyPlanContents  string           `json:"apply_plan_contents,omitempty"`
	ApplyPlanDisplay   string           `json:"apply_plan_display,omitempty"`
	Helm               *HelmModePlan    `json:"helm,omitempty"`
	Terraform          *TerraformMode   `json:"terraform,omitempty"`
	KubernetesManifest *K8sManifestMode `json:"kubernetes_manifest,omitempty"`
}

RunnerJobPlanWrapper represents the API response from GetRunnerJobPlan

type SandboxModePlan

type SandboxModePlan struct {
	Helm               *HelmModePlan    `json:"helm,omitempty"`
	Terraform          *TerraformMode   `json:"terraform,omitempty"`
	KubernetesManifest *K8sManifestMode `json:"kubernetes_manifest,omitempty"`
}

SandboxModePlan holds nested plan data for sandbox mode

type Summary

type Summary struct {
	Create  int `json:"create"`
	Update  int `json:"update"`
	Delete  int `json:"delete"`
	Replace int `json:"replace"`
	Read    int `json:"read"`
	NoOp    int `json:"no-op"`
	Add     int `json:"add"`
	Change  int `json:"change"`
	Destroy int `json:"destroy"`
}

Summary holds counts for plan changes

type TerraformChangeAction

type TerraformChangeAction string

TerraformChangeAction represents Terraform change actions

const (
	TerraformActionCreate  TerraformChangeAction = "create"
	TerraformActionUpdate  TerraformChangeAction = "update"
	TerraformActionDelete  TerraformChangeAction = "delete"
	TerraformActionNoOp    TerraformChangeAction = "no-op"
	TerraformActionReplace TerraformChangeAction = "replace"
	TerraformActionRead    TerraformChangeAction = "read"
)

type TerraformMode

type TerraformMode struct {
	PlanContents        string `json:"plan_contents,omitempty"`
	PlanDisplayContents string `json:"plan_display_contents,omitempty"`
}

TerraformMode holds Terraform plan contents

type TerraformOutputChange

type TerraformOutputChange struct {
	Output          string                `json:"output"`
	Action          TerraformChangeAction `json:"action"`
	Before          any                   `json:"before,omitempty"`
	After           any                   `json:"after,omitempty"`
	AfterUnknown    any                   `json:"after_unknown,omitempty"`
	AfterSensitive  any                   `json:"after_sensitive,omitempty"`
	BeforeSensitive any                   `json:"before_sensitive,omitempty"`
}

TerraformOutputChange represents a parsed output change

type TerraformOutputChangeRaw

type TerraformOutputChangeRaw struct {
	Actions         []TerraformChangeAction `json:"actions"`
	Before          any                     `json:"before,omitempty"`
	After           any                     `json:"after,omitempty"`
	AfterUnknown    any                     `json:"after_unknown,omitempty"`
	AfterSensitive  any                     `json:"after_sensitive,omitempty"`
	BeforeSensitive any                     `json:"before_sensitive,omitempty"`
}

TerraformOutputChangeRaw represents raw output change from JSON

type TerraformPlan

type TerraformPlan struct {
	ResourceDrift   []TerraformResourceDrift            `json:"resource_drift,omitempty"`
	ResourceChanges []TerraformResourceChange           `json:"resource_changes"`
	OutputChanges   map[string]TerraformOutputChangeRaw `json:"output_changes,omitempty"`
}

TerraformPlan represents a Terraform plan structure

func MustParseTerraform

func MustParseTerraform(jsonStr string) *TerraformPlan

MustParseTerraform parses a JSON string as a Terraform plan or panics

type TerraformResourceChange

type TerraformResourceChange struct {
	Address       string                      `json:"address"`
	ModuleAddress *string                     `json:"module_address,omitempty"`
	Type          string                      `json:"type"`
	Name          string                      `json:"name"`
	Change        TerraformResourceChangeData `json:"change"`
}

TerraformResourceChange represents a resource change entry

type TerraformResourceChangeData

type TerraformResourceChangeData struct {
	Actions      []TerraformChangeAction `json:"actions"`
	Before       any                     `json:"before,omitempty"`
	After        any                     `json:"after,omitempty"`
	AfterUnknown any                     `json:"after_unknown,omitempty"`
}

TerraformResourceChangeData holds the change details

type TerraformResourceDrift

type TerraformResourceDrift struct {
	Address       string                      `json:"address"`
	ModuleAddress *string                     `json:"module_address,omitempty"`
	Type          string                      `json:"type"`
	Name          string                      `json:"name"`
	Change        TerraformResourceChangeData `json:"change"`
}

TerraformResourceDrift represents a resource drift entry

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL