terraform: ResourceConfig

This commit is contained in:
Mitchell Hashimoto 2014-06-12 17:59:59 -07:00
parent fd39728cbb
commit 7e421dd89b
4 changed files with 23 additions and 12 deletions

View File

@ -8,7 +8,7 @@ type ResourceProvider interface {
// given. This is useful for setting things like access keys. // given. This is useful for setting things like access keys.
// //
// Configure returns an error if it occurred. // Configure returns an error if it occurred.
Configure(config map[string]interface{}) error Configure(*ResourceConfig) error
// Resources returns all the available resource types that this provider // Resources returns all the available resource types that this provider
// knows how to manage. // knows how to manage.
@ -25,7 +25,14 @@ type ResourceProvider interface {
// a diff. // a diff.
Diff( Diff(
*ResourceState, *ResourceState,
map[string]interface{}) (*ResourceDiff, error) *ResourceConfig) (*ResourceDiff, error)
}
// ResourceConfig holds the configuration given for a resource. This is
// done instead of a raw `map[string]interface{}` type so that rich
// methods can be added to it to make dealing with it easier.
type ResourceConfig struct {
Raw map[string]interface{}
} }
// ResourceType is a type of resource that a resource provider can manage. // ResourceType is a type of resource that a resource provider can manage.

View File

@ -7,19 +7,19 @@ type MockResourceProvider struct {
Meta interface{} Meta interface{}
ConfigureCalled bool ConfigureCalled bool
ConfigureConfig map[string]interface{} ConfigureConfig *ResourceConfig
ConfigureReturnError error ConfigureReturnError error
DiffCalled bool DiffCalled bool
DiffState *ResourceState DiffState *ResourceState
DiffDesired map[string]interface{} DiffDesired *ResourceConfig
DiffFn func(*ResourceState, map[string]interface{}) (*ResourceDiff, error) DiffFn func(*ResourceState, *ResourceConfig) (*ResourceDiff, error)
DiffReturn *ResourceDiff DiffReturn *ResourceDiff
DiffReturnError error DiffReturnError error
ResourcesCalled bool ResourcesCalled bool
ResourcesReturn []ResourceType ResourcesReturn []ResourceType
} }
func (p *MockResourceProvider) Configure(c map[string]interface{}) error { func (p *MockResourceProvider) Configure(c *ResourceConfig) error {
p.ConfigureCalled = true p.ConfigureCalled = true
p.ConfigureConfig = c p.ConfigureConfig = c
return p.ConfigureReturnError return p.ConfigureReturnError
@ -27,7 +27,7 @@ func (p *MockResourceProvider) Configure(c map[string]interface{}) error {
func (p *MockResourceProvider) Diff( func (p *MockResourceProvider) Diff(
state *ResourceState, state *ResourceState,
desired map[string]interface{}) (*ResourceDiff, error) { desired *ResourceConfig) (*ResourceDiff, error) {
p.DiffCalled = true p.DiffCalled = true
p.DiffState = state p.DiffState = state
p.DiffDesired = desired p.DiffDesired = desired

View File

@ -150,7 +150,9 @@ func (t *Terraform) diffWalkFn(
} }
l.RUnlock() l.RUnlock()
diff, err := p.Provider.Diff(rs, r.RawConfig.Config()) diff, err := p.Provider.Diff(rs, &ResourceConfig{
Raw: r.RawConfig.Config(),
})
if err != nil { if err != nil {
return err return err
} }
@ -188,7 +190,9 @@ func (t *terraformProvider) init(vars map[string]string) (err error) {
c = t.Config.RawConfig.Config() c = t.Config.RawConfig.Config()
} }
err = t.Provider.Configure(c) err = t.Provider.Configure(&ResourceConfig{
Raw: c,
})
}) })
return return

View File

@ -248,7 +248,7 @@ func TestTerraformDiff_providerInit(t *testing.T) {
if !p.ConfigureCalled { if !p.ConfigureCalled {
t.Fatal("configure should be called") t.Fatal("configure should be called")
} }
if p.ConfigureConfig["foo"].(string) != "2" { if p.ConfigureConfig.Raw["foo"].(string) != "2" {
t.Fatalf("bad: %#v", p.ConfigureConfig) t.Fatalf("bad: %#v", p.ConfigureConfig)
} }
} }
@ -273,10 +273,10 @@ func testProviderFunc(n string, rs []string) ResourceProviderFactory {
return func() (ResourceProvider, error) { return func() (ResourceProvider, error) {
diffFn := func( diffFn := func(
_ *ResourceState, _ *ResourceState,
c map[string]interface{}) (*ResourceDiff, error) { c *ResourceConfig) (*ResourceDiff, error) {
var diff ResourceDiff var diff ResourceDiff
diff.Attributes = make(map[string]*ResourceAttrDiff) diff.Attributes = make(map[string]*ResourceAttrDiff)
for k, v := range c { for k, v := range c.Raw {
if _, ok := v.(string); !ok { if _, ok := v.(string); !ok {
continue continue
} }