Skip to content

Commit 78bedbd

Browse files
committed
Add createDefaultWorkspace method
1 parent 925e713 commit 78bedbd

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

internal/command/meta_backend.go

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1686,25 +1686,7 @@ func (m *Meta) stateStore_C_s(c *configs.StateStore, cHash int, backendSMgr *cli
16861686

16871687
// TODO: Confirm if defaulting to creation on first use (rather than error) is a good idea
16881688
// Make the default workspace. All other workspaces are user-created via the workspace commands.
1689-
defaultSMgr, err := b.StateMgr(backend.DefaultStateName)
1690-
if err != nil {
1691-
diags = diags.Append(fmt.Errorf("Failed to create a state manager for state store %q in provider %s (%q). This is a bug in Terraform and should be reported: %w",
1692-
c.Type,
1693-
c.Provider.Name,
1694-
c.ProviderAddr,
1695-
err))
1696-
return nil, diags
1697-
}
1698-
emptyState := states.NewState()
1699-
if err := defaultSMgr.WriteState(emptyState); err != nil {
1700-
diags = diags.Append(fmt.Errorf(errStateStoreWorkspaceCreate, c.Type, err))
1701-
return nil, diags
1702-
}
1703-
// TODO - implement Read/Write state RPC methods
1704-
if err := defaultSMgr.PersistState(nil); err != nil {
1705-
diags = diags.Append(fmt.Errorf(errStateStoreWorkspaceCreate, c.Type, err))
1706-
return nil, diags
1707-
}
1689+
m.createDefaultWorkspace(c, b)
17081690
default:
17091691
diags = diags.Append(err)
17101692
return nil, diags
@@ -1729,6 +1711,35 @@ func (m *Meta) stateStore_C_s(c *configs.StateStore, cHash int, backendSMgr *cli
17291711
return b, diags
17301712
}
17311713

1714+
// createDefaultWorkspace receives a backend made using a pluggable state store, and details about that store's config,
1715+
// and persists an empty state file in the default workspace. By creating this artifact we ensure that the default
1716+
// workspace is created and usable by Terraform in later operations.
1717+
func (m *Meta) createDefaultWorkspace(c *configs.StateStore, b backend.Backend) tfdiags.Diagnostics {
1718+
var diags tfdiags.Diagnostics
1719+
1720+
defaultSMgr, err := b.StateMgr(backend.DefaultStateName)
1721+
if err != nil {
1722+
diags = diags.Append(fmt.Errorf("Failed to create a state manager for state store %q in provider %s (%q). This is a bug in Terraform and should be reported: %w",
1723+
c.Type,
1724+
c.Provider.Name,
1725+
c.ProviderAddr,
1726+
err))
1727+
return diags
1728+
}
1729+
emptyState := states.NewState()
1730+
if err := defaultSMgr.WriteState(emptyState); err != nil {
1731+
diags = diags.Append(fmt.Errorf(errStateStoreWorkspaceCreate, c.Type, err))
1732+
return diags
1733+
}
1734+
// TODO - implement Read/Write state RPC methods
1735+
if err := defaultSMgr.PersistState(nil); err != nil {
1736+
diags = diags.Append(fmt.Errorf(errStateStoreWorkspaceCreate, c.Type, err))
1737+
return diags
1738+
}
1739+
1740+
return diags
1741+
}
1742+
17321743
// Initializing a saved backend from the cache file (legacy state file)
17331744
//
17341745
// TODO: This is extremely similar to Meta.backendFromState() but for legacy reasons this is the

0 commit comments

Comments
 (0)