Merge pull request #12942 from hashicorp/jbardin/GH-12905
merge config.Terraform fields in config.Append
This commit is contained in:
commit
579e15c97c
|
@ -35,8 +35,13 @@ func Append(c1, c2 *Config) (*Config, error) {
|
||||||
c.Atlas = c2.Atlas
|
c.Atlas = c2.Atlas
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Terraform = c1.Terraform
|
// merge Terraform blocks
|
||||||
if c2.Terraform != nil {
|
if c1.Terraform != nil {
|
||||||
|
c.Terraform = c1.Terraform
|
||||||
|
if c2.Terraform != nil {
|
||||||
|
c.Terraform.Merge(c2.Terraform)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
c.Terraform = c2.Terraform
|
c.Terraform = c2.Terraform
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -118,6 +118,31 @@ func TestAppend(t *testing.T) {
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// appending configs merges terraform blocks
|
||||||
|
{
|
||||||
|
&Config{
|
||||||
|
Terraform: &Terraform{
|
||||||
|
RequiredVersion: "A",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&Config{
|
||||||
|
Terraform: &Terraform{
|
||||||
|
Backend: &Backend{
|
||||||
|
Type: "test",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&Config{
|
||||||
|
Terraform: &Terraform{
|
||||||
|
RequiredVersion: "A",
|
||||||
|
Backend: &Backend{
|
||||||
|
Type: "test",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tc := range cases {
|
for i, tc := range cases {
|
||||||
|
|
|
@ -47,6 +47,18 @@ func (t *Terraform) Validate() []error {
|
||||||
return errs
|
return errs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Merge t with t2.
|
||||||
|
// Any conflicting fields are overwritten by t2.
|
||||||
|
func (t *Terraform) Merge(t2 *Terraform) {
|
||||||
|
if t2.RequiredVersion != "" {
|
||||||
|
t.RequiredVersion = t2.RequiredVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
if t2.Backend != nil {
|
||||||
|
t.Backend = t2.Backend
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Backend is the configuration for the "backend" to use with Terraform.
|
// Backend is the configuration for the "backend" to use with Terraform.
|
||||||
// A backend is responsible for all major behavior of Terraform's core.
|
// A backend is responsible for all major behavior of Terraform's core.
|
||||||
// The abstraction layer above the core (the "backend") allows for behavior
|
// The abstraction layer above the core (the "backend") allows for behavior
|
||||||
|
|
|
@ -32,9 +32,13 @@ func Merge(c1, c2 *Config) (*Config, error) {
|
||||||
c.Atlas = c2.Atlas
|
c.Atlas = c2.Atlas
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge the Terraform configuration, which is a complete overwrite.
|
// Merge the Terraform configuration
|
||||||
c.Terraform = c1.Terraform
|
if c1.Terraform != nil {
|
||||||
if c2.Terraform != nil {
|
c.Terraform = c1.Terraform
|
||||||
|
if c2.Terraform != nil {
|
||||||
|
c.Terraform.Merge(c2.Terraform)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
c.Terraform = c2.Terraform
|
c.Terraform = c2.Terraform
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -434,6 +434,31 @@ func TestMerge(t *testing.T) {
|
||||||
},
|
},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// terraform blocks are merged, not overwritten
|
||||||
|
{
|
||||||
|
&Config{
|
||||||
|
Terraform: &Terraform{
|
||||||
|
RequiredVersion: "A",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&Config{
|
||||||
|
Terraform: &Terraform{
|
||||||
|
Backend: &Backend{
|
||||||
|
Type: "test",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&Config{
|
||||||
|
Terraform: &Terraform{
|
||||||
|
RequiredVersion: "A",
|
||||||
|
Backend: &Backend{
|
||||||
|
Type: "test",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tc := range cases {
|
for i, tc := range cases {
|
||||||
|
|
Loading…
Reference in New Issue