From 8b129babe50e819a0383629373c61efc57038b50 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 4 Oct 2014 09:20:05 -0700 Subject: [PATCH] terraform: change provisioners to take UIOutput --- terraform/context.go | 8 ++++++-- terraform/resource_provisioner.go | 2 +- terraform/resource_provisioner_mock.go | 7 ++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/terraform/context.go b/terraform/context.go index 132a9f48d..f7ab9145d 100644 --- a/terraform/context.go +++ b/terraform/context.go @@ -34,6 +34,7 @@ type Context struct { provisioners map[string]ResourceProvisionerFactory variables map[string]string uiInput UIInput + uiOutput UIOutput l sync.Mutex // Lock acquired during any task parCh chan struct{} // Semaphore used to limit parallelism @@ -54,7 +55,8 @@ type ContextOpts struct { Provisioners map[string]ResourceProvisionerFactory Variables map[string]string - UIInput UIInput + UIInput UIInput + UIOutput UIOutput } // NewContext creates a new context. @@ -88,6 +90,7 @@ func NewContext(opts *ContextOpts) *Context { provisioners: opts.Provisioners, variables: opts.Variables, uiInput: opts.UIInput, + uiOutput: opts.UIOutput, parCh: parCh, sh: sh, @@ -1310,7 +1313,8 @@ func (c *walkContext) applyProvisioners(r *Resource, is *InstanceState) error { handleHook(h.PreProvision(r.Info, prov.Type)) } - if err := prov.Provisioner.Apply(is, prov.Config); err != nil { + err := prov.Provisioner.Apply(c.Context.uiOutput, is, prov.Config) + if err != nil { return err } diff --git a/terraform/resource_provisioner.go b/terraform/resource_provisioner.go index 6a749e001..acc80d054 100644 --- a/terraform/resource_provisioner.go +++ b/terraform/resource_provisioner.go @@ -20,7 +20,7 @@ type ResourceProvisioner interface { // resource state along with an error. Instead of a diff, the ResourceConfig // is provided since provisioners only run after a resource has been // newly created. - Apply(*InstanceState, *ResourceConfig) error + Apply(UIOutput, *InstanceState, *ResourceConfig) error } // ResourceProvisionerFactory is a function type that creates a new instance diff --git a/terraform/resource_provisioner_mock.go b/terraform/resource_provisioner_mock.go index f1600784c..2ba7220cd 100644 --- a/terraform/resource_provisioner_mock.go +++ b/terraform/resource_provisioner_mock.go @@ -7,6 +7,7 @@ type MockResourceProvisioner struct { Meta interface{} ApplyCalled bool + ApplyOutput UIOutput ApplyState *InstanceState ApplyConfig *ResourceConfig ApplyFn func(*InstanceState, *ResourceConfig) error @@ -28,8 +29,12 @@ func (p *MockResourceProvisioner) Validate(c *ResourceConfig) ([]string, []error return p.ValidateReturnWarns, p.ValidateReturnErrors } -func (p *MockResourceProvisioner) Apply(state *InstanceState, c *ResourceConfig) error { +func (p *MockResourceProvisioner) Apply( + output UIOutput, + state *InstanceState, + c *ResourceConfig) error { p.ApplyCalled = true + p.ApplyOutput = output p.ApplyState = state p.ApplyConfig = c if p.ApplyFn != nil {