Implement ProgressAction reporting without debug logging

pull/38246/head
Roniece 6 months ago committed by Roniece Ricardo
parent e4f849db4a
commit 6a657d474d

@ -5,6 +5,7 @@ package stackeval
import (
"context"
"log"
"sync"
"github.com/hashicorp/terraform/internal/addrs"
@ -56,28 +57,20 @@ func (h *componentInstanceTerraformHook) resourceInstanceObjectAddr(riAddr addrs
}
}
func (h *componentInstanceTerraformHook) PreDiff(id terraform.HookResourceIdentity, dk addrs.DeposedKey, priorState, proposedNewState cty.Value, err error) (terraform.HookAction, error) {
status := hooks.ResourceInstancePlanning
if err != nil {
status = hooks.ResourceInstanceErrored
}
func (h *componentInstanceTerraformHook) PreDiff(id terraform.HookResourceIdentity, dk addrs.DeposedKey, priorState, proposedNewState cty.Value) (terraform.HookAction, error) {
hookMore(h.ctx, h.seq, h.hooks.ReportResourceInstanceStatus, &hooks.ResourceInstanceStatusHookData{
Addr: h.resourceInstanceObjectAddr(id.Addr, dk),
ProviderAddr: id.ProviderAddr,
Status: status,
Status: hooks.ResourceInstancePlanning,
})
return terraform.HookActionContinue, nil
}
func (h *componentInstanceTerraformHook) PostDiff(id terraform.HookResourceIdentity, dk addrs.DeposedKey, action plans.Action, priorState, plannedNewState cty.Value, err error) (terraform.HookAction, error) {
status := hooks.ResourceInstancePlanned
if err != nil {
status = hooks.ResourceInstanceErrored
}
func (h *componentInstanceTerraformHook) PostDiff(id terraform.HookResourceIdentity, dk addrs.DeposedKey, action plans.Action, priorState, plannedNewState cty.Value) (terraform.HookAction, error) {
hookMore(h.ctx, h.seq, h.hooks.ReportResourceInstanceStatus, &hooks.ResourceInstanceStatusHookData{
Addr: h.resourceInstanceObjectAddr(id.Addr, dk),
ProviderAddr: id.ProviderAddr,
Status: status,
Status: hooks.ResourceInstancePlanned,
})
return terraform.HookActionContinue, nil
}
@ -211,3 +204,82 @@ func (h *componentInstanceTerraformHook) ResourceInstanceObjectAppliedAction(add
func (h *componentInstanceTerraformHook) ResourceInstanceObjectsSuccessfullyApplied() addrs.Set[addrs.AbsResourceInstanceObject] {
return h.resourceInstanceObjectApplySuccess
}
// StartAction forwards core action start events into the stacks hooks
// as a status notification reporting that the action is now running.
func (h *componentInstanceTerraformHook) StartAction(id terraform.HookActionIdentity) (terraform.HookAction, error) {
log.Printf("[DEBUG] terraform_hook.StartAction called for action: %s", id.Addr.String())
ai := h.actionInvocationFromHookActionIdentity(id)
log.Printf("[DEBUG] Reporting action invocation status RUNNING: %s", ai.Addr.String())
hookMore(h.ctx, h.seq, h.hooks.ReportActionInvocationStatus, &hooks.ActionInvocationStatusHookData{
Addr: ai.Addr,
ProviderAddr: id.ProviderAddr.Provider,
Status: hooks.ActionInvocationRunning,
})
return terraform.HookActionContinue, nil
}
func (h *componentInstanceTerraformHook) ProgressAction(id terraform.HookActionIdentity, progress string) (terraform.HookAction, error) {
log.Printf("[DEBUG] terraform_hook.ProgressAction called for action: %s, progress=%s", id.Addr.String(), progress)
ai := h.actionInvocationFromHookActionIdentity(id)
// Report the progress message
log.Printf("[DEBUG] Reporting action invocation progress: %s", progress)
hookMore(h.ctx, h.seq, h.hooks.ReportActionInvocationProgress, &hooks.ActionInvocationProgressHookData{
Addr: ai.Addr,
ProviderAddr: id.ProviderAddr.Provider,
Message: progress,
})
// Map progress string to appropriate status
status := hooks.ActionInvocationRunning
if progress == "pending" {
status = hooks.ActionInvocationPending
log.Printf("[DEBUG] Mapping progress 'pending' to ActionInvocationPending")
} else {
log.Printf("[DEBUG] Mapping progress '%s' to ActionInvocationRunning", progress)
}
log.Printf("[DEBUG] Reporting action invocation status: %s", status.String())
hookMore(h.ctx, h.seq, h.hooks.ReportActionInvocationStatus, &hooks.ActionInvocationStatusHookData{
Addr: ai.Addr,
ProviderAddr: id.ProviderAddr.Provider,
Status: status,
})
return terraform.HookActionContinue, nil
}
func (h *componentInstanceTerraformHook) CompleteAction(id terraform.HookActionIdentity, err error) (terraform.HookAction, error) {
log.Printf("[DEBUG] terraform_hook.CompleteAction called for action: %s, error=%v", id.Addr.String(), err)
ai := h.actionInvocationFromHookActionIdentity(id)
status := hooks.ActionInvocationCompleted
if err != nil {
status = hooks.ActionInvocationErrored
log.Printf("[DEBUG] Action failed with error: %v - reporting ERRORED status", err)
} else {
log.Printf("[DEBUG] Action completed successfully - reporting COMPLETED status")
}
log.Printf("[DEBUG] Reporting action invocation status: %s", status.String())
hookMore(h.ctx, h.seq, h.hooks.ReportActionInvocationStatus, &hooks.ActionInvocationStatusHookData{
Addr: ai.Addr,
ProviderAddr: id.ProviderAddr.Provider,
Status: status,
})
return terraform.HookActionContinue, nil
}
// actionInvocationFromHookActionIdentity attempts to build a *hooks.ActionInvocation
// from a core terraform.HookActionIdentity.
func (h *componentInstanceTerraformHook) actionInvocationFromHookActionIdentity(id terraform.HookActionIdentity) *hooks.ActionInvocation {
ai := &hooks.ActionInvocation{
Addr: stackaddrs.AbsActionInvocationInstance{
Component: h.addr,
Item: id.Addr,
},
ProviderAddr: id.ProviderAddr.Provider,
Trigger: id.ActionTrigger,
}
return ai
}

Loading…
Cancel
Save