From 98978b3853a505b7fd31cc2ca8bba53f6925f381 Mon Sep 17 00:00:00 2001 From: Chris Arcand Date: Fri, 10 Dec 2021 13:43:17 -0600 Subject: [PATCH] command/meta_backend: Allow the remote backend to have no workspaces [again] A regression introduced in d72a413ef833d4882fcb15d7436fba4a35d53741 The comment explains, but TLDR: The remote backend actually *depended* on being able to write it's backend state even though an 'error' occurred (no workspaces). --- internal/command/meta_backend.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/internal/command/meta_backend.go b/internal/command/meta_backend.go index dafea1a77..f95e03d3f 100644 --- a/internal/command/meta_backend.go +++ b/internal/command/meta_backend.go @@ -1025,11 +1025,24 @@ func (m *Meta) backend_C_r_s(c *configs.Backend, cHash int, sMgr *clistate.Local Hash: uint64(cHash), } - // Verify that selected workspace exist. Otherwise prompt user to create one + // Verify that selected workspace exists in the backend. if opts.Init && b != nil { - if err := m.selectWorkspace(b); err != nil { + err := m.selectWorkspace(b) + if err != nil { diags = diags.Append(err) - return nil, diags + + // FIXME: A compatibility oddity with the 'remote' backend. + // As an awkward legacy UX, when the remote backend is configured and there + // are no workspaces, the output to the user saying that there are none and + // the user should create one with 'workspace new' takes the form of an + // error message - even though it's happy path, expected behavior. + // + // Therefore, only return nil with errored diags for everything else, and + // allow the remote backend to continue and write its configuration to state + // even though no workspace is selected. + if c.Type != "remote" { + return nil, diags + } } }