diff --git a/internal/terraform/graph_builder_apply.go b/internal/terraform/graph_builder_apply.go index e4740861d9..7ea5a6a3a6 100644 --- a/internal/terraform/graph_builder_apply.go +++ b/internal/terraform/graph_builder_apply.go @@ -174,9 +174,6 @@ func (b *ApplyGraphBuilder) Steps() []GraphTransformer { relativeTiming: timing, } }, - // we want before_* actions to run before and after_* actions to run after the resource - CreateNodesAsAfter: false, - ConnectToResourceInstanceNodes: true, }, &ActionInvokeApplyTransformer{ diff --git a/internal/terraform/graph_builder_plan.go b/internal/terraform/graph_builder_plan.go index b8c2e64a91..3ef6ae3e18 100644 --- a/internal/terraform/graph_builder_plan.go +++ b/internal/terraform/graph_builder_plan.go @@ -183,10 +183,6 @@ func (b *PlanGraphBuilder) Steps() []GraphTransformer { nodeAbstractActionTriggerExpand: node, } }, - - // We plan all actions after the resource is handled - CreateNodesAsAfter: true, - ConnectToResourceInstanceNodes: false, }, &ActionInvokePlanTransformer{ diff --git a/internal/terraform/transform_action_trigger_config.go b/internal/terraform/transform_action_trigger_config.go index 9696c04a09..42ed56bc78 100644 --- a/internal/terraform/transform_action_trigger_config.go +++ b/internal/terraform/transform_action_trigger_config.go @@ -19,9 +19,7 @@ type ActionTriggerConfigTransformer struct { queryPlanMode bool - ConcreteActionTriggerNodeFunc ConcreteActionTriggerNodeFunc - CreateNodesAsAfter bool - ConnectToResourceInstanceNodes bool // if false it connects to resource nodes instead of resource instance nodes + ConcreteActionTriggerNodeFunc ConcreteActionTriggerNodeFunc } func (t *ActionTriggerConfigTransformer) Transform(g *Graph) error { @@ -50,6 +48,10 @@ func (t *ActionTriggerConfigTransformer) transform(g *Graph, config *configs.Con } func (t *ActionTriggerConfigTransformer) transformSingle(g *Graph, config *configs.Config) error { + // During plan we only want to create all triggers to run after the resource + createNodesAsAfter := t.Operation == walkPlan + // During apply we want all after trigger to also connect to the resource instance nodes + connectToResourceInstanceNodes := t.Operation == walkApply actionConfigs := addrs.MakeMap[addrs.ConfigAction, *configs.Action]() for _, a := range config.Module.Actions { actionConfigs.Put(a.Addr().InModule(config.Path), a) @@ -141,19 +143,18 @@ func (t *ActionTriggerConfigTransformer) transformSingle(g *Graph, config *confi // If CreateNodesAsAfter is set we want all nodes to run after the resource // If not we want expansion nodes only to exist if they are being used - if !t.CreateNodesAsAfter && containsBeforeEvent { + if !createNodesAsAfter && containsBeforeEvent { nat := t.ConcreteActionTriggerNodeFunc(abstract, RelativeActionTimingBefore) g.Add(nat) // We want to run before the resource nodes - if t.ConnectToResourceInstanceNodes { + for _, node := range resourceNode { + g.Connect(dag.BasicEdge(node, nat)) + } + if connectToResourceInstanceNodes { for _, node := range resourceInstanceNodes.Get(resourceAddr) { g.Connect(dag.BasicEdge(node, nat)) } - } else { - for _, node := range resourceNode { - g.Connect(dag.BasicEdge(node, nat)) - } } // We want to run after all prior nodes @@ -163,19 +164,18 @@ func (t *ActionTriggerConfigTransformer) transformSingle(g *Graph, config *confi priorBeforeNodes = append(priorBeforeNodes, nat) } - if t.CreateNodesAsAfter || containsAfterEvent { + if createNodesAsAfter || containsAfterEvent { nat := t.ConcreteActionTriggerNodeFunc(abstract, RelativeActionTimingAfter) g.Add(nat) // We want to run after the resource nodes - if t.ConnectToResourceInstanceNodes { + for _, node := range resourceNode { + g.Connect(dag.BasicEdge(nat, node)) + } + if connectToResourceInstanceNodes { for _, node := range resourceInstanceNodes.Get(resourceAddr) { g.Connect(dag.BasicEdge(nat, node)) } - } else { - for _, node := range resourceNode { - g.Connect(dag.BasicEdge(nat, node)) - } } // We want to run after all prior nodes