package resource
import (
+ "encoding/json"
"fmt"
"github.com/hashicorp/terraform/addrs"
resource := getResource(providers, providerType, res.Addr)
for key, i := range res.Instances {
- flatmap, err := shimmedAttributes(i.Current, resource)
- if err != nil {
- return nil, fmt.Errorf("error decoding state for %q: %s", resType, err)
+ resState := &terraform.ResourceState{
+ Type: resType,
+ Provider: res.ProviderConfig.String(),
}
- resState := &terraform.ResourceState{
- Type: resType,
- Primary: &terraform.InstanceState{
+ // We should always have a Current instance here, but be safe about checking.
+ if i.Current != nil {
+ flatmap, err := shimmedAttributes(i.Current, resource)
+ if err != nil {
+ return nil, fmt.Errorf("error decoding state for %q: %s", resType, err)
+ }
+
+ var meta map[string]interface{}
+ if i.Current.Private != nil {
+ err := json.Unmarshal(i.Current.Private, &meta)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ resState.Primary = &terraform.InstanceState{
ID: flatmap["id"],
Attributes: flatmap,
Tainted: i.Current.Status == states.ObjectTainted,
- },
- Provider: res.ProviderConfig.String(),
- }
- if i.Current.SchemaVersion != 0 {
- resState.Primary.Meta = map[string]interface{}{
- "schema_version": i.Current.SchemaVersion,
+ Meta: meta,
}
- }
- for _, dep := range i.Current.Dependencies {
- resState.Dependencies = append(resState.Dependencies, dep.String())
- }
+ if i.Current.SchemaVersion != 0 {
+ resState.Primary.Meta = map[string]interface{}{
+ "schema_version": i.Current.SchemaVersion,
+ }
+ }
- // convert the indexes to the old style flapmap indexes
- idx := ""
- switch key.(type) {
- case addrs.IntKey:
- // don't add numeric index values to resources with a count of 0
- if len(res.Instances) > 1 {
- idx = fmt.Sprintf(".%d", key)
+ for _, dep := range i.Current.Dependencies {
+ resState.Dependencies = append(resState.Dependencies, dep.String())
}
- case addrs.StringKey:
- idx = "." + key.String()
- }
- mod.Resources[res.Addr.String()+idx] = resState
+ // convert the indexes to the old style flapmap indexes
+ idx := ""
+ switch key.(type) {
+ case addrs.IntKey:
+ // don't add numeric index values to resources with a count of 0
+ if len(res.Instances) > 1 {
+ idx = fmt.Sprintf(".%d", key)
+ }
+ case addrs.StringKey:
+ idx = "." + key.String()
+ }
+
+ mod.Resources[res.Addr.String()+idx] = resState
+ }
// add any deposed instances
for _, dep := range i.Deposed {
return nil, fmt.Errorf("error decoding deposed state for %q: %s", resType, err)
}
+ var meta map[string]interface{}
+ if dep.Private != nil {
+ err := json.Unmarshal(dep.Private, &meta)
+ if err != nil {
+ return nil, err
+ }
+ }
+
deposed := &terraform.InstanceState{
ID: flatmap["id"],
Attributes: flatmap,
Tainted: dep.Status == states.ObjectTainted,
+ Meta: meta,
}
if dep.SchemaVersion != 0 {
deposed.Meta = map[string]interface{}{