mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
core: Legacy ApplyFn handling for MockProvisioner
This commit is contained in:
parent
d48f3600fe
commit
859b384558
@ -1,11 +1,12 @@
|
|||||||
package terraform
|
package terraform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/zclconf/go-cty/cty"
|
||||||
|
"github.com/zclconf/go-cty/cty/convert"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/provisioners"
|
"github.com/hashicorp/terraform/provisioners"
|
||||||
"github.com/hashicorp/terraform/tfdiags"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ provisioners.Interface = (*MockProvisioner)(nil)
|
var _ provisioners.Interface = (*MockProvisioner)(nil)
|
||||||
@ -50,6 +51,12 @@ func (p *MockProvisioner) GetSchema() provisioners.GetSchemaResponse {
|
|||||||
defer p.Unlock()
|
defer p.Unlock()
|
||||||
|
|
||||||
p.GetSchemaCalled = true
|
p.GetSchemaCalled = true
|
||||||
|
return p.getSchema()
|
||||||
|
}
|
||||||
|
|
||||||
|
// getSchema is the implementation of GetSchema, which can be called from other
|
||||||
|
// methods on MockProvisioner that may already be holding the lock.
|
||||||
|
func (p *MockProvisioner) getSchema() provisioners.GetSchemaResponse {
|
||||||
return p.GetSchemaResponse
|
return p.GetSchemaResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,12 +74,40 @@ func (p *MockProvisioner) ValidateProvisionerConfig(r provisioners.ValidateProvi
|
|||||||
|
|
||||||
func (p *MockProvisioner) ProvisionResource(r provisioners.ProvisionResourceRequest) provisioners.ProvisionResourceResponse {
|
func (p *MockProvisioner) ProvisionResource(r provisioners.ProvisionResourceRequest) provisioners.ProvisionResourceResponse {
|
||||||
p.Lock()
|
p.Lock()
|
||||||
|
defer p.Unlock()
|
||||||
|
|
||||||
p.ProvisionResourceCalled = true
|
p.ProvisionResourceCalled = true
|
||||||
p.ProvisionResourceRequest = r
|
p.ProvisionResourceRequest = r
|
||||||
if p.ApplyFn != nil {
|
if p.ApplyFn != nil {
|
||||||
return provisioners.ProvisionResourceResponse{
|
schema := p.getSchema()
|
||||||
Diagnostics: tfdiags.Diagnostics(nil).Append(fmt.Errorf("legacy ApplyFn handling in MockProvisioner not actually implemented yet")),
|
rc := NewResourceConfigShimmed(r.Config, schema.Provisioner)
|
||||||
|
connVal := r.Connection
|
||||||
|
connMap := map[string]string{}
|
||||||
|
for it := connVal.ElementIterator(); it.Next(); {
|
||||||
|
ak, av := it.Element()
|
||||||
|
name := ak.AsString()
|
||||||
|
|
||||||
|
if !av.IsKnown() || av.IsNull() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
av, _ = convert.Convert(av, cty.String)
|
||||||
|
connMap[name] = av.AsString()
|
||||||
}
|
}
|
||||||
|
// We no longer pass the full instance state to a provisioner, so we'll
|
||||||
|
// construct a partial one that should be good enough for what existing
|
||||||
|
// test mocks need.
|
||||||
|
is := &InstanceState{
|
||||||
|
Ephemeral: EphemeralState{
|
||||||
|
ConnInfo: connMap,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
var resp provisioners.ProvisionResourceResponse
|
||||||
|
err := p.ApplyFn(is, rc)
|
||||||
|
if err != nil {
|
||||||
|
resp.Diagnostics = resp.Diagnostics.Append(err)
|
||||||
|
}
|
||||||
|
return resp
|
||||||
}
|
}
|
||||||
if p.ProvisionResourceFn != nil {
|
if p.ProvisionResourceFn != nil {
|
||||||
fn := p.ProvisionResourceFn
|
fn := p.ProvisionResourceFn
|
||||||
@ -80,7 +115,6 @@ func (p *MockProvisioner) ProvisionResource(r provisioners.ProvisionResourceRequ
|
|||||||
return fn(r)
|
return fn(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
defer p.Unlock()
|
|
||||||
return p.ProvisionResourceResponse
|
return p.ProvisionResourceResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user