diff options
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/states/statefile/version3.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/states/statefile/version3.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/states/statefile/version3.go b/vendor/github.com/hashicorp/terraform/states/statefile/version3.go new file mode 100644 index 0000000..ab6414b --- /dev/null +++ b/vendor/github.com/hashicorp/terraform/states/statefile/version3.go | |||
@@ -0,0 +1,50 @@ | |||
1 | package statefile | ||
2 | |||
3 | import ( | ||
4 | "encoding/json" | ||
5 | "fmt" | ||
6 | |||
7 | "github.com/hashicorp/terraform/tfdiags" | ||
8 | ) | ||
9 | |||
10 | func readStateV3(src []byte) (*File, tfdiags.Diagnostics) { | ||
11 | var diags tfdiags.Diagnostics | ||
12 | sV3 := &stateV3{} | ||
13 | err := json.Unmarshal(src, sV3) | ||
14 | if err != nil { | ||
15 | diags = diags.Append(jsonUnmarshalDiags(err)) | ||
16 | return nil, diags | ||
17 | } | ||
18 | |||
19 | file, prepDiags := prepareStateV3(sV3) | ||
20 | diags = diags.Append(prepDiags) | ||
21 | return file, diags | ||
22 | } | ||
23 | |||
24 | func prepareStateV3(sV3 *stateV3) (*File, tfdiags.Diagnostics) { | ||
25 | var diags tfdiags.Diagnostics | ||
26 | sV4, err := upgradeStateV3ToV4(sV3) | ||
27 | if err != nil { | ||
28 | diags = diags.Append(tfdiags.Sourceless( | ||
29 | tfdiags.Error, | ||
30 | upgradeFailed, | ||
31 | fmt.Sprintf("Error upgrading state file format from version 3 to version 4: %s.", err), | ||
32 | )) | ||
33 | return nil, diags | ||
34 | } | ||
35 | |||
36 | file, prepDiags := prepareStateV4(sV4) | ||
37 | diags = diags.Append(prepDiags) | ||
38 | return file, diags | ||
39 | } | ||
40 | |||
41 | // stateV2 is a representation of the legacy JSON state format version 3. | ||
42 | // | ||
43 | // It is only used to read version 3 JSON files prior to upgrading them to | ||
44 | // the current format. | ||
45 | // | ||
46 | // The differences between version 2 and version 3 are only in the data and | ||
47 | // not in the structure, so stateV3 actually shares the same structs as | ||
48 | // stateV2. Type stateV3 represents that the data within is formatted as | ||
49 | // expected by the V3 format, rather than the V2 format. | ||
50 | type stateV3 stateV2 | ||