// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: BUSL-1.1 package hooks import ( "github.com/hashicorp/terraform/internal/addrs" "github.com/hashicorp/terraform/internal/plans" "github.com/hashicorp/terraform/internal/providers" "github.com/hashicorp/terraform/internal/rpcapi/terraform1/stacks" "github.com/hashicorp/terraform/internal/stacks/stackaddrs" ) // ResourceInstanceStatus is a UI-focused description of the overall status // for a given resource instance undergoing a Terraform plan or apply // operation. The "pending" and "errored" status are used for both operation // types, and the others will be used only for one of plan or apply. type ResourceInstanceStatus rune //go:generate go tool golang.org/x/tools/cmd/stringer -type=ResourceInstanceStatus resource_instance.go const ( ResourceInstanceStatusInvalid ResourceInstanceStatus = 0 ResourceInstancePending ResourceInstanceStatus = '.' ResourceInstanceRefreshing ResourceInstanceStatus = 'r' ResourceInstanceRefreshed ResourceInstanceStatus = 'R' ResourceInstancePlanning ResourceInstanceStatus = 'p' ResourceInstancePlanned ResourceInstanceStatus = 'P' ResourceInstanceApplying ResourceInstanceStatus = 'a' ResourceInstanceApplied ResourceInstanceStatus = 'A' ResourceInstanceErrored ResourceInstanceStatus = 'E' ) // TODO: move this into the rpcapi package somewhere func (s ResourceInstanceStatus) ForProtobuf() stacks.StackChangeProgress_ResourceInstanceStatus_Status { switch s { case ResourceInstancePending: return stacks.StackChangeProgress_ResourceInstanceStatus_PENDING case ResourceInstanceRefreshing: return stacks.StackChangeProgress_ResourceInstanceStatus_REFRESHING case ResourceInstanceRefreshed: return stacks.StackChangeProgress_ResourceInstanceStatus_REFRESHED case ResourceInstancePlanning: return stacks.StackChangeProgress_ResourceInstanceStatus_PLANNING case ResourceInstancePlanned: return stacks.StackChangeProgress_ResourceInstanceStatus_PLANNED case ResourceInstanceApplying: return stacks.StackChangeProgress_ResourceInstanceStatus_APPLYING case ResourceInstanceApplied: return stacks.StackChangeProgress_ResourceInstanceStatus_APPLIED case ResourceInstanceErrored: return stacks.StackChangeProgress_ResourceInstanceStatus_ERRORED default: return stacks.StackChangeProgress_ResourceInstanceStatus_INVALID } } // ProvisionerStatus is a UI-focused description of the progress of a given // resource instance's provisioner during a Terraform apply operation. Each // specified provisioner will start in "provisioning" state, and progress to // either "provisioned" or "errored". type ProvisionerStatus rune //go:generate go tool golang.org/x/tools/cmd/stringer -type=ProvisionerStatus resource_instance.go const ( ProvisionerStatusInvalid ProvisionerStatus = 0 ProvisionerProvisioning ProvisionerStatus = 'p' ProvisionerProvisioned ProvisionerStatus = 'P' ProvisionerErrored ProvisionerStatus = 'E' ) // TODO: move this into the rpcapi package somewhere func (s ProvisionerStatus) ForProtobuf() stacks.StackChangeProgress_ProvisionerStatus_Status { switch s { case ProvisionerProvisioning: return stacks.StackChangeProgress_ProvisionerStatus_PROVISIONING case ProvisionerProvisioned: return stacks.StackChangeProgress_ProvisionerStatus_PROVISIONING case ProvisionerErrored: return stacks.StackChangeProgress_ProvisionerStatus_ERRORED default: return stacks.StackChangeProgress_ProvisionerStatus_INVALID } } // ResourceInstanceStatusHookData is the argument type for hook callbacks which // signal a resource instance's status updates. type ResourceInstanceStatusHookData struct { Addr stackaddrs.AbsResourceInstanceObject ProviderAddr addrs.Provider Status ResourceInstanceStatus } // ResourceInstanceProvisionerHookData is the argument type for hook callbacks // which signal a resource instance's provisioner progress, including both // status updates and optional provisioner output data. type ResourceInstanceProvisionerHookData struct { Addr stackaddrs.AbsResourceInstanceObject Name string Status ProvisionerStatus Output *string } // ResourceInstanceChange is the argument type for hook callbacks which signal // a detected or planned change for a resource instance resulting from a plan // operation. type ResourceInstanceChange struct { Addr stackaddrs.AbsResourceInstanceObject Change *plans.ResourceInstanceChangeSrc } // DeferredResourceInstanceChange is the argument type for hook callbacks which // signal a deferred change for a resource instance resulting from a plan // operation. type DeferredResourceInstanceChange struct { Reason providers.DeferredReason Change *ResourceInstanceChange }