mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
Merge pull request #17035 from hashicorp/jbardin/close-providers
Close providers
This commit is contained in:
commit
3cde03bab1
@ -2401,6 +2401,32 @@ func TestContext2Plan_hook(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestContext2Plan_closeProvider(t *testing.T) {
|
||||||
|
// this fixture only has an aliased provider located in the module, to make
|
||||||
|
// sure that the provier name contains a path more complex than
|
||||||
|
// "provider.aws".
|
||||||
|
m := testModule(t, "plan-close-module-provider")
|
||||||
|
p := testProvider("aws")
|
||||||
|
p.DiffFn = testDiffFn
|
||||||
|
ctx := testContext2(t, &ContextOpts{
|
||||||
|
Module: m,
|
||||||
|
ProviderResolver: ResourceProviderResolverFixed(
|
||||||
|
map[string]ResourceProviderFactory{
|
||||||
|
"aws": testProviderFuncFixed(p),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
})
|
||||||
|
|
||||||
|
_, err := ctx.Plan()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !p.CloseCalled {
|
||||||
|
t.Fatal("provider not closed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestContext2Plan_orphan(t *testing.T) {
|
func TestContext2Plan_orphan(t *testing.T) {
|
||||||
m := testModule(t, "plan-orphan")
|
m := testModule(t, "plan-orphan")
|
||||||
p := testProvider("aws")
|
p := testProvider("aws")
|
||||||
|
@ -90,7 +90,8 @@ func TestEvalInitProvider(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestEvalCloseProvider(t *testing.T) {
|
func TestEvalCloseProvider(t *testing.T) {
|
||||||
n := &EvalCloseProvider{Name: "foo"}
|
providerName := ResolveProviderName("foo", nil)
|
||||||
|
n := &EvalCloseProvider{Name: providerName}
|
||||||
provider := &MockResourceProvider{}
|
provider := &MockResourceProvider{}
|
||||||
ctx := &MockEvalContext{CloseProviderProvider: provider}
|
ctx := &MockEvalContext{CloseProviderProvider: provider}
|
||||||
if _, err := n.Eval(ctx); err != nil {
|
if _, err := n.Eval(ctx); err != nil {
|
||||||
@ -100,7 +101,7 @@ func TestEvalCloseProvider(t *testing.T) {
|
|||||||
if !ctx.CloseProviderCalled {
|
if !ctx.CloseProviderCalled {
|
||||||
t.Fatal("should be called")
|
t.Fatal("should be called")
|
||||||
}
|
}
|
||||||
if ctx.CloseProviderName != "foo" {
|
if ctx.CloseProviderName != providerName {
|
||||||
t.Fatalf("bad: %#v", ctx.CloseProviderName)
|
t.Fatalf("bad: %#v", ctx.CloseProviderName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
module "mod" {
|
||||||
|
source = "./mod"
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
provider "aws" {
|
||||||
|
alias = "mod"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_instance" "bar" {
|
||||||
|
provider = "aws.mod"
|
||||||
|
}
|
@ -138,13 +138,13 @@ func (t *CloseProviderTransformer) Transform(g *Graph) error {
|
|||||||
p := v.(GraphNodeProvider)
|
p := v.(GraphNodeProvider)
|
||||||
|
|
||||||
// get the close provider of this type if we alread created it
|
// get the close provider of this type if we alread created it
|
||||||
closer := cpm[p.ProviderName()]
|
closer := cpm[p.Name()]
|
||||||
|
|
||||||
if closer == nil {
|
if closer == nil {
|
||||||
// create a closer for this provider type
|
// create a closer for this provider type
|
||||||
closer = &graphNodeCloseProvider{ProviderNameValue: p.ProviderName()}
|
closer = &graphNodeCloseProvider{ProviderNameValue: p.Name()}
|
||||||
g.Add(closer)
|
g.Add(closer)
|
||||||
cpm[p.ProviderName()] = closer
|
cpm[p.Name()] = closer
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close node depends on the provider itself
|
// Close node depends on the provider itself
|
||||||
@ -336,7 +336,7 @@ type graphNodeCloseProvider struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (n *graphNodeCloseProvider) Name() string {
|
func (n *graphNodeCloseProvider) Name() string {
|
||||||
return fmt.Sprintf("provider.%s (close)", n.ProviderNameValue)
|
return n.ProviderNameValue + " (close)"
|
||||||
}
|
}
|
||||||
|
|
||||||
// GraphNodeEvalable impl.
|
// GraphNodeEvalable impl.
|
||||||
|
Loading…
Reference in New Issue
Block a user