From 7aa2ce83416b0e44cc7b34db081eda69a29061b3 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Thu, 20 Apr 2017 17:26:50 -0400 Subject: [PATCH] add -reconfigure option for init The reconfigure flag will force init to ignore any saved backend state. This is useful when a user does not want any backend migration to happen, or if the saved configuration can't be loaded at all for some reason. --- command/init.go | 9 ++++++--- command/meta.go | 3 +++ command/meta_backend.go | 7 +++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/command/init.go b/command/init.go index 6b7fbaf21..54a244cdd 100644 --- a/command/init.go +++ b/command/init.go @@ -30,6 +30,7 @@ func (c *InitCommand) Run(args []string) int { cmdFlags.BoolVar(&c.forceInitCopy, "force-copy", false, "suppress prompts about copying state data") cmdFlags.BoolVar(&c.Meta.stateLock, "lock", true, "lock state") cmdFlags.DurationVar(&c.Meta.stateLockTimeout, "lock-timeout", 0, "lock timeout") + cmdFlags.BoolVar(&c.reconfigure, "reconfigure", false, "reconfigure") cmdFlags.Usage = func() { c.Ui.Error(c.Help()) } if err := cmdFlags.Parse(args); err != nil { @@ -223,6 +224,10 @@ Options: times. The backend type must be in the configuration itself. + -force-copy Suppress prompts about copying state data. This is + equivalent to providing a "yes" to all confirmation + prompts. + -get=true Download any modules for this configuration. -input=true Ask for input if necessary. If false, will error if @@ -234,9 +239,7 @@ Options: -no-color If specified, output won't contain any color. - -force-copy Suppress prompts about copying state data. This is - equivalent to providing a "yes" to all confirmation - prompts. + -reconfigure Reconfigure the backend, ignoring any saved configuration. ` return strings.TrimSpace(helpText) } diff --git a/command/meta.go b/command/meta.go index c494d9697..0b9375f72 100644 --- a/command/meta.go +++ b/command/meta.go @@ -95,6 +95,8 @@ type Meta struct { // // forceInitCopy suppresses confirmation for copying state data during // init. + // + // reconfigure forces init to ignore any stored configuration. statePath string stateOutPath string backupPath string @@ -104,6 +106,7 @@ type Meta struct { stateLock bool stateLockTimeout time.Duration forceInitCopy bool + reconfigure bool } // initStatePaths is used to initialize the default values for diff --git a/command/meta_backend.go b/command/meta_backend.go index 415efa02c..6f75acc77 100644 --- a/command/meta_backend.go +++ b/command/meta_backend.go @@ -352,6 +352,13 @@ func (m *Meta) backendFromConfig(opts *BackendOpts) (backend.Backend, error) { s = terraform.NewState() } + // if we want to force reconfiguration of the backend, we set the backend + // state to nil on this copy. This will direct us through the correct + // configuration path in the switch statement below. + if m.reconfigure { + s.Backend = nil + } + // Upon return, we want to set the state we're using in-memory so that // we can access it for commands. m.backendState = nil