mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
don't plan data source reads during refresh-only
When executing a refresh-only plan, it is not valid to plan a data source read. If the data source config is not known during planning, the only valid update would be the prior state, if there is any.
This commit is contained in:
parent
730756eca2
commit
300ad02937
@ -201,12 +201,12 @@ func TestContext2Refresh_dataComputedModuleVar(t *testing.T) {
|
||||
},
|
||||
})
|
||||
|
||||
s, diags := ctx.Refresh(m, states.NewState(), &PlanOpts{Mode: plans.NormalMode})
|
||||
plan, diags := ctx.Plan(m, states.NewState(), &PlanOpts{Mode: plans.RefreshOnlyMode})
|
||||
if diags.HasErrors() {
|
||||
t.Fatalf("refresh errors: %s", diags.Err())
|
||||
}
|
||||
|
||||
checkStateString(t, s, `
|
||||
checkStateString(t, plan.PriorState, `
|
||||
<no state>
|
||||
`)
|
||||
}
|
||||
|
@ -1555,7 +1555,7 @@ func (n *NodeAbstractResourceInstance) providerMetas(ctx EvalContext) (cty.Value
|
||||
// value, but it still matches the previous state, then we can record a NoNop
|
||||
// change. If the states don't match then we record a Read change so that the
|
||||
// new value is applied to the state.
|
||||
func (n *NodeAbstractResourceInstance) planDataSource(ctx EvalContext, checkRuleSeverity tfdiags.Severity) (*plans.ResourceInstanceChange, *states.ResourceInstanceObject, instances.RepetitionData, tfdiags.Diagnostics) {
|
||||
func (n *NodeAbstractResourceInstance) planDataSource(ctx EvalContext, checkRuleSeverity tfdiags.Severity, skipPlanChanges bool) (*plans.ResourceInstanceChange, *states.ResourceInstanceObject, instances.RepetitionData, tfdiags.Diagnostics) {
|
||||
var diags tfdiags.Diagnostics
|
||||
var keyData instances.RepetitionData
|
||||
var configVal cty.Value
|
||||
@ -1609,6 +1609,17 @@ func (n *NodeAbstractResourceInstance) planDataSource(ctx EvalContext, checkRule
|
||||
// producing a "Read" change for this resource, and a placeholder value for
|
||||
// it in the state.
|
||||
if depsPending || !configKnown {
|
||||
// We can't plan any changes if we're only refreshing, so the only
|
||||
// value we can set here is whatever was in state previously.
|
||||
if skipPlanChanges {
|
||||
plannedNewState := &states.ResourceInstanceObject{
|
||||
Value: priorVal,
|
||||
Status: states.ObjectReady,
|
||||
}
|
||||
|
||||
return nil, plannedNewState, keyData, diags
|
||||
}
|
||||
|
||||
var reason plans.ResourceInstanceChangeActionReason
|
||||
switch {
|
||||
case !configKnown:
|
||||
|
@ -87,7 +87,7 @@ func (n *NodePlannableResourceInstance) dataResourceExecute(ctx EvalContext) (di
|
||||
checkRuleSeverity = tfdiags.Warning
|
||||
}
|
||||
|
||||
change, state, repeatData, planDiags := n.planDataSource(ctx, checkRuleSeverity)
|
||||
change, state, repeatData, planDiags := n.planDataSource(ctx, checkRuleSeverity, n.skipPlanChanges)
|
||||
diags = diags.Append(planDiags)
|
||||
if diags.HasErrors() {
|
||||
return diags
|
||||
|
Loading…
Reference in New Issue
Block a user