github.com/bendemaree/terraform@v0.5.4-0.20150613200311-f50d97d6eee6/terraform/eval_refresh.go (about) 1 package terraform 2 3 import ( 4 "log" 5 ) 6 7 // EvalRefresh is an EvalNode implementation that does a refresh for 8 // a resource. 9 type EvalRefresh struct { 10 Provider *ResourceProvider 11 State **InstanceState 12 Info *InstanceInfo 13 Output **InstanceState 14 } 15 16 // TODO: test 17 func (n *EvalRefresh) Eval(ctx EvalContext) (interface{}, error) { 18 provider := *n.Provider 19 state := *n.State 20 21 // If we have no state, we don't do any refreshing 22 if state == nil { 23 log.Printf("[DEBUG] refresh: %s: no state, not refreshing", n.Info.Id) 24 return nil, nil 25 } 26 27 // Call pre-refresh hook 28 err := ctx.Hook(func(h Hook) (HookAction, error) { 29 return h.PreRefresh(n.Info, state) 30 }) 31 if err != nil { 32 return nil, err 33 } 34 35 // Refresh! 36 state, err = provider.Refresh(n.Info, state) 37 if err != nil { 38 return nil, err 39 } 40 41 // Call post-refresh hook 42 err = ctx.Hook(func(h Hook) (HookAction, error) { 43 return h.PostRefresh(n.Info, state) 44 }) 45 if err != nil { 46 return nil, err 47 } 48 49 if n.Output != nil { 50 *n.Output = state 51 } 52 53 return nil, nil 54 }