type names don't imply the resource mode

The addr type doesn't imply the resource mode, so data sources and
managed resources with the same type name could shim incorrectly.
This commit is contained in:
James Bardin 2019-01-12 11:43:48 -05:00
parent e8096e9c8b
commit 041ed67e46
1 changed files with 14 additions and 13 deletions

View File

@ -49,7 +49,7 @@ func shimNewState(newState *states.State, providers map[string]terraform.Resourc
resType := res.Addr.Type resType := res.Addr.Type
providerType := res.ProviderConfig.ProviderConfig.Type providerType := res.ProviderConfig.ProviderConfig.Type
resource := getResource(providers, providerType, resType) resource := getResource(providers, providerType, res.Addr)
for key, i := range res.Instances { for key, i := range res.Instances {
flatmap, err := shimmedAttributes(i.Current, resource) flatmap, err := shimmedAttributes(i.Current, resource)
@ -116,7 +116,7 @@ func shimNewState(newState *states.State, providers map[string]terraform.Resourc
return state, nil return state, nil
} }
func getResource(providers map[string]terraform.ResourceProvider, providerName, resourceType string) *schema.Resource { func getResource(providers map[string]terraform.ResourceProvider, providerName string, addr addrs.Resource) *schema.Resource {
p := providers[providerName] p := providers[providerName]
if p == nil { if p == nil {
panic(fmt.Sprintf("provider %q not found in test step", providerName)) panic(fmt.Sprintf("provider %q not found in test step", providerName))
@ -125,23 +125,24 @@ func getResource(providers map[string]terraform.ResourceProvider, providerName,
// this is only for tests, so should only see schema.Providers // this is only for tests, so should only see schema.Providers
provider := p.(*schema.Provider) provider := p.(*schema.Provider)
resource := provider.ResourcesMap[resourceType] switch addr.Mode {
if resource != nil { case addrs.ManagedResourceMode:
return resource resource := provider.ResourcesMap[addr.Type]
}
resource = provider.DataSourcesMap[resourceType]
if resource != nil { if resource != nil {
return resource return resource
} }
case addrs.DataResourceMode:
resource := provider.DataSourcesMap[addr.Type]
if resource != nil {
return resource
}
}
panic(fmt.Sprintf("resource %s not found in test step", resourceType)) panic(fmt.Sprintf("resource %s not found in test step", addr.Type))
} }
func shimmedAttributes(instance *states.ResourceInstanceObjectSrc, res *schema.Resource) (map[string]string, error) { func shimmedAttributes(instance *states.ResourceInstanceObjectSrc, res *schema.Resource) (map[string]string, error) {
flatmap := instance.AttrsFlat flatmap := instance.AttrsFlat
if flatmap != nil { if flatmap != nil {
return flatmap, nil return flatmap, nil
} }