package terraform import ( "log" "github.com/hashicorp/terraform/internal/configs" "github.com/hashicorp/terraform/internal/plans" "github.com/hashicorp/terraform/internal/states" "github.com/hashicorp/terraform/internal/tfdiags" ) // Refresh is a vestigial operation that is equivalent to call to Plan and // then taking the prior state of the resulting plan. // // We retain this only as a measure of semi-backward-compatibility for // automation relying on the "terraform refresh" subcommand. The modern way // to get this effect is to create and then apply a plan in the refresh-only // mode. func (c *Context) Refresh(config *configs.Config, prevRunState *states.State, opts *PlanOpts) (*states.State, tfdiags.Diagnostics) { if opts == nil { // This fallback is only here for tests, not for real code. opts = &PlanOpts{ Mode: plans.NormalMode, } } if opts.Mode != plans.NormalMode { panic("can only Refresh in the normal planning mode") } log.Printf("[DEBUG] Refresh is really just plan now, so creating a %s plan", opts.Mode) p, diags := c.Plan(config, prevRunState, opts) if diags.HasErrors() { return nil, diags } return p.PriorState, diags }