remove ParentProviderTransformer
There is no longer any concept of a "parent provider". Inheritance of default providers is discovered and connected in the ProviderTransformer itself.
This commit is contained in:
parent
0da0b24527
commit
b1d8d856ca
|
@ -31,8 +31,6 @@ func TransformProviders(providers []string, concrete ConcreteProviderNodeFunc, c
|
||||||
},
|
},
|
||||||
// Remove unused providers and proxies
|
// Remove unused providers and proxies
|
||||||
&PruneProviderTransformer{},
|
&PruneProviderTransformer{},
|
||||||
// Connect provider to their parent provider nodes
|
|
||||||
&ParentProviderTransformer{},
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,42 +355,6 @@ func (t *MissingProviderTransformer) Transform(g *Graph) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// ParentProviderTransformer connects provider nodes to their parents.
|
|
||||||
//
|
|
||||||
// This works by finding nodes that are both GraphNodeProviders and
|
|
||||||
// GraphNodeModuleInstance. It then connects the providers to their parent
|
|
||||||
// path. The parent provider is always at the root level.
|
|
||||||
type ParentProviderTransformer struct{}
|
|
||||||
|
|
||||||
func (t *ParentProviderTransformer) Transform(g *Graph) error {
|
|
||||||
pm := providerVertexMap(g)
|
|
||||||
for _, v := range g.Vertices() {
|
|
||||||
// Only care about providers
|
|
||||||
pn, ok := v.(GraphNodeProvider)
|
|
||||||
if !ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Also require non-empty path, since otherwise we're in the root
|
|
||||||
// module and so cannot have a parent.
|
|
||||||
if len(pn.ModulePath()) <= 1 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// this provider may be disabled, but we can only get it's name from
|
|
||||||
// the ProviderName string
|
|
||||||
addr := pn.ProviderAddr()
|
|
||||||
parentAddr, ok := addr.Inherited()
|
|
||||||
if ok {
|
|
||||||
parent := pm[parentAddr.String()]
|
|
||||||
if parent != nil {
|
|
||||||
g.Connect(dag.BasicEdge(v, parent))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// PruneProviderTransformer removes any providers that are not actually used by
|
// PruneProviderTransformer removes any providers that are not actually used by
|
||||||
// anything, and provider proxies. This avoids the provider being initialized
|
// anything, and provider proxies. This avoids the provider being initialized
|
||||||
// and configured. This both saves resources but also avoids errors since
|
// and configured. This both saves resources but also avoids errors since
|
||||||
|
|
|
@ -434,6 +434,57 @@ func TestProviderConfigTransformer_grandparentProviders(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProviderConfigTransformer_inheritOldSkool(t *testing.T) {
|
||||||
|
mod := testModuleInline(t, map[string]string{
|
||||||
|
"main.tf": `
|
||||||
|
provider "test" {
|
||||||
|
test_string = "config"
|
||||||
|
}
|
||||||
|
|
||||||
|
module "moda" {
|
||||||
|
source = "./moda"
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
|
||||||
|
"moda/main.tf": `
|
||||||
|
resource "test_object" "a" {
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
})
|
||||||
|
concrete := func(a *NodeAbstractProvider) dag.Vertex { return a }
|
||||||
|
|
||||||
|
g := Graph{Path: addrs.RootModuleInstance}
|
||||||
|
|
||||||
|
{
|
||||||
|
tf := &ConfigTransformer{Config: mod}
|
||||||
|
if err := tf.Transform(&g); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
tf := &AttachResourceConfigTransformer{Config: mod}
|
||||||
|
if err := tf.Transform(&g); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
tf := TransformProviders([]string{"registry.terraform.io/hashicorp/test"}, concrete, mod)
|
||||||
|
if err := tf.Transform(&g); err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
expected := `module.moda.test_object.a
|
||||||
|
provider["registry.terraform.io/hashicorp/test"]
|
||||||
|
provider["registry.terraform.io/hashicorp/test"]`
|
||||||
|
|
||||||
|
actual := strings.TrimSpace(g.String())
|
||||||
|
if actual != expected {
|
||||||
|
t.Fatalf("expected:\n%s\n\ngot:\n%s", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Verify that configurations which are not recommended yet supported still work
|
// Verify that configurations which are not recommended yet supported still work
|
||||||
func TestProviderConfigTransformer_nestedModuleProviders(t *testing.T) {
|
func TestProviderConfigTransformer_nestedModuleProviders(t *testing.T) {
|
||||||
mod := testModuleInline(t, map[string]string{
|
mod := testModuleInline(t, map[string]string{
|
||||||
|
|
Loading…
Reference in New Issue