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