refactor context plan
get rid of the mutation of the plans.Plan and return values.
This commit is contained in:
parent
e614fb9aed
commit
fb2208a6d9
|
@ -530,6 +530,20 @@ The -target option is not for routine use, and is provided only for exceptional
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var plan *plans.Plan
|
||||||
|
var planDiags tfdiags.Diagnostics
|
||||||
|
switch {
|
||||||
|
case c.destroy:
|
||||||
|
plan, planDiags = c.destroyPlan()
|
||||||
|
default:
|
||||||
|
plan, planDiags = c.plan()
|
||||||
|
}
|
||||||
|
diags = diags.Append(planDiags)
|
||||||
|
if diags.HasErrors() {
|
||||||
|
return nil, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert the variables into the format expected for the plan
|
||||||
varVals := make(map[string]plans.DynamicValue, len(c.variables))
|
varVals := make(map[string]plans.DynamicValue, len(c.variables))
|
||||||
for k, iv := range c.variables {
|
for k, iv := range c.variables {
|
||||||
// We use cty.DynamicPseudoType here so that we'll save both the
|
// We use cty.DynamicPseudoType here so that we'll save both the
|
||||||
|
@ -547,29 +561,22 @@ The -target option is not for routine use, and is provided only for exceptional
|
||||||
varVals[k] = dv
|
varVals[k] = dv
|
||||||
}
|
}
|
||||||
|
|
||||||
plan := &plans.Plan{
|
// insert the run-specific data from the context into the plan; variables,
|
||||||
VariableValues: varVals,
|
// targets and provider SHAs.
|
||||||
TargetAddrs: c.targets,
|
plan.VariableValues = varVals
|
||||||
ProviderSHA256s: c.providerSHA256s,
|
plan.TargetAddrs = c.targets
|
||||||
}
|
plan.ProviderSHA256s = c.providerSHA256s
|
||||||
|
|
||||||
switch {
|
|
||||||
case c.destroy:
|
|
||||||
diags = diags.Append(c.destroyPlan(plan))
|
|
||||||
default:
|
|
||||||
diags = diags.Append(c.plan(plan))
|
|
||||||
}
|
|
||||||
|
|
||||||
return plan, diags
|
return plan, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Context) plan(plan *plans.Plan) tfdiags.Diagnostics {
|
func (c *Context) plan() (*plans.Plan, tfdiags.Diagnostics) {
|
||||||
var diags tfdiags.Diagnostics
|
var diags tfdiags.Diagnostics
|
||||||
|
|
||||||
graph, graphDiags := c.Graph(GraphTypePlan, nil)
|
graph, graphDiags := c.Graph(GraphTypePlan, nil)
|
||||||
diags = diags.Append(graphDiags)
|
diags = diags.Append(graphDiags)
|
||||||
if graphDiags.HasErrors() {
|
if graphDiags.HasErrors() {
|
||||||
return diags
|
return nil, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do the walk
|
// Do the walk
|
||||||
|
@ -577,9 +584,11 @@ func (c *Context) plan(plan *plans.Plan) tfdiags.Diagnostics {
|
||||||
diags = diags.Append(walker.NonFatalDiagnostics)
|
diags = diags.Append(walker.NonFatalDiagnostics)
|
||||||
diags = diags.Append(walkDiags)
|
diags = diags.Append(walkDiags)
|
||||||
if walkDiags.HasErrors() {
|
if walkDiags.HasErrors() {
|
||||||
return diags
|
return nil, diags
|
||||||
|
}
|
||||||
|
plan := &plans.Plan{
|
||||||
|
Changes: c.changes,
|
||||||
}
|
}
|
||||||
plan.Changes = c.changes
|
|
||||||
|
|
||||||
c.refreshState.SyncWrapper().RemovePlannedResourceInstanceObjects()
|
c.refreshState.SyncWrapper().RemovePlannedResourceInstanceObjects()
|
||||||
|
|
||||||
|
@ -590,11 +599,12 @@ func (c *Context) plan(plan *plans.Plan) tfdiags.Diagnostics {
|
||||||
// to Apply work as expected.
|
// to Apply work as expected.
|
||||||
c.state = refreshedState
|
c.state = refreshedState
|
||||||
|
|
||||||
return diags
|
return plan, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Context) destroyPlan(destroyPlan *plans.Plan) tfdiags.Diagnostics {
|
func (c *Context) destroyPlan() (*plans.Plan, tfdiags.Diagnostics) {
|
||||||
var diags tfdiags.Diagnostics
|
var diags tfdiags.Diagnostics
|
||||||
|
destroyPlan := &plans.Plan{}
|
||||||
c.changes = plans.NewChanges()
|
c.changes = plans.NewChanges()
|
||||||
|
|
||||||
// A destroy plan starts by running Refresh to read any pending data
|
// A destroy plan starts by running Refresh to read any pending data
|
||||||
|
@ -602,17 +612,10 @@ func (c *Context) destroyPlan(destroyPlan *plans.Plan) tfdiags.Diagnostics {
|
||||||
// a "destroy plan" is only creating delete changes, and is essentially a
|
// a "destroy plan" is only creating delete changes, and is essentially a
|
||||||
// local operation.
|
// local operation.
|
||||||
if !c.skipRefresh {
|
if !c.skipRefresh {
|
||||||
refreshPlan := &plans.Plan{
|
refreshPlan, refreshDiags := c.plan()
|
||||||
VariableValues: destroyPlan.VariableValues,
|
|
||||||
TargetAddrs: c.targets,
|
|
||||||
ProviderSHA256s: c.providerSHA256s,
|
|
||||||
}
|
|
||||||
|
|
||||||
refreshDiags := c.plan(refreshPlan)
|
|
||||||
|
|
||||||
diags = diags.Append(refreshDiags)
|
diags = diags.Append(refreshDiags)
|
||||||
if diags.HasErrors() {
|
if diags.HasErrors() {
|
||||||
return diags
|
return nil, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
// insert the refreshed state into the destroy plan result, and discard
|
// insert the refreshed state into the destroy plan result, and discard
|
||||||
|
@ -624,7 +627,7 @@ func (c *Context) destroyPlan(destroyPlan *plans.Plan) tfdiags.Diagnostics {
|
||||||
graph, graphDiags := c.Graph(GraphTypePlanDestroy, nil)
|
graph, graphDiags := c.Graph(GraphTypePlanDestroy, nil)
|
||||||
diags = diags.Append(graphDiags)
|
diags = diags.Append(graphDiags)
|
||||||
if graphDiags.HasErrors() {
|
if graphDiags.HasErrors() {
|
||||||
return diags
|
return nil, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do the walk
|
// Do the walk
|
||||||
|
@ -632,11 +635,11 @@ func (c *Context) destroyPlan(destroyPlan *plans.Plan) tfdiags.Diagnostics {
|
||||||
diags = diags.Append(walker.NonFatalDiagnostics)
|
diags = diags.Append(walker.NonFatalDiagnostics)
|
||||||
diags = diags.Append(walkDiags)
|
diags = diags.Append(walkDiags)
|
||||||
if walkDiags.HasErrors() {
|
if walkDiags.HasErrors() {
|
||||||
return diags
|
return nil, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
destroyPlan.Changes = c.changes
|
destroyPlan.Changes = c.changes
|
||||||
return diags
|
return destroyPlan, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
// Refresh goes through all the resources in the state and refreshes them
|
// Refresh goes through all the resources in the state and refreshes them
|
||||||
|
|
Loading…
Reference in New Issue