diff options
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.go | 27 |
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 | ||
417 | func parseLegacyDependency(s string) string { | 421 | func 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 | } |