diff options
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/states/statefile/file.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/states/statefile/file.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/states/statefile/file.go b/vendor/github.com/hashicorp/terraform/states/statefile/file.go new file mode 100644 index 0000000..6e20240 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform/states/statefile/file.go | |||
@@ -0,0 +1,62 @@ | |||
1 | package statefile | ||
2 | |||
3 | import ( | ||
4 | version "github.com/hashicorp/go-version" | ||
5 | |||
6 | "github.com/hashicorp/terraform/states" | ||
7 | tfversion "github.com/hashicorp/terraform/version" | ||
8 | ) | ||
9 | |||
10 | // File is the in-memory representation of a state file. It includes the state | ||
11 | // itself along with various metadata used to track changing state files for | ||
12 | // the same configuration over time. | ||
13 | type File struct { | ||
14 | // TerraformVersion is the version of Terraform that wrote this state file. | ||
15 | TerraformVersion *version.Version | ||
16 | |||
17 | // Serial is incremented on any operation that modifies | ||
18 | // the State file. It is used to detect potentially conflicting | ||
19 | // updates. | ||
20 | Serial uint64 | ||
21 | |||
22 | // Lineage is set when a new, blank state file is created and then | ||
23 | // never updated. This allows us to determine whether the serials | ||
24 | // of two states can be meaningfully compared. | ||
25 | // Apart from the guarantee that collisions between two lineages | ||
26 | // are very unlikely, this value is opaque and external callers | ||
27 | // should only compare lineage strings byte-for-byte for equality. | ||
28 | Lineage string | ||
29 | |||
30 | // State is the actual state represented by this file. | ||
31 | State *states.State | ||
32 | } | ||
33 | |||
34 | func New(state *states.State, lineage string, serial uint64) *File { | ||
35 | // To make life easier on callers, we'll accept a nil state here and just | ||
36 | // allocate an empty one, which is required for this file to be successfully | ||
37 | // written out. | ||
38 | if state == nil { | ||
39 | state = states.NewState() | ||
40 | } | ||
41 | |||
42 | return &File{ | ||
43 | TerraformVersion: tfversion.SemVer, | ||
44 | State: state, | ||
45 | Lineage: lineage, | ||
46 | Serial: serial, | ||
47 | } | ||
48 | } | ||
49 | |||
50 | // DeepCopy is a convenience method to create a new File object whose state | ||
51 | // is a deep copy of the receiver's, as implemented by states.State.DeepCopy. | ||
52 | func (f *File) DeepCopy() *File { | ||
53 | if f == nil { | ||
54 | return nil | ||
55 | } | ||
56 | return &File{ | ||
57 | TerraformVersion: f.TerraformVersion, | ||
58 | Serial: f.Serial, | ||
59 | Lineage: f.Lineage, | ||
60 | State: f.State.DeepCopy(), | ||
61 | } | ||
62 | } | ||