terraform: placeholder key for computed values
This commit is contained in:
parent
63e1b6f6b7
commit
9018beda81
|
@ -1,5 +1,10 @@
|
||||||
package terraform
|
package terraform
|
||||||
|
|
||||||
|
// ComputedPlaceholderKey is the configuration key given to Configure
|
||||||
|
// in a ResourceProvider that contains the value for the computed value
|
||||||
|
// placeholder when diffs are being done.
|
||||||
|
const ComputedPlaceholderKey = "tf_computed_placeholder"
|
||||||
|
|
||||||
// ResourceProvider is an interface that must be implemented by any
|
// ResourceProvider is an interface that must be implemented by any
|
||||||
// resource provider: the thing that creates and manages the resources in
|
// resource provider: the thing that creates and manages the resources in
|
||||||
// a Terraform configuration.
|
// a Terraform configuration.
|
||||||
|
@ -28,6 +33,14 @@ type ResourceProvider interface {
|
||||||
map[string]interface{}) (ResourceDiff, error)
|
map[string]interface{}) (ResourceDiff, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ResourceProviderCommonConfig contains the common configuration
|
||||||
|
// keys that are sent with every resource provider configuration.
|
||||||
|
// This can be used with something like mapstructure to extract
|
||||||
|
// the proper value.
|
||||||
|
type ResourceProviderCommonConfig struct {
|
||||||
|
TFComputedPlaceholder string `mapstructure:"tf_computed_placeholder"`
|
||||||
|
}
|
||||||
|
|
||||||
// ResourceType is a type of resource that a resource provider can manage.
|
// ResourceType is a type of resource that a resource provider can manage.
|
||||||
type ResourceType struct {
|
type ResourceType struct {
|
||||||
Name string
|
Name string
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
package terraform
|
package terraform
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mitchellh/mapstructure"
|
||||||
|
)
|
||||||
|
|
||||||
// MockResourceProvider implements ResourceProvider but mocks out all the
|
// MockResourceProvider implements ResourceProvider but mocks out all the
|
||||||
// calls for testing purposes.
|
// calls for testing purposes.
|
||||||
type MockResourceProvider struct {
|
type MockResourceProvider struct {
|
||||||
|
@ -7,6 +11,7 @@ type MockResourceProvider struct {
|
||||||
Meta interface{}
|
Meta interface{}
|
||||||
|
|
||||||
ConfigureCalled bool
|
ConfigureCalled bool
|
||||||
|
ConfigureCommonConfig ResourceProviderCommonConfig
|
||||||
ConfigureConfig map[string]interface{}
|
ConfigureConfig map[string]interface{}
|
||||||
ConfigureReturnWarnings []string
|
ConfigureReturnWarnings []string
|
||||||
ConfigureReturnError error
|
ConfigureReturnError error
|
||||||
|
@ -23,6 +28,11 @@ type MockResourceProvider struct {
|
||||||
func (p *MockResourceProvider) Configure(c map[string]interface{}) ([]string, error) {
|
func (p *MockResourceProvider) Configure(c map[string]interface{}) ([]string, error) {
|
||||||
p.ConfigureCalled = true
|
p.ConfigureCalled = true
|
||||||
p.ConfigureConfig = c
|
p.ConfigureConfig = c
|
||||||
|
|
||||||
|
if err := mapstructure.Decode(&p.ConfigureCommonConfig, c); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return p.ConfigureReturnWarnings, p.ConfigureReturnError
|
return p.ConfigureReturnWarnings, p.ConfigureReturnError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,20 @@ func TestNew(t *testing.T) {
|
||||||
if testProviderName(mapping["do_droplet.bar"]) != "do" {
|
if testProviderName(mapping["do_droplet.bar"]) != "do" {
|
||||||
t.Fatalf("bad: %#v", mapping)
|
t.Fatalf("bad: %#v", mapping)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
val := testProviderMock(mapping["aws_instance.foo"]).
|
||||||
|
ConfigureCommonConfig.TFComputedPlaceholder
|
||||||
|
if val == "" {
|
||||||
|
t.Fatal("should have computed placeholder")
|
||||||
|
}
|
||||||
|
|
||||||
|
val = testProviderMock(mapping["aws_instance.bar"]).
|
||||||
|
ConfigureCommonConfig.TFComputedPlaceholder
|
||||||
|
if val == "" {
|
||||||
|
t.Fatal("should have computed placeholder")
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNew_graphCycle(t *testing.T) {
|
func TestNew_graphCycle(t *testing.T) {
|
||||||
|
@ -169,8 +183,12 @@ func testProviderFunc(n string, rs []string) ResourceProviderFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testProviderMock(p ResourceProvider) *MockResourceProvider {
|
||||||
|
return p.(*MockResourceProvider)
|
||||||
|
}
|
||||||
|
|
||||||
func testProviderName(p ResourceProvider) string {
|
func testProviderName(p ResourceProvider) string {
|
||||||
return p.(*MockResourceProvider).Meta.(string)
|
return testProviderMock(p).Meta.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testResourceMapping(tf *Terraform) map[string]ResourceProvider {
|
func testResourceMapping(tf *Terraform) map[string]ResourceProvider {
|
||||||
|
|
Loading…
Reference in New Issue