From 0561edc2fd37970561733935b6b18c81a11ea471 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 6 Jun 2014 00:28:57 -0700 Subject: [PATCH] terraform: check for errors initializing a provider --- terraform/resource_provider.go | 4 ++-- terraform/resource_provider_mock.go | 27 +++++++++++++-------------- terraform/terraform.go | 12 ++++++------ 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/terraform/resource_provider.go b/terraform/resource_provider.go index 410b9db86..424315021 100644 --- a/terraform/resource_provider.go +++ b/terraform/resource_provider.go @@ -12,8 +12,8 @@ type ResourceProvider interface { // Configure configures the provider itself with the configuration // given. This is useful for setting things like access keys. // - // Configure returns a list of warnings and a potential error. - Configure(config map[string]interface{}) ([]string, error) + // Configure returns an error if it occurred. + Configure(config map[string]interface{}) error // Resources returns all the available resource types that this provider // knows how to manage. diff --git a/terraform/resource_provider_mock.go b/terraform/resource_provider_mock.go index 6854dc732..0c0adc83e 100644 --- a/terraform/resource_provider_mock.go +++ b/terraform/resource_provider_mock.go @@ -6,24 +6,23 @@ type MockResourceProvider struct { // Anything you want, in case you need to store extra data with the mock. Meta interface{} - ConfigureCalled bool - ConfigureConfig map[string]interface{} - ConfigureReturnWarnings []string - ConfigureReturnError error - DiffCalled bool - DiffState *ResourceState - DiffDesired map[string]interface{} - DiffFn func(*ResourceState, map[string]interface{}) (ResourceDiff, error) - DiffReturn ResourceDiff - DiffReturnError error - ResourcesCalled bool - ResourcesReturn []ResourceType + ConfigureCalled bool + ConfigureConfig map[string]interface{} + ConfigureReturnError error + DiffCalled bool + DiffState *ResourceState + DiffDesired map[string]interface{} + DiffFn func(*ResourceState, map[string]interface{}) (ResourceDiff, error) + DiffReturn ResourceDiff + DiffReturnError error + ResourcesCalled bool + ResourcesReturn []ResourceType } -func (p *MockResourceProvider) Configure(c map[string]interface{}) ([]string, error) { +func (p *MockResourceProvider) Configure(c map[string]interface{}) error { p.ConfigureCalled = true p.ConfigureConfig = c - return p.ConfigureReturnWarnings, p.ConfigureReturnError + return p.ConfigureReturnError } func (p *MockResourceProvider) Diff( diff --git a/terraform/terraform.go b/terraform/terraform.go index 468d2866e..14dc9ef1a 100644 --- a/terraform/terraform.go +++ b/terraform/terraform.go @@ -134,7 +134,9 @@ func (t *Terraform) diffWalkFn( } // Initialize the provider if we haven't already - p.init(vars) + if err := p.init(vars); err != nil { + return err + } l.RLock() var rs *ResourceState @@ -173,17 +175,15 @@ func (t *Terraform) diffWalkFn( } } -func (t *terraformProvider) init(vars map[string]string) error { - var err error - +func (t *terraformProvider) init(vars map[string]string) (err error) { t.Once.Do(func() { var c map[string]interface{} if t.Config != nil { c = t.Config.ReplaceVariables(vars).Config } - _, err = t.Provider.Configure(c) + err = t.Provider.Configure(c) }) - return err + return }