diff options
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/config/append.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/config/append.go | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/config/append.go b/vendor/github.com/hashicorp/terraform/config/append.go new file mode 100644 index 0000000..5f4e89e --- /dev/null +++ b/vendor/github.com/hashicorp/terraform/config/append.go | |||
@@ -0,0 +1,86 @@ | |||
1 | package config | ||
2 | |||
3 | // Append appends one configuration to another. | ||
4 | // | ||
5 | // Append assumes that both configurations will not have | ||
6 | // conflicting variables, resources, etc. If they do, the | ||
7 | // problems will be caught in the validation phase. | ||
8 | // | ||
9 | // It is possible that c1, c2 on their own are not valid. For | ||
10 | // example, a resource in c2 may reference a variable in c1. But | ||
11 | // together, they would be valid. | ||
12 | func Append(c1, c2 *Config) (*Config, error) { | ||
13 | c := new(Config) | ||
14 | |||
15 | // Append unknown keys, but keep them unique since it is a set | ||
16 | unknowns := make(map[string]struct{}) | ||
17 | for _, k := range c1.unknownKeys { | ||
18 | _, present := unknowns[k] | ||
19 | if !present { | ||
20 | unknowns[k] = struct{}{} | ||
21 | c.unknownKeys = append(c.unknownKeys, k) | ||
22 | } | ||
23 | } | ||
24 | |||
25 | for _, k := range c2.unknownKeys { | ||
26 | _, present := unknowns[k] | ||
27 | if !present { | ||
28 | unknowns[k] = struct{}{} | ||
29 | c.unknownKeys = append(c.unknownKeys, k) | ||
30 | } | ||
31 | } | ||
32 | |||
33 | c.Atlas = c1.Atlas | ||
34 | if c2.Atlas != nil { | ||
35 | c.Atlas = c2.Atlas | ||
36 | } | ||
37 | |||
38 | // merge Terraform blocks | ||
39 | if c1.Terraform != nil { | ||
40 | c.Terraform = c1.Terraform | ||
41 | if c2.Terraform != nil { | ||
42 | c.Terraform.Merge(c2.Terraform) | ||
43 | } | ||
44 | } else { | ||
45 | c.Terraform = c2.Terraform | ||
46 | } | ||
47 | |||
48 | if len(c1.Modules) > 0 || len(c2.Modules) > 0 { | ||
49 | c.Modules = make( | ||
50 | []*Module, 0, len(c1.Modules)+len(c2.Modules)) | ||
51 | c.Modules = append(c.Modules, c1.Modules...) | ||
52 | c.Modules = append(c.Modules, c2.Modules...) | ||
53 | } | ||
54 | |||
55 | if len(c1.Outputs) > 0 || len(c2.Outputs) > 0 { | ||
56 | c.Outputs = make( | ||
57 | []*Output, 0, len(c1.Outputs)+len(c2.Outputs)) | ||
58 | c.Outputs = append(c.Outputs, c1.Outputs...) | ||
59 | c.Outputs = append(c.Outputs, c2.Outputs...) | ||
60 | } | ||
61 | |||
62 | if len(c1.ProviderConfigs) > 0 || len(c2.ProviderConfigs) > 0 { | ||
63 | c.ProviderConfigs = make( | ||
64 | []*ProviderConfig, | ||
65 | 0, len(c1.ProviderConfigs)+len(c2.ProviderConfigs)) | ||
66 | c.ProviderConfigs = append(c.ProviderConfigs, c1.ProviderConfigs...) | ||
67 | c.ProviderConfigs = append(c.ProviderConfigs, c2.ProviderConfigs...) | ||
68 | } | ||
69 | |||
70 | if len(c1.Resources) > 0 || len(c2.Resources) > 0 { | ||
71 | c.Resources = make( | ||
72 | []*Resource, | ||
73 | 0, len(c1.Resources)+len(c2.Resources)) | ||
74 | c.Resources = append(c.Resources, c1.Resources...) | ||
75 | c.Resources = append(c.Resources, c2.Resources...) | ||
76 | } | ||
77 | |||
78 | if len(c1.Variables) > 0 || len(c2.Variables) > 0 { | ||
79 | c.Variables = make( | ||
80 | []*Variable, 0, len(c1.Variables)+len(c2.Variables)) | ||
81 | c.Variables = append(c.Variables, c1.Variables...) | ||
82 | c.Variables = append(c.Variables, c2.Variables...) | ||
83 | } | ||
84 | |||
85 | return c, nil | ||
86 | } | ||