6 "github.com/mitchellh/copystructure"
9 // upgradeStateV1ToV2 is used to upgrade a V1 state representation
10 // into a V2 state representation
11 func upgradeStateV1ToV2(old *stateV1) (*State, error) {
16 remote, err := old.Remote.upgradeToV2()
18 return nil, fmt.Errorf("Error upgrading State V1: %v", err)
21 modules := make([]*ModuleState, len(old.Modules))
22 for i, module := range old.Modules {
23 upgraded, err := module.upgradeToV2()
25 return nil, fmt.Errorf("Error upgrading State V1: %v", err)
29 if len(modules) == 0 {
46 func (old *remoteStateV1) upgradeToV2() (*RemoteState, error) {
51 config, err := copystructure.Copy(old.Config)
53 return nil, fmt.Errorf("Error upgrading RemoteState V1: %v", err)
58 Config: config.(map[string]string),
62 func (old *moduleStateV1) upgradeToV2() (*ModuleState, error) {
67 pathRaw, err := copystructure.Copy(old.Path)
69 return nil, fmt.Errorf("Error upgrading ModuleState V1: %v", err)
71 path, ok := pathRaw.([]string)
73 return nil, fmt.Errorf("Error upgrading ModuleState V1: path is not a list of strings")
76 // We found some V1 states with a nil path. Assume root and catch
77 // duplicate path errors later (as part of Validate).
81 // Outputs needs upgrading to use the new structure
82 outputs := make(map[string]*OutputState)
83 for key, output := range old.Outputs {
84 outputs[key] = &OutputState{
91 resources := make(map[string]*ResourceState)
92 for key, oldResource := range old.Resources {
93 upgraded, err := oldResource.upgradeToV2()
95 return nil, fmt.Errorf("Error upgrading ModuleState V1: %v", err)
97 resources[key] = upgraded
100 dependencies, err := copystructure.Copy(old.Dependencies)
102 return nil, fmt.Errorf("Error upgrading ModuleState V1: %v", err)
108 Resources: resources,
109 Dependencies: dependencies.([]string),
113 func (old *resourceStateV1) upgradeToV2() (*ResourceState, error) {
118 dependencies, err := copystructure.Copy(old.Dependencies)
120 return nil, fmt.Errorf("Error upgrading ResourceState V1: %v", err)
123 primary, err := old.Primary.upgradeToV2()
125 return nil, fmt.Errorf("Error upgrading ResourceState V1: %v", err)
128 deposed := make([]*InstanceState, len(old.Deposed))
129 for i, v := range old.Deposed {
130 upgraded, err := v.upgradeToV2()
132 return nil, fmt.Errorf("Error upgrading ResourceState V1: %v", err)
134 deposed[i] = upgraded
136 if len(deposed) == 0 {
140 return &ResourceState{
142 Dependencies: dependencies.([]string),
145 Provider: old.Provider,
149 func (old *instanceStateV1) upgradeToV2() (*InstanceState, error) {
154 attributes, err := copystructure.Copy(old.Attributes)
156 return nil, fmt.Errorf("Error upgrading InstanceState V1: %v", err)
158 ephemeral, err := old.Ephemeral.upgradeToV2()
160 return nil, fmt.Errorf("Error upgrading InstanceState V1: %v", err)
163 meta, err := copystructure.Copy(old.Meta)
165 return nil, fmt.Errorf("Error upgrading InstanceState V1: %v", err)
168 newMeta := make(map[string]interface{})
169 for k, v := range meta.(map[string]string) {
173 return &InstanceState{
175 Attributes: attributes.(map[string]string),
176 Ephemeral: *ephemeral,
181 func (old *ephemeralStateV1) upgradeToV2() (*EphemeralState, error) {
182 connInfo, err := copystructure.Copy(old.ConnInfo)
184 return nil, fmt.Errorf("Error upgrading EphemeralState V1: %v", err)
186 return &EphemeralState{
187 ConnInfo: connInfo.(map[string]string),