|
|
|
|
@ -584,8 +584,10 @@ func (n *NodeAbstractResourceInstance) writeChange(ctx EvalContext, change *plan
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// refresh does a refresh for a resource
|
|
|
|
|
func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey states.DeposedKey, state *states.ResourceInstanceObject) (*states.ResourceInstanceObject, tfdiags.Diagnostics) {
|
|
|
|
|
// if the second return value is non-nil, the refresh is deferred
|
|
|
|
|
func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey states.DeposedKey, state *states.ResourceInstanceObject) (*states.ResourceInstanceObject, *providers.Deferred, tfdiags.Diagnostics) {
|
|
|
|
|
var diags tfdiags.Diagnostics
|
|
|
|
|
var deferred *providers.Deferred
|
|
|
|
|
absAddr := n.Addr
|
|
|
|
|
if deposedKey == states.NotDeposed {
|
|
|
|
|
log.Printf("[TRACE] NodeAbstractResourceInstance.refresh for %s", absAddr)
|
|
|
|
|
@ -594,25 +596,25 @@ func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey state
|
|
|
|
|
}
|
|
|
|
|
provider, providerSchema, err := getProvider(ctx, n.ResolvedProvider)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return state, diags.Append(err)
|
|
|
|
|
return state, deferred, diags.Append(err)
|
|
|
|
|
}
|
|
|
|
|
// If we have no state, we don't do any refreshing
|
|
|
|
|
if state == nil {
|
|
|
|
|
log.Printf("[DEBUG] refresh: %s: no state, so not refreshing", absAddr)
|
|
|
|
|
return state, diags
|
|
|
|
|
return state, deferred, diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
schema, _ := providerSchema.SchemaForResourceAddr(n.Addr.Resource.ContainingResource())
|
|
|
|
|
if schema == nil {
|
|
|
|
|
// Should be caught during validation, so we don't bother with a pretty error here
|
|
|
|
|
diags = diags.Append(fmt.Errorf("provider does not support resource type %q", n.Addr.Resource.Resource.Type))
|
|
|
|
|
return state, diags
|
|
|
|
|
return state, deferred, diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
metaConfigVal, metaDiags := n.providerMetas(ctx)
|
|
|
|
|
diags = diags.Append(metaDiags)
|
|
|
|
|
if diags.HasErrors() {
|
|
|
|
|
return state, diags
|
|
|
|
|
return state, deferred, diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Call pre-refresh hook
|
|
|
|
|
@ -620,7 +622,7 @@ func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey state
|
|
|
|
|
return h.PreRefresh(n.HookResourceIdentity(), deposedKey, state.Value)
|
|
|
|
|
}))
|
|
|
|
|
if diags.HasErrors() {
|
|
|
|
|
return state, diags
|
|
|
|
|
return state, deferred, diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Refresh!
|
|
|
|
|
@ -649,14 +651,7 @@ func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey state
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if resp.Deferred != nil {
|
|
|
|
|
deferrals := ctx.Deferrals()
|
|
|
|
|
deferrals.ReportResourceInstanceDeferred(absAddr, resp.Deferred.Reason, &plans.ResourceInstanceChange{
|
|
|
|
|
Addr: absAddr,
|
|
|
|
|
Change: plans.Change{
|
|
|
|
|
Action: plans.Create,
|
|
|
|
|
After: cty.DynamicVal,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
deferred = resp.Deferred
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if n.Config != nil {
|
|
|
|
|
@ -665,7 +660,7 @@ func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey state
|
|
|
|
|
|
|
|
|
|
diags = diags.Append(resp.Diagnostics)
|
|
|
|
|
if diags.HasErrors() {
|
|
|
|
|
return state, diags
|
|
|
|
|
return state, deferred, diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if resp.NewState == cty.NilVal {
|
|
|
|
|
@ -699,7 +694,7 @@ func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey state
|
|
|
|
|
))
|
|
|
|
|
}
|
|
|
|
|
if diags.HasErrors() {
|
|
|
|
|
return state, diags
|
|
|
|
|
return state, deferred, diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newState := objchange.NormalizeObjectFromLegacySDK(resp.NewState, schema)
|
|
|
|
|
@ -732,7 +727,7 @@ func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey state
|
|
|
|
|
return h.PostRefresh(n.HookResourceIdentity(), deposedKey, priorVal, ret.Value)
|
|
|
|
|
}))
|
|
|
|
|
if diags.HasErrors() {
|
|
|
|
|
return ret, diags
|
|
|
|
|
return ret, deferred, diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Mark the value with any prior marks from the state, and the marks from
|
|
|
|
|
@ -744,7 +739,7 @@ func (n *NodeAbstractResourceInstance) refresh(ctx EvalContext, deposedKey state
|
|
|
|
|
ret.Value = ret.Value.MarkWithPaths(marks)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret, diags
|
|
|
|
|
return ret, deferred, diags
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (n *NodeAbstractResourceInstance) plan(
|
|
|
|
|
|