Merge pull request #19350 from hashicorp/b-select-workspace

backend/migrations: only select workspaces if supported
This commit is contained in:
Sander van Harmelen 2018-11-12 17:15:42 +01:00 committed by GitHub
commit 3c850947a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 15 deletions

View File

@ -700,6 +700,10 @@ func (m *Meta) backend_C_r_s(c *configs.Backend, cHash int, sMgr *state.LocalSta
return nil, diags return nil, diags
} }
// By now the backend is successfully configured.
m.Ui.Output(m.Colorize().Color(fmt.Sprintf(
"[reset][green]\n"+strings.TrimSpace(successBackendSet), s.Backend.Type)))
// Its possible that the currently selected workspace is not migrated, // Its possible that the currently selected workspace is not migrated,
// so we call selectWorkspace to ensure a valid workspace is selected. // so we call selectWorkspace to ensure a valid workspace is selected.
if err := m.selectWorkspace(b); err != nil { if err := m.selectWorkspace(b); err != nil {
@ -707,9 +711,6 @@ func (m *Meta) backend_C_r_s(c *configs.Backend, cHash int, sMgr *state.LocalSta
return nil, diags return nil, diags
} }
m.Ui.Output(m.Colorize().Color(fmt.Sprintf(
"[reset][green]\n"+strings.TrimSpace(successBackendSet), s.Backend.Type)))
// Return the backend // Return the backend
return b, diags return b, diags
} }
@ -720,10 +721,14 @@ func (m *Meta) backend_C_r_s(c *configs.Backend, cHash int, sMgr *state.LocalSta
func (m *Meta) selectWorkspace(b backend.Backend) error { func (m *Meta) selectWorkspace(b backend.Backend) error {
workspaces, err := b.Workspaces() workspaces, err := b.Workspaces()
if err != nil { if err != nil {
if err == backend.ErrWorkspacesNotSupported {
return nil
}
return fmt.Errorf("Failed to get migrated workspaces: %s", err) return fmt.Errorf("Failed to get migrated workspaces: %s", err)
} }
if len(workspaces) == 0 { if len(workspaces) == 0 {
return fmt.Errorf(errBackendNoMigratedWorkspaces) return fmt.Errorf(strings.TrimSpace(errBackendNoMigratedWorkspaces))
} }
// Get the currently selected workspace. // Get the currently selected workspace.
@ -744,18 +749,18 @@ func (m *Meta) selectWorkspace(b backend.Backend) error {
v, err := m.UIInput().Input(&terraform.InputOpts{ v, err := m.UIInput().Input(&terraform.InputOpts{
Id: "select-workspace", Id: "select-workspace",
Query: fmt.Sprintf( Query: fmt.Sprintf(
"[reset][bold][yellow]The currently selected workspace (%s) is not migrated.[reset]", "\n[reset][bold][yellow]The currently selected workspace (%s) is not migrated.[reset]",
workspace), workspace),
Description: fmt.Sprintf( Description: fmt.Sprintf(
strings.TrimSpace(inputBackendSelectWorkspace), list.String()), strings.TrimSpace(inputBackendSelectWorkspace), list.String()),
}) })
if err != nil { if err != nil {
return fmt.Errorf("Error asking to select workspace: %s", err) return fmt.Errorf("Failed to select workspace: %s", err)
} }
idx, err := strconv.Atoi(v) idx, err := strconv.Atoi(v)
if err != nil || (idx < 1 || idx > len(workspaces)) { if err != nil || (idx < 1 || idx > len(workspaces)) {
return fmt.Errorf("Error selecting workspace: input not a valid number") return fmt.Errorf("Failed to select workspace: input not a valid number")
} }
return m.SetWorkspace(workspaces[idx-1]) return m.SetWorkspace(workspaces[idx-1])
@ -1086,6 +1091,14 @@ If you'd like to run Terraform and store state locally, you can fix this
error by removing the backend configuration from your configuration. error by removing the backend configuration from your configuration.
` `
const errBackendNoMigratedWorkspaces = `
No workspaces are migrated.
Use the "terraform workspace" command to create and select a new workspace.
If the backend already contains existing workspaces, you may need to update
the backend configuration.
`
const errBackendRemoteRead = ` const errBackendRemoteRead = `
Error reading backend state: %s Error reading backend state: %s

View File

@ -475,14 +475,6 @@ The state in the previous backend remains intact and unmodified. Please resolve
the error above and try again. the error above and try again.
` `
const errBackendNoMigratedWorkspaces = `
No workspaces are migrated. Use the "terraform workspace" command to create
and select a new workspace.
If the backend already contains existing workspaces, you may need to update
the workspace name or prefix in the backend configuration.
`
const inputBackendMigrateEmpty = ` const inputBackendMigrateEmpty = `
Pre-existing state was found while migrating the previous %q backend to the Pre-existing state was found while migrating the previous %q backend to the
newly configured %q backend. No existing state was found in the newly newly configured %q backend. No existing state was found in the newly