// View, if non-empty, is the ModuleState.View used around the state
// to find deposed resources.
View string
+
+ // The provider used by the resourced which were deposed
+ ResolvedProvider string
}
func (t *DeposedTransformer) Transform(g *Graph) error {
if len(rs.Deposed) == 0 {
continue
}
+
deposed := rs.Deposed
for i, _ := range deposed {
g.Add(&graphNodeDeposedResource{
- Index: i,
- ResourceName: k,
- ResourceType: rs.Type,
- Provider: rs.Provider,
+ Index: i,
+ ResourceName: k,
+ ResourceType: rs.Type,
+ ProviderName: rs.Provider,
+ ResolvedProvider: t.ResolvedProvider,
})
}
}
// graphNodeDeposedResource is the graph vertex representing a deposed resource.
type graphNodeDeposedResource struct {
- Index int
- ResourceName string
- ResourceType string
- Provider string
+ Index int
+ ResourceName string
+ ResourceType string
+ ProviderName string
+ ResolvedProvider string
}
func (n *graphNodeDeposedResource) Name() string {
return fmt.Sprintf("%s (deposed #%d)", n.ResourceName, n.Index)
}
-func (n *graphNodeDeposedResource) ProvidedBy() []string {
- return []string{resourceProvider(n.ResourceName, n.Provider)}
+func (n *graphNodeDeposedResource) ProvidedBy() string {
+ return resourceProvider(n.ResourceName, n.ProviderName)
+}
+
+func (n *graphNodeDeposedResource) SetProvider(p string) {
+ n.ResolvedProvider = p
}
// GraphNodeEvalable impl.
Node: &EvalSequence{
Nodes: []EvalNode{
&EvalGetProvider{
- Name: n.ProvidedBy()[0],
+ Name: n.ResolvedProvider,
Output: &provider,
},
&EvalReadStateDeposed{
&EvalWriteStateDeposed{
Name: n.ResourceName,
ResourceType: n.ResourceType,
- Provider: n.Provider,
+ Provider: n.ResolvedProvider,
State: &state,
Index: n.Index,
},
Node: &EvalSequence{
Nodes: []EvalNode{
&EvalGetProvider{
- Name: n.ProvidedBy()[0],
+ Name: n.ResolvedProvider,
Output: &provider,
},
&EvalReadStateDeposed{
&EvalWriteStateDeposed{
Name: n.ResourceName,
ResourceType: n.ResourceType,
- Provider: n.Provider,
+ Provider: n.ResolvedProvider,
State: &state,
Index: n.Index,
},