config: merge resources
This commit is contained in:
parent
14a25e6b58
commit
50830e429a
|
@ -1,5 +1,9 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
// configTree represents a tree of configurations where the root is the
|
// configTree represents a tree of configurations where the root is the
|
||||||
// first file and its children are the configurations it has imported.
|
// first file and its children are the configurations it has imported.
|
||||||
type configTree struct {
|
type configTree struct {
|
||||||
|
@ -62,7 +66,22 @@ func mergeConfig(c1, c2 *Config) (*Config, error) {
|
||||||
c.Variables[k] = v2
|
c.Variables[k] = v2
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: merge resources
|
// Merge resources: If they collide, we just take the latest one
|
||||||
|
// for now. In the future, we might provide smarter merge functionality.
|
||||||
|
resources := make(map[string]Resource)
|
||||||
|
for _, r := range c1.Resources {
|
||||||
|
id := fmt.Sprintf("%s[%s]", r.Type, r.Name)
|
||||||
|
resources[id] = r
|
||||||
|
}
|
||||||
|
for _, r := range c2.Resources {
|
||||||
|
id := fmt.Sprintf("%s[%s]", r.Type, r.Name)
|
||||||
|
resources[id] = r
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Resources = make([]Resource, 0, len(resources))
|
||||||
|
for _, r := range resources {
|
||||||
|
c.Resources = append(c.Resources, r)
|
||||||
|
}
|
||||||
|
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,12 +50,10 @@ func TestLoadBasic_import(t *testing.T) {
|
||||||
t.Fatalf("bad:\n%s", actual)
|
t.Fatalf("bad:\n%s", actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
actual = resourcesStr(c.Resources)
|
actual = resourcesStr(c.Resources)
|
||||||
if actual != strings.TrimSpace(basicResourcesStr) {
|
if actual != strings.TrimSpace(importResourcesStr) {
|
||||||
t.Fatalf("bad:\n%s", actual)
|
t.Fatalf("bad:\n%s", actual)
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This helper turns a resources field into a deterministic
|
// This helper turns a resources field into a deterministic
|
||||||
|
@ -111,6 +109,11 @@ foo
|
||||||
bar
|
bar
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const importResourcesStr = `
|
||||||
|
aws_security_group[db]
|
||||||
|
aws_security_group[web]
|
||||||
|
`
|
||||||
|
|
||||||
const importVariablesStr = `
|
const importVariablesStr = `
|
||||||
bar
|
bar
|
||||||
<>
|
<>
|
||||||
|
|
|
@ -4,3 +4,5 @@ variable "foo" {
|
||||||
default = "bar";
|
default = "bar";
|
||||||
description = "bar";
|
description = "bar";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "aws_security_group" "web" {}
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
variable "bar" {}
|
variable "bar" {}
|
||||||
|
|
||||||
|
resource "aws_security_group" "db" {}
|
||||||
|
|
Loading…
Reference in New Issue