terrafrom: create NodeAbstractResource ReadResourceInstanceState
function The original EvalReadState node is used only by `NodeAbstractResource`s, so I've created a new method on NodeAbstractResource which does the same thing as EvalReadState. When the EvalNode refactor project is complete, EvalReadState will be removed entirely.
This commit is contained in:
parent
d1cf0279fa
commit
ab5bf50fc3
|
@ -496,6 +496,48 @@ func (n *NodeAbstractResource) WriteResourceState(ctx EvalContext, addr addrs.Ab
|
|||
return nil
|
||||
}
|
||||
|
||||
func (n *NodeAbstractResource) ReadResourceInstanceState(ctx EvalContext, addr addrs.AbsResourceInstance) (*states.ResourceInstanceObject, error) {
|
||||
provider, providerSchema, err := GetProvider(ctx, n.ResolvedProvider)
|
||||
|
||||
if provider == nil {
|
||||
panic("ReadResourceInstanceState used with no Provider object")
|
||||
}
|
||||
if providerSchema == nil {
|
||||
panic("ReadResourceInstanceState used with no ProviderSchema object")
|
||||
}
|
||||
|
||||
log.Printf("[TRACE] ReadResourceInstanceState: reading state for %s", addr)
|
||||
|
||||
src := ctx.State().ResourceInstanceObject(addr, states.CurrentGen)
|
||||
if src == nil {
|
||||
// Presumably we only have deposed objects, then.
|
||||
log.Printf("[TRACE] ReadResourceInstanceState: no state present for %s", addr)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
schema, currentVersion := (providerSchema).SchemaForResourceAddr(addr.Resource.ContainingResource())
|
||||
if schema == nil {
|
||||
// Shouldn't happen since we should've failed long ago if no schema is present
|
||||
return nil, fmt.Errorf("no schema available for %s while reading state; this is a bug in Terraform and should be reported", addr)
|
||||
}
|
||||
var diags tfdiags.Diagnostics
|
||||
src, diags = UpgradeResourceState(addr, provider, src, schema, currentVersion)
|
||||
if diags.HasErrors() {
|
||||
// Note that we don't have any channel to return warnings here. We'll
|
||||
// accept that for now since warnings during a schema upgrade would
|
||||
// be pretty weird anyway, since this operation is supposed to seem
|
||||
// invisible to the user.
|
||||
return nil, diags.Err()
|
||||
}
|
||||
|
||||
obj, err := src.Decode(schema.ImpliedType())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return obj, nil
|
||||
}
|
||||
|
||||
// graphNodesAreResourceInstancesInDifferentInstancesOfSameModule is an
|
||||
// annoyingly-task-specific helper function that returns true if and only if
|
||||
// the following conditions hold:
|
||||
|
|
|
@ -170,13 +170,7 @@ func (n *NodeDestroyResourceInstance) Execute(ctx EvalContext, op walkOperation)
|
|||
return EvalEarlyExitError{}
|
||||
}
|
||||
|
||||
evalReadState := &EvalReadState{
|
||||
Addr: addr.Resource,
|
||||
Output: &state,
|
||||
Provider: &provider,
|
||||
ProviderSchema: &providerSchema,
|
||||
}
|
||||
_, err = evalReadState.Eval(ctx)
|
||||
state, err = n.ReadResourceInstanceState(ctx, addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -35,19 +35,12 @@ func (n *NodePlannableResourceInstanceOrphan) Execute(ctx EvalContext, op walkOp
|
|||
var change *plans.ResourceInstanceChange
|
||||
var state *states.ResourceInstanceObject
|
||||
|
||||
provider, providerSchema, err := GetProvider(ctx, n.ResolvedProvider)
|
||||
_, providerSchema, err := GetProvider(ctx, n.ResolvedProvider)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
//EvalReadState
|
||||
readState := &EvalReadState{
|
||||
Addr: addr.Resource,
|
||||
Provider: &provider,
|
||||
ProviderSchema: &providerSchema,
|
||||
Output: &state,
|
||||
}
|
||||
_, err = readState.Eval(ctx)
|
||||
state, err = n.ReadResourceInstanceState(ctx, addr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue