Skip to content

Commit 119b0ae

Browse files
committed
Add createDefaultWorkspace method
1 parent 4b848f7 commit 119b0ae

File tree

1 file changed

+31
-20
lines changed

1 file changed

+31
-20
lines changed

internal/command/meta_backend.go

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1691,26 +1691,7 @@ func (m *Meta) stateStore_C_s(c *configs.StateStore, cHash int, backendSMgr *cli
16911691

16921692
// TODO: Confirm if defaulting to creation on first use (rather than error) is a good idea
16931693
// Make the default workspace. All other workspaces are user-created via the workspace commands.
1694-
defaultSMgr, sDiags := b.StateMgr(backend.DefaultStateName)
1695-
diags = diags.Append(sDiags)
1696-
if sDiags.HasErrors() {
1697-
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",
1698-
c.Type,
1699-
c.Provider.Name,
1700-
c.ProviderAddr,
1701-
sDiags.Err()))
1702-
return nil, diags
1703-
}
1704-
emptyState := states.NewState()
1705-
if err := defaultSMgr.WriteState(emptyState); err != nil {
1706-
diags = diags.Append(fmt.Errorf(errStateStoreWorkspaceCreate, c.Type, err))
1707-
return nil, diags
1708-
}
1709-
// TODO - implement Read/Write state RPC methods
1710-
if err := defaultSMgr.PersistState(nil); err != nil {
1711-
diags = diags.Append(fmt.Errorf(errStateStoreWorkspaceCreate, c.Type, err))
1712-
return nil, diags
1713-
}
1694+
m.createDefaultWorkspace(c, b)
17141695
default:
17151696
diags = diags.Append(err)
17161697
return nil, diags
@@ -1735,6 +1716,36 @@ func (m *Meta) stateStore_C_s(c *configs.StateStore, cHash int, backendSMgr *cli
17351716
return b, diags
17361717
}
17371718

1719+
// createDefaultWorkspace receives a backend made using a pluggable state store, and details about that store's config,
1720+
// and persists an empty state file in the default workspace. By creating this artifact we ensure that the default
1721+
// workspace is created and usable by Terraform in later operations.
1722+
func (m *Meta) createDefaultWorkspace(c *configs.StateStore, b backend.Backend) tfdiags.Diagnostics {
1723+
var diags tfdiags.Diagnostics
1724+
1725+
defaultSMgr, sDiags := b.StateMgr(backend.DefaultStateName)
1726+
diags = diags.Append(sDiags)
1727+
if sDiags.HasErrors() {
1728+
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",
1729+
c.Type,
1730+
c.Provider.Name,
1731+
c.ProviderAddr,
1732+
sDiags.Err()))
1733+
return diags
1734+
}
1735+
emptyState := states.NewState()
1736+
if err := defaultSMgr.WriteState(emptyState); err != nil {
1737+
diags = diags.Append(fmt.Errorf(errStateStoreWorkspaceCreate, c.Type, err))
1738+
return diags
1739+
}
1740+
// TODO - implement Read/Write state RPC methods
1741+
if err := defaultSMgr.PersistState(nil); err != nil {
1742+
diags = diags.Append(fmt.Errorf(errStateStoreWorkspaceCreate, c.Type, err))
1743+
return diags
1744+
}
1745+
1746+
return diags
1747+
}
1748+
17381749
// Initializing a saved backend from the cache file (legacy state file)
17391750
//
17401751
// TODO: This is extremely similar to Meta.backendFromState() but for legacy reasons this is the

0 commit comments

Comments
 (0)