github.com/hobbeswalsh/terraform@v0.3.7-0.20150619183303-ad17cf55a0fa/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  }