terraform: remove config transformer old
This commit is contained in:
parent
9086e996d6
commit
0039f70d06
|
@ -1,106 +1,11 @@
|
||||||
package terraform
|
package terraform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/go-multierror"
|
|
||||||
"github.com/hashicorp/terraform/config"
|
"github.com/hashicorp/terraform/config"
|
||||||
"github.com/hashicorp/terraform/config/module"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ConfigTransformerOld is a GraphTransformer that adds the configuration
|
|
||||||
// to the graph. The module used to configure this transformer must be
|
|
||||||
// the root module. We'll look up the child module by the Path in the
|
|
||||||
// Graph.
|
|
||||||
type ConfigTransformerOld struct {
|
|
||||||
Module *module.Tree
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *ConfigTransformerOld) Transform(g *Graph) error {
|
|
||||||
// A module is required and also must be completely loaded.
|
|
||||||
if t.Module == nil {
|
|
||||||
return errors.New("module must not be nil")
|
|
||||||
}
|
|
||||||
if !t.Module.Loaded() {
|
|
||||||
return errors.New("module must be loaded")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the module we care about
|
|
||||||
module := t.Module.Child(g.Path[1:])
|
|
||||||
if module == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the configuration for this module
|
|
||||||
config := module.Config()
|
|
||||||
|
|
||||||
// Create the node list we'll use for the graph
|
|
||||||
nodes := make([]graphNodeConfig, 0,
|
|
||||||
(len(config.Variables)+
|
|
||||||
len(config.ProviderConfigs)+
|
|
||||||
len(config.Modules)+
|
|
||||||
len(config.Resources)+
|
|
||||||
len(config.Outputs))*2)
|
|
||||||
|
|
||||||
// Write all the variables out
|
|
||||||
for _, v := range config.Variables {
|
|
||||||
nodes = append(nodes, &GraphNodeConfigVariable{
|
|
||||||
Variable: v,
|
|
||||||
ModuleTree: t.Module,
|
|
||||||
ModulePath: g.Path,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write all the provider configs out
|
|
||||||
for _, pc := range config.ProviderConfigs {
|
|
||||||
nodes = append(nodes, &GraphNodeConfigProvider{Provider: pc})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write all the resources out
|
|
||||||
for _, r := range config.Resources {
|
|
||||||
nodes = append(nodes, &GraphNodeConfigResource{
|
|
||||||
Resource: r,
|
|
||||||
Path: g.Path,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write all the modules out
|
|
||||||
children := module.Children()
|
|
||||||
for _, m := range config.Modules {
|
|
||||||
path := make([]string, len(g.Path), len(g.Path)+1)
|
|
||||||
copy(path, g.Path)
|
|
||||||
path = append(path, m.Name)
|
|
||||||
|
|
||||||
nodes = append(nodes, &GraphNodeConfigModule{
|
|
||||||
Path: path,
|
|
||||||
Module: m,
|
|
||||||
Tree: children[m.Name],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Err is where the final error value will go if there is one
|
|
||||||
var err error
|
|
||||||
|
|
||||||
// Build the graph vertices
|
|
||||||
for _, n := range nodes {
|
|
||||||
g.Add(n)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build up the dependencies. We have to do this outside of the above
|
|
||||||
// loop since the nodes need to be in place for us to build the deps.
|
|
||||||
for _, n := range nodes {
|
|
||||||
if missing := g.ConnectDependent(n); len(missing) > 0 {
|
|
||||||
for _, m := range missing {
|
|
||||||
err = multierror.Append(err, fmt.Errorf(
|
|
||||||
"%s: missing dependency: %s", n.Name(), m))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// varNameForVar returns the VarName value for an interpolated variable.
|
// varNameForVar returns the VarName value for an interpolated variable.
|
||||||
// This value is compared to the VarName() value for the nodes within the
|
// This value is compared to the VarName() value for the nodes within the
|
||||||
// graph to build the graph edges.
|
// graph to build the graph edges.
|
||||||
|
|
|
@ -1,136 +0,0 @@
|
||||||
package terraform
|
|
||||||
|
|
||||||
import (
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/config/module"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestConfigTransformerOld_nilModule(t *testing.T) {
|
|
||||||
g := Graph{Path: RootModulePath}
|
|
||||||
tf := &ConfigTransformerOld{}
|
|
||||||
if err := tf.Transform(&g); err == nil {
|
|
||||||
t.Fatal("should error")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConfigTransformerOld_unloadedModule(t *testing.T) {
|
|
||||||
mod, err := module.NewTreeModule(
|
|
||||||
"", filepath.Join(fixtureDir, "graph-basic"))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("err: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
g := Graph{Path: RootModulePath}
|
|
||||||
tf := &ConfigTransformerOld{Module: mod}
|
|
||||||
if err := tf.Transform(&g); err == nil {
|
|
||||||
t.Fatal("should error")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConfigTransformerOld(t *testing.T) {
|
|
||||||
g := Graph{Path: RootModulePath}
|
|
||||||
tf := &ConfigTransformerOld{Module: testModule(t, "graph-basic")}
|
|
||||||
if err := tf.Transform(&g); err != nil {
|
|
||||||
t.Fatalf("err: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
actual := strings.TrimSpace(g.String())
|
|
||||||
expected := strings.TrimSpace(testGraphBasicStr)
|
|
||||||
if actual != expected {
|
|
||||||
t.Fatalf("bad:\n\n%s", actual)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConfigTransformerOld_dependsOn(t *testing.T) {
|
|
||||||
g := Graph{Path: RootModulePath}
|
|
||||||
tf := &ConfigTransformerOld{Module: testModule(t, "graph-depends-on")}
|
|
||||||
if err := tf.Transform(&g); err != nil {
|
|
||||||
t.Fatalf("err: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
actual := strings.TrimSpace(g.String())
|
|
||||||
expected := strings.TrimSpace(testGraphDependsOnStr)
|
|
||||||
if actual != expected {
|
|
||||||
t.Fatalf("bad:\n\n%s", actual)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConfigTransformerOld_modules(t *testing.T) {
|
|
||||||
g := Graph{Path: RootModulePath}
|
|
||||||
tf := &ConfigTransformerOld{Module: testModule(t, "graph-modules")}
|
|
||||||
if err := tf.Transform(&g); err != nil {
|
|
||||||
t.Fatalf("err: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
actual := strings.TrimSpace(g.String())
|
|
||||||
expected := strings.TrimSpace(testGraphModulesStr)
|
|
||||||
if actual != expected {
|
|
||||||
t.Fatalf("bad:\n\n%s", actual)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConfigTransformerOld_providerAlias(t *testing.T) {
|
|
||||||
g := Graph{Path: RootModulePath}
|
|
||||||
tf := &ConfigTransformerOld{Module: testModule(t, "graph-provider-alias")}
|
|
||||||
if err := tf.Transform(&g); err != nil {
|
|
||||||
t.Fatalf("err: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
actual := strings.TrimSpace(g.String())
|
|
||||||
expected := strings.TrimSpace(testGraphProviderAliasStr)
|
|
||||||
if actual != expected {
|
|
||||||
t.Fatalf("bad:\n\n%s", actual)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConfigTransformerOld_errMissingDeps(t *testing.T) {
|
|
||||||
g := Graph{Path: RootModulePath}
|
|
||||||
tf := &ConfigTransformerOld{Module: testModule(t, "graph-missing-deps")}
|
|
||||||
if err := tf.Transform(&g); err == nil {
|
|
||||||
t.Fatalf("err: %s", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const testGraphBasicStr = `
|
|
||||||
aws_instance.web
|
|
||||||
aws_security_group.firewall
|
|
||||||
var.foo
|
|
||||||
aws_load_balancer.weblb
|
|
||||||
aws_instance.web
|
|
||||||
aws_security_group.firewall
|
|
||||||
openstack_floating_ip.random
|
|
||||||
provider.aws
|
|
||||||
openstack_floating_ip.random
|
|
||||||
var.foo
|
|
||||||
`
|
|
||||||
|
|
||||||
const testGraphDependsOnStr = `
|
|
||||||
aws_instance.db
|
|
||||||
aws_instance.web
|
|
||||||
aws_instance.web
|
|
||||||
`
|
|
||||||
|
|
||||||
const testGraphModulesStr = `
|
|
||||||
aws_instance.web
|
|
||||||
aws_security_group.firewall
|
|
||||||
module.consul
|
|
||||||
aws_security_group.firewall
|
|
||||||
module.consul
|
|
||||||
aws_security_group.firewall
|
|
||||||
provider.aws
|
|
||||||
`
|
|
||||||
|
|
||||||
const testGraphOutputsStr = `
|
|
||||||
aws_instance.foo
|
|
||||||
output.foo
|
|
||||||
aws_instance.foo
|
|
||||||
`
|
|
||||||
|
|
||||||
const testGraphProviderAliasStr = `
|
|
||||||
provider.aws
|
|
||||||
provider.aws.bar
|
|
||||||
provider.aws.foo
|
|
||||||
`
|
|
Loading…
Reference in New Issue