aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/hashicorp/terraform/states/statefile/version3_upgrade.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/states/statefile/version3_upgrade.go')
-rw-r--r--vendor/github.com/hashicorp/terraform/states/statefile/version3_upgrade.go27
1 files changed, 20 insertions, 7 deletions
diff --git a/vendor/github.com/hashicorp/terraform/states/statefile/version3_upgrade.go b/vendor/github.com/hashicorp/terraform/states/statefile/version3_upgrade.go
index 2cbe8a5..fbec547 100644
--- a/vendor/github.com/hashicorp/terraform/states/statefile/version3_upgrade.go
+++ b/vendor/github.com/hashicorp/terraform/states/statefile/version3_upgrade.go
@@ -79,7 +79,7 @@ func upgradeStateV3ToV4(old *stateV3) (*stateV4, error) {
79 case addrs.DataResourceMode: 79 case addrs.DataResourceMode:
80 modeStr = "data" 80 modeStr = "data"
81 default: 81 default:
82 return nil, fmt.Errorf("state contains resource %s with an unsupported resource mode", resAddr) 82 return nil, fmt.Errorf("state contains resource %s with an unsupported resource mode %#v", resAddr, resAddr.Mode)
83 } 83 }
84 84
85 // In state versions prior to 4 we allowed each instance of a 85 // In state versions prior to 4 we allowed each instance of a
@@ -98,7 +98,7 @@ func upgradeStateV3ToV4(old *stateV3) (*stateV4, error) {
98 var diags tfdiags.Diagnostics 98 var diags tfdiags.Diagnostics
99 providerAddr, diags = addrs.ParseAbsProviderConfigStr(oldProviderAddr) 99 providerAddr, diags = addrs.ParseAbsProviderConfigStr(oldProviderAddr)
100 if diags.HasErrors() { 100 if diags.HasErrors() {
101 return nil, diags.Err() 101 return nil, fmt.Errorf("invalid provider config reference %q for %s: %s", oldProviderAddr, instAddr, diags.Err())
102 } 102 }
103 } else { 103 } else {
104 // Smells like an old-style module-local provider address, 104 // Smells like an old-style module-local provider address,
@@ -109,7 +109,7 @@ func upgradeStateV3ToV4(old *stateV3) (*stateV4, error) {
109 if oldProviderAddr != "" { 109 if oldProviderAddr != "" {
110 localAddr, diags := addrs.ParseProviderConfigCompactStr(oldProviderAddr) 110 localAddr, diags := addrs.ParseProviderConfigCompactStr(oldProviderAddr)
111 if diags.HasErrors() { 111 if diags.HasErrors() {
112 return nil, diags.Err() 112 return nil, fmt.Errorf("invalid legacy provider config reference %q for %s: %s", oldProviderAddr, instAddr, diags.Err())
113 } 113 }
114 providerAddr = localAddr.Absolute(moduleAddr) 114 providerAddr = localAddr.Absolute(moduleAddr)
115 } else { 115 } else {
@@ -272,7 +272,7 @@ func upgradeInstanceObjectV3ToV4(rsOld *resourceStateV2, isOld *instanceStateV2,
272 instKeyRaw = string(tk) 272 instKeyRaw = string(tk)
273 default: 273 default:
274 if instKeyRaw != nil { 274 if instKeyRaw != nil {
275 return nil, fmt.Errorf("insupported instance key: %#v", instKey) 275 return nil, fmt.Errorf("unsupported instance key: %#v", instKey)
276 } 276 }
277 } 277 }
278 278
@@ -301,7 +301,11 @@ func upgradeInstanceObjectV3ToV4(rsOld *resourceStateV2, isOld *instanceStateV2,
301 301
302 dependencies := make([]string, len(rsOld.Dependencies)) 302 dependencies := make([]string, len(rsOld.Dependencies))
303 for i, v := range rsOld.Dependencies { 303 for i, v := range rsOld.Dependencies {
304 dependencies[i] = parseLegacyDependency(v) 304 depStr, err := parseLegacyDependency(v)
305 if err != nil {
306 return nil, fmt.Errorf("invalid dependency reference %q: %s", v, err)
307 }
308 dependencies[i] = depStr
305 } 309 }
306 310
307 return &instanceObjectStateV4{ 311 return &instanceObjectStateV4{
@@ -414,7 +418,7 @@ func simplifyImpliedValueType(ty cty.Type) cty.Type {
414 } 418 }
415} 419}
416 420
417func parseLegacyDependency(s string) string { 421func parseLegacyDependency(s string) (string, error) {
418 parts := strings.Split(s, ".") 422 parts := strings.Split(s, ".")
419 ret := parts[0] 423 ret := parts[0]
420 for _, part := range parts[1:] { 424 for _, part := range parts[1:] {
@@ -427,5 +431,14 @@ func parseLegacyDependency(s string) string {
427 } 431 }
428 ret = ret + "." + part 432 ret = ret + "." + part
429 } 433 }
430 return ret 434
435 // The result must parse as a reference, or else we'll create an invalid
436 // state file.
437 var diags tfdiags.Diagnostics
438 _, diags = addrs.ParseRefStr(ret)
439 if diags.HasErrors() {
440 return "", diags.Err()
441 }
442
443 return ret, nil
431} 444}