command + backend: rename various API objects to "Workspace" terminology
We're shifting terminology from "environment" to "workspace". This takes care of some of the main internal API surface that was using the old terminology, though is not intended to be entirely comprehensive and is mainly just to minimize the amount of confusion for maintainers as we continue moving towards eliminating the old terminology.
This commit is contained in:
parent
33a266d61c
commit
418a8a8bc9
|
@ -19,8 +19,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
DefaultEnvDir = "terraform.tfstate.d"
|
DefaultWorkspaceDir = "terraform.tfstate.d"
|
||||||
DefaultEnvFile = "environment"
|
DefaultWorkspaceFile = "environment"
|
||||||
DefaultStateFilename = "terraform.tfstate"
|
DefaultStateFilename = "terraform.tfstate"
|
||||||
DefaultDataDir = ".terraform"
|
DefaultDataDir = ".terraform"
|
||||||
DefaultBackupExtension = ".backup"
|
DefaultBackupExtension = ".backup"
|
||||||
|
@ -35,8 +35,8 @@ type Local struct {
|
||||||
CLI cli.Ui
|
CLI cli.Ui
|
||||||
CLIColor *colorstring.Colorize
|
CLIColor *colorstring.Colorize
|
||||||
|
|
||||||
// The State* paths are set from the CLI options, and may be left blank to
|
// The State* paths are set from the backend config, and may be left blank
|
||||||
// use the defaults. If the actual paths for the local backend state are
|
// to use the defaults. If the actual paths for the local backend state are
|
||||||
// needed, use the StatePaths method.
|
// needed, use the StatePaths method.
|
||||||
//
|
//
|
||||||
// StatePath is the local path where state is read from.
|
// StatePath is the local path where state is read from.
|
||||||
|
@ -47,12 +47,12 @@ type Local struct {
|
||||||
// StateBackupPath is the local path where a backup file will be written.
|
// StateBackupPath is the local path where a backup file will be written.
|
||||||
// Set this to "-" to disable state backup.
|
// Set this to "-" to disable state backup.
|
||||||
//
|
//
|
||||||
// StateEnvPath is the path to the folder containing environments. This
|
// StateWorkspaceDir is the path to the folder containing data for
|
||||||
// defaults to DefaultEnvDir if not set.
|
// non-default workspaces. This defaults to DefaultWorkspaceDir if not set.
|
||||||
StatePath string
|
StatePath string
|
||||||
StateOutPath string
|
StateOutPath string
|
||||||
StateBackupPath string
|
StateBackupPath string
|
||||||
StateEnvDir string
|
StateWorkspaceDir string
|
||||||
|
|
||||||
// We only want to create a single instance of a local state, so store them
|
// We only want to create a single instance of a local state, so store them
|
||||||
// here as they're loaded.
|
// here as they're loaded.
|
||||||
|
@ -126,7 +126,7 @@ func (b *Local) States() ([]string, error) {
|
||||||
// the listing always start with "default"
|
// the listing always start with "default"
|
||||||
envs := []string{backend.DefaultStateName}
|
envs := []string{backend.DefaultStateName}
|
||||||
|
|
||||||
entries, err := ioutil.ReadDir(b.stateEnvDir())
|
entries, err := ioutil.ReadDir(b.stateWorkspaceDir())
|
||||||
// no error if there's no envs configured
|
// no error if there's no envs configured
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return envs, nil
|
return envs, nil
|
||||||
|
@ -165,7 +165,7 @@ func (b *Local) DeleteState(name string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
delete(b.states, name)
|
delete(b.states, name)
|
||||||
return os.RemoveAll(filepath.Join(b.stateEnvDir(), name))
|
return os.RemoveAll(filepath.Join(b.stateWorkspaceDir(), name))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Local) State(name string) (state.State, error) {
|
func (b *Local) State(name string) (state.State, error) {
|
||||||
|
@ -329,7 +329,7 @@ func (b *Local) schemaConfigure(ctx context.Context) error {
|
||||||
if raw, ok := d.GetOk("workspace_dir"); ok {
|
if raw, ok := d.GetOk("workspace_dir"); ok {
|
||||||
path := raw.(string)
|
path := raw.(string)
|
||||||
if path != "" {
|
if path != "" {
|
||||||
b.StateEnvDir = path
|
b.StateWorkspaceDir = path
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ func (b *Local) schemaConfigure(ctx context.Context) error {
|
||||||
if raw, ok := d.GetOk("environment_dir"); ok {
|
if raw, ok := d.GetOk("environment_dir"); ok {
|
||||||
path := raw.(string)
|
path := raw.(string)
|
||||||
if path != "" {
|
if path != "" {
|
||||||
b.StateEnvDir = path
|
b.StateWorkspaceDir = path
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,7 +360,7 @@ func (b *Local) StatePaths(name string) (string, string, string) {
|
||||||
statePath = DefaultStateFilename
|
statePath = DefaultStateFilename
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
statePath = filepath.Join(b.stateEnvDir(), name, DefaultStateFilename)
|
statePath = filepath.Join(b.stateWorkspaceDir(), name, DefaultStateFilename)
|
||||||
}
|
}
|
||||||
|
|
||||||
if stateOutPath == "" {
|
if stateOutPath == "" {
|
||||||
|
@ -383,7 +383,7 @@ func (b *Local) createState(name string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
stateDir := filepath.Join(b.stateEnvDir(), name)
|
stateDir := filepath.Join(b.stateWorkspaceDir(), name)
|
||||||
s, err := os.Stat(stateDir)
|
s, err := os.Stat(stateDir)
|
||||||
if err == nil && s.IsDir() {
|
if err == nil && s.IsDir() {
|
||||||
// no need to check for os.IsNotExist, since that is covered by os.MkdirAll
|
// no need to check for os.IsNotExist, since that is covered by os.MkdirAll
|
||||||
|
@ -399,11 +399,11 @@ func (b *Local) createState(name string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// stateEnvDir returns the directory where state environments are stored.
|
// stateWorkspaceDir returns the directory where state environments are stored.
|
||||||
func (b *Local) stateEnvDir() string {
|
func (b *Local) stateWorkspaceDir() string {
|
||||||
if b.StateEnvDir != "" {
|
if b.StateWorkspaceDir != "" {
|
||||||
return b.StateEnvDir
|
return b.StateWorkspaceDir
|
||||||
}
|
}
|
||||||
|
|
||||||
return DefaultEnvDir
|
return DefaultWorkspaceDir
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ func TestLocal_StatePaths(t *testing.T) {
|
||||||
testEnv := "test_env"
|
testEnv := "test_env"
|
||||||
path, out, back = b.StatePaths(testEnv)
|
path, out, back = b.StatePaths(testEnv)
|
||||||
|
|
||||||
expectedPath := filepath.Join(DefaultEnvDir, testEnv, DefaultStateFilename)
|
expectedPath := filepath.Join(DefaultWorkspaceDir, testEnv, DefaultStateFilename)
|
||||||
expectedOut := expectedPath
|
expectedOut := expectedPath
|
||||||
expectedBackup := expectedPath + DefaultBackupExtension
|
expectedBackup := expectedPath + DefaultBackupExtension
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ func TestLocal_remoteStateBackup(t *testing.T) {
|
||||||
t.Fatal("remote state is not backed up")
|
t.Fatal("remote state is not backed up")
|
||||||
}
|
}
|
||||||
|
|
||||||
if bs.Path != filepath.Join(DefaultEnvDir, "test", DefaultStateFilename+DefaultBackupExtension) {
|
if bs.Path != filepath.Join(DefaultWorkspaceDir, "test", DefaultStateFilename+DefaultBackupExtension) {
|
||||||
t.Fatal("bad backup location:", bs.Path)
|
t.Fatal("bad backup location:", bs.Path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,11 +18,11 @@ import (
|
||||||
func TestLocal(t *testing.T) *Local {
|
func TestLocal(t *testing.T) *Local {
|
||||||
tempDir := testTempDir(t)
|
tempDir := testTempDir(t)
|
||||||
return &Local{
|
return &Local{
|
||||||
StatePath: filepath.Join(tempDir, "state.tfstate"),
|
StatePath: filepath.Join(tempDir, "state.tfstate"),
|
||||||
StateOutPath: filepath.Join(tempDir, "state.tfstate"),
|
StateOutPath: filepath.Join(tempDir, "state.tfstate"),
|
||||||
StateBackupPath: filepath.Join(tempDir, "state.tfstate.bak"),
|
StateBackupPath: filepath.Join(tempDir, "state.tfstate.bak"),
|
||||||
StateEnvDir: filepath.Join(tempDir, "state.tfstate.d"),
|
StateWorkspaceDir: filepath.Join(tempDir, "state.tfstate.d"),
|
||||||
ContextOpts: &terraform.ContextOpts{},
|
ContextOpts: &terraform.ContextOpts{},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,7 @@ func (c *InitCommand) Run(args []string) int {
|
||||||
|
|
||||||
// Now that we have loaded all modules, check the module tree for missing providers
|
// Now that we have loaded all modules, check the module tree for missing providers
|
||||||
if flagGetPlugins {
|
if flagGetPlugins {
|
||||||
sMgr, err := back.State(c.Env())
|
sMgr, err := back.State(c.Workspace())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf(
|
c.Ui.Error(fmt.Sprintf(
|
||||||
"Error loading state: %s", err))
|
"Error loading state: %s", err))
|
||||||
|
|
|
@ -247,7 +247,7 @@ func (m *Meta) contextOpts() *terraform.ContextOpts {
|
||||||
opts.ProviderSHA256s = m.providerPluginsLock().Read()
|
opts.ProviderSHA256s = m.providerPluginsLock().Read()
|
||||||
|
|
||||||
opts.Meta = &terraform.ContextMeta{
|
opts.Meta = &terraform.ContextMeta{
|
||||||
Env: m.Env(),
|
Env: m.Workspace(),
|
||||||
}
|
}
|
||||||
|
|
||||||
return &opts
|
return &opts
|
||||||
|
@ -454,25 +454,26 @@ func (m *Meta) outputShadowError(err error, output bool) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnvironmentNameEnvVar is the name of the environment variable (ie, the POSIX
|
// WorkspaceNameEnvVar is the name of the environment variable that can be used
|
||||||
// feature) that can be used to set the name of the Terraform workspace
|
// to set the name of the Terraform workspace, overriding the workspace chosen
|
||||||
// (overriding the workspace chosen by `terraform workspace select`). Note that
|
// by `terraform workspace select`.
|
||||||
// this environment variable is ignored by `terraform workspace new` and
|
//
|
||||||
// `terraform workspace delete`.
|
// Note that this environment variable is ignored by `terraform workspace new`
|
||||||
const EnvironmentNameEnvVar = "TF_WORKSPACE"
|
// and `terraform workspace delete`.
|
||||||
|
const WorkspaceNameEnvVar = "TF_WORKSPACE"
|
||||||
|
|
||||||
// Env returns the name of the currently configured workspace, corresponding
|
// Workspace returns the name of the currently configured workspace, corresponding
|
||||||
// to the desired named state.
|
// to the desired named state.
|
||||||
func (m *Meta) Env() string {
|
func (m *Meta) Workspace() string {
|
||||||
current, _ := m.EnvOverridden()
|
current, _ := m.WorkspaceOverridden()
|
||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnvOverridden returns the name of the currently configured workspace,
|
// WorkspaceOverridden returns the name of the currently configured workspace,
|
||||||
// corresponding to the desired named state, as well as a bool saying whether
|
// corresponding to the desired named state, as well as a bool saying whether
|
||||||
// this was set via the TF_WORKSPACE environment variable.
|
// this was set via the TF_WORKSPACE environment variable.
|
||||||
func (m *Meta) EnvOverridden() (string, bool) {
|
func (m *Meta) WorkspaceOverridden() (string, bool) {
|
||||||
if envVar := os.Getenv(EnvironmentNameEnvVar); envVar != "" {
|
if envVar := os.Getenv(WorkspaceNameEnvVar); envVar != "" {
|
||||||
return envVar, true
|
return envVar, true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -481,7 +482,7 @@ func (m *Meta) EnvOverridden() (string, bool) {
|
||||||
dataDir = DefaultDataDir
|
dataDir = DefaultDataDir
|
||||||
}
|
}
|
||||||
|
|
||||||
envData, err := ioutil.ReadFile(filepath.Join(dataDir, local.DefaultEnvFile))
|
envData, err := ioutil.ReadFile(filepath.Join(dataDir, local.DefaultWorkspaceFile))
|
||||||
current := string(bytes.TrimSpace(envData))
|
current := string(bytes.TrimSpace(envData))
|
||||||
if current == "" {
|
if current == "" {
|
||||||
current = backend.DefaultStateName
|
current = backend.DefaultStateName
|
||||||
|
@ -495,9 +496,9 @@ func (m *Meta) EnvOverridden() (string, bool) {
|
||||||
return current, false
|
return current, false
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetEnv saves the given name as the current workspace in the local
|
// SetWorkspace saves the given name as the current workspace in the local
|
||||||
// filesystem.
|
// filesystem.
|
||||||
func (m *Meta) SetEnv(name string) error {
|
func (m *Meta) SetWorkspace(name string) error {
|
||||||
dataDir := m.dataDir
|
dataDir := m.dataDir
|
||||||
if m.dataDir == "" {
|
if m.dataDir == "" {
|
||||||
dataDir = DefaultDataDir
|
dataDir = DefaultDataDir
|
||||||
|
@ -508,7 +509,7 @@ func (m *Meta) SetEnv(name string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ioutil.WriteFile(filepath.Join(dataDir, local.DefaultEnvFile), []byte(name), 0644)
|
err = ioutil.WriteFile(filepath.Join(dataDir, local.DefaultWorkspaceFile), []byte(name), 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,7 +168,7 @@ func (m *Meta) Operation() *backend.Operation {
|
||||||
PlanOutBackend: m.backendState,
|
PlanOutBackend: m.backendState,
|
||||||
Targets: m.targets,
|
Targets: m.targets,
|
||||||
UIIn: m.UIInput(),
|
UIIn: m.UIInput(),
|
||||||
Environment: m.Env(),
|
Environment: m.Workspace(),
|
||||||
LockState: m.stateLock,
|
LockState: m.stateLock,
|
||||||
StateLockTimeout: m.stateLockTimeout,
|
StateLockTimeout: m.stateLockTimeout,
|
||||||
}
|
}
|
||||||
|
@ -572,7 +572,7 @@ func (m *Meta) backendFromPlan(opts *BackendOpts) (backend.Backend, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
env := m.Env()
|
env := m.Workspace()
|
||||||
|
|
||||||
// Get the state so we can determine the effect of using this plan
|
// Get the state so we can determine the effect of using this plan
|
||||||
realMgr, err := b.State(env)
|
realMgr, err := b.State(env)
|
||||||
|
@ -967,7 +967,7 @@ func (m *Meta) backend_C_r_s(
|
||||||
return nil, fmt.Errorf(errBackendLocalRead, err)
|
return nil, fmt.Errorf(errBackendLocalRead, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
env := m.Env()
|
env := m.Workspace()
|
||||||
|
|
||||||
localState, err := localB.State(env)
|
localState, err := localB.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -162,7 +162,7 @@ func (m *Meta) backendMigrateState_S_S(opts *backendMigrateOpts) error {
|
||||||
|
|
||||||
// Multi-state to single state.
|
// Multi-state to single state.
|
||||||
func (m *Meta) backendMigrateState_S_s(opts *backendMigrateOpts) error {
|
func (m *Meta) backendMigrateState_S_s(opts *backendMigrateOpts) error {
|
||||||
currentEnv := m.Env()
|
currentEnv := m.Workspace()
|
||||||
|
|
||||||
migrate := opts.force
|
migrate := opts.force
|
||||||
if !migrate {
|
if !migrate {
|
||||||
|
@ -192,7 +192,7 @@ func (m *Meta) backendMigrateState_S_s(opts *backendMigrateOpts) error {
|
||||||
opts.oneEnv = currentEnv
|
opts.oneEnv = currentEnv
|
||||||
|
|
||||||
// now switch back to the default env so we can acccess the new backend
|
// now switch back to the default env so we can acccess the new backend
|
||||||
m.SetEnv(backend.DefaultStateName)
|
m.SetWorkspace(backend.DefaultStateName)
|
||||||
|
|
||||||
return m.backendMigrateState_s_s(opts)
|
return m.backendMigrateState_s_s(opts)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1250,13 +1250,13 @@ func TestMetaBackend_configuredChangeCopy_multiToSingle(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify existing workspaces exist
|
// Verify existing workspaces exist
|
||||||
envPath := filepath.Join(backendlocal.DefaultEnvDir, "env2", backendlocal.DefaultStateFilename)
|
envPath := filepath.Join(backendlocal.DefaultWorkspaceDir, "env2", backendlocal.DefaultStateFilename)
|
||||||
if _, err := os.Stat(envPath); err != nil {
|
if _, err := os.Stat(envPath); err != nil {
|
||||||
t.Fatal("env should exist")
|
t.Fatal("env should exist")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify we are now in the default env, or we may not be able to access the new backend
|
// Verify we are now in the default env, or we may not be able to access the new backend
|
||||||
if env := m.Env(); env != backend.DefaultStateName {
|
if env := m.Workspace(); env != backend.DefaultStateName {
|
||||||
t.Fatal("using non-default env with single-env backend")
|
t.Fatal("using non-default env with single-env backend")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1285,7 +1285,7 @@ func TestMetaBackend_configuredChangeCopy_multiToSingleCurrentEnv(t *testing.T)
|
||||||
m := testMetaBackend(t, nil)
|
m := testMetaBackend(t, nil)
|
||||||
|
|
||||||
// Change env
|
// Change env
|
||||||
if err := m.SetEnv("env2"); err != nil {
|
if err := m.SetWorkspace("env2"); err != nil {
|
||||||
t.Fatalf("bad: %s", err)
|
t.Fatalf("bad: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1322,7 +1322,7 @@ func TestMetaBackend_configuredChangeCopy_multiToSingleCurrentEnv(t *testing.T)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify existing workspaces exist
|
// Verify existing workspaces exist
|
||||||
envPath := filepath.Join(backendlocal.DefaultEnvDir, "env2", backendlocal.DefaultStateFilename)
|
envPath := filepath.Join(backendlocal.DefaultWorkspaceDir, "env2", backendlocal.DefaultStateFilename)
|
||||||
if _, err := os.Stat(envPath); err != nil {
|
if _, err := os.Stat(envPath); err != nil {
|
||||||
t.Fatal("env should exist")
|
t.Fatal("env should exist")
|
||||||
}
|
}
|
||||||
|
@ -1407,7 +1407,7 @@ func TestMetaBackend_configuredChangeCopy_multiToMulti(t *testing.T) {
|
||||||
|
|
||||||
{
|
{
|
||||||
// Verify existing workspaces exist
|
// Verify existing workspaces exist
|
||||||
envPath := filepath.Join(backendlocal.DefaultEnvDir, "env2", backendlocal.DefaultStateFilename)
|
envPath := filepath.Join(backendlocal.DefaultWorkspaceDir, "env2", backendlocal.DefaultStateFilename)
|
||||||
if _, err := os.Stat(envPath); err != nil {
|
if _, err := os.Stat(envPath); err != nil {
|
||||||
t.Fatal("env should exist")
|
t.Fatal("env should exist")
|
||||||
}
|
}
|
||||||
|
|
|
@ -282,27 +282,27 @@ func TestMeta_Env(t *testing.T) {
|
||||||
|
|
||||||
m := new(Meta)
|
m := new(Meta)
|
||||||
|
|
||||||
env := m.Env()
|
env := m.Workspace()
|
||||||
|
|
||||||
if env != backend.DefaultStateName {
|
if env != backend.DefaultStateName {
|
||||||
t.Fatalf("expected env %q, got env %q", backend.DefaultStateName, env)
|
t.Fatalf("expected env %q, got env %q", backend.DefaultStateName, env)
|
||||||
}
|
}
|
||||||
|
|
||||||
testEnv := "test_env"
|
testEnv := "test_env"
|
||||||
if err := m.SetEnv(testEnv); err != nil {
|
if err := m.SetWorkspace(testEnv); err != nil {
|
||||||
t.Fatal("error setting env:", err)
|
t.Fatal("error setting env:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
env = m.Env()
|
env = m.Workspace()
|
||||||
if env != testEnv {
|
if env != testEnv {
|
||||||
t.Fatalf("expected env %q, got env %q", testEnv, env)
|
t.Fatalf("expected env %q, got env %q", testEnv, env)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := m.SetEnv(backend.DefaultStateName); err != nil {
|
if err := m.SetWorkspace(backend.DefaultStateName); err != nil {
|
||||||
t.Fatal("error setting env:", err)
|
t.Fatal("error setting env:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
env = m.Env()
|
env = m.Workspace()
|
||||||
if env != backend.DefaultStateName {
|
if env != backend.DefaultStateName {
|
||||||
t.Fatalf("expected env %q, got env %q", backend.DefaultStateName, env)
|
t.Fatalf("expected env %q, got env %q", backend.DefaultStateName, env)
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ func (c *OutputCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
|
|
||||||
// Get the state
|
// Get the state
|
||||||
stateStore, err := b.State(env)
|
stateStore, err := b.State(env)
|
||||||
|
|
|
@ -61,7 +61,7 @@ func (c *ProvidersCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the state
|
// Get the state
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
state, err := b.State(env)
|
state, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
||||||
|
|
|
@ -74,7 +74,7 @@ func (c *ShowCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
|
|
||||||
// Get the state
|
// Get the state
|
||||||
stateStore, err := b.State(env)
|
stateStore, err := b.State(env)
|
||||||
|
|
|
@ -32,7 +32,7 @@ func (c *StateListCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
// Get the state
|
// Get the state
|
||||||
state, err := b.State(env)
|
state, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -24,7 +24,7 @@ func (c *StateMeta) State(m *Meta) (state.State, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
env := m.Env()
|
env := m.Workspace()
|
||||||
// Get the state
|
// Get the state
|
||||||
s, err := b.State(env)
|
s, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -32,7 +32,7 @@ func (c *StatePullCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the state
|
// Get the state
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
state, err := b.State(env)
|
state, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
||||||
|
|
|
@ -67,7 +67,7 @@ func (c *StatePushCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the state
|
// Get the state
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
state, err := b.State(env)
|
state, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to load destination state: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to load destination state: %s", err))
|
||||||
|
|
|
@ -34,7 +34,7 @@ func (c *StateShowCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the state
|
// Get the state
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
state, err := b.State(env)
|
state, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
||||||
|
|
|
@ -69,7 +69,7 @@ func (c *TaintCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the state
|
// Get the state
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
st, err := b.State(env)
|
st, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
||||||
|
|
|
@ -58,7 +58,7 @@ func (c *UnlockCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
st, err := b.State(env)
|
st, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
||||||
|
|
|
@ -57,7 +57,7 @@ func (c *UntaintCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the state
|
// Get the state
|
||||||
env := c.Env()
|
env := c.Workspace()
|
||||||
st, err := b.State(env)
|
st, err := b.State(env)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to load state: %s", err))
|
||||||
|
|
|
@ -47,10 +47,10 @@ func (c *WorkspaceCommand) Synopsis() string {
|
||||||
return "Workspace management"
|
return "Workspace management"
|
||||||
}
|
}
|
||||||
|
|
||||||
// validEnvName returns true is this name is valid to use as a workspace name.
|
// validWorkspaceName returns true is this name is valid to use as a workspace name.
|
||||||
// Since most named states are accessed via a filesystem path or URL, check if
|
// Since most named states are accessed via a filesystem path or URL, check if
|
||||||
// escaping the name would be required.
|
// escaping the name would be required.
|
||||||
func validEnvName(name string) bool {
|
func validWorkspaceName(name string) bool {
|
||||||
return name == url.PathEscape(name)
|
return name == url.PathEscape(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ func TestWorkspace_createAndChange(t *testing.T) {
|
||||||
|
|
||||||
newCmd := &WorkspaceNewCommand{}
|
newCmd := &WorkspaceNewCommand{}
|
||||||
|
|
||||||
current := newCmd.Env()
|
current := newCmd.Workspace()
|
||||||
if current != backend.DefaultStateName {
|
if current != backend.DefaultStateName {
|
||||||
t.Fatal("current workspace should be 'default'")
|
t.Fatal("current workspace should be 'default'")
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ func TestWorkspace_createAndChange(t *testing.T) {
|
||||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter)
|
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter)
|
||||||
}
|
}
|
||||||
|
|
||||||
current = newCmd.Env()
|
current = newCmd.Workspace()
|
||||||
if current != "test" {
|
if current != "test" {
|
||||||
t.Fatalf("current workspace should be 'test', got %q", current)
|
t.Fatalf("current workspace should be 'test', got %q", current)
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ func TestWorkspace_createAndChange(t *testing.T) {
|
||||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter)
|
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter)
|
||||||
}
|
}
|
||||||
|
|
||||||
current = newCmd.Env()
|
current = newCmd.Workspace()
|
||||||
if current != backend.DefaultStateName {
|
if current != backend.DefaultStateName {
|
||||||
t.Fatal("current workspace should be 'default'")
|
t.Fatal("current workspace should be 'default'")
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ func TestWorkspace_createWithState(t *testing.T) {
|
||||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter)
|
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter)
|
||||||
}
|
}
|
||||||
|
|
||||||
newPath := filepath.Join(local.DefaultEnvDir, "test", DefaultStateFilename)
|
newPath := filepath.Join(local.DefaultWorkspaceDir, "test", DefaultStateFilename)
|
||||||
envState := state.LocalState{Path: newPath}
|
envState := state.LocalState{Path: newPath}
|
||||||
err = envState.RefreshState()
|
err = envState.RefreshState()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -198,7 +198,7 @@ func TestWorkspace_delete(t *testing.T) {
|
||||||
defer testChdir(t, td)()
|
defer testChdir(t, td)()
|
||||||
|
|
||||||
// create the workspace directories
|
// create the workspace directories
|
||||||
if err := os.MkdirAll(filepath.Join(local.DefaultEnvDir, "test"), 0755); err != nil {
|
if err := os.MkdirAll(filepath.Join(local.DefaultWorkspaceDir, "test"), 0755); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ func TestWorkspace_delete(t *testing.T) {
|
||||||
if err := os.MkdirAll(DefaultDataDir, 0755); err != nil {
|
if err := os.MkdirAll(DefaultDataDir, 0755); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := ioutil.WriteFile(filepath.Join(DefaultDataDir, local.DefaultEnvFile), []byte("test"), 0644); err != nil {
|
if err := ioutil.WriteFile(filepath.Join(DefaultDataDir, local.DefaultWorkspaceFile), []byte("test"), 0644); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -215,7 +215,7 @@ func TestWorkspace_delete(t *testing.T) {
|
||||||
Meta: Meta{Ui: ui},
|
Meta: Meta{Ui: ui},
|
||||||
}
|
}
|
||||||
|
|
||||||
current := delCmd.Env()
|
current := delCmd.Workspace()
|
||||||
if current != "test" {
|
if current != "test" {
|
||||||
t.Fatal("wrong workspace:", current)
|
t.Fatal("wrong workspace:", current)
|
||||||
}
|
}
|
||||||
|
@ -227,7 +227,7 @@ func TestWorkspace_delete(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// change back to default
|
// change back to default
|
||||||
if err := delCmd.SetEnv(backend.DefaultStateName); err != nil {
|
if err := delCmd.SetWorkspace(backend.DefaultStateName); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ func TestWorkspace_delete(t *testing.T) {
|
||||||
t.Fatalf("error deleting workspace: %s", ui.ErrorWriter)
|
t.Fatalf("error deleting workspace: %s", ui.ErrorWriter)
|
||||||
}
|
}
|
||||||
|
|
||||||
current = delCmd.Env()
|
current = delCmd.Workspace()
|
||||||
if current != backend.DefaultStateName {
|
if current != backend.DefaultStateName {
|
||||||
t.Fatalf("wrong workspace: %q", current)
|
t.Fatalf("wrong workspace: %q", current)
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,7 @@ func TestWorkspace_deleteWithState(t *testing.T) {
|
||||||
defer testChdir(t, td)()
|
defer testChdir(t, td)()
|
||||||
|
|
||||||
// create the workspace directories
|
// create the workspace directories
|
||||||
if err := os.MkdirAll(filepath.Join(local.DefaultEnvDir, "test"), 0755); err != nil {
|
if err := os.MkdirAll(filepath.Join(local.DefaultWorkspaceDir, "test"), 0755); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ func TestWorkspace_deleteWithState(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
envStatePath := filepath.Join(local.DefaultEnvDir, "test", DefaultStateFilename)
|
envStatePath := filepath.Join(local.DefaultWorkspaceDir, "test", DefaultStateFilename)
|
||||||
err := (&state.LocalState{Path: envStatePath}).WriteState(originalState)
|
err := (&state.LocalState{Path: envStatePath}).WriteState(originalState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -294,7 +294,7 @@ func TestWorkspace_deleteWithState(t *testing.T) {
|
||||||
t.Fatalf("failure: %s", ui.ErrorWriter)
|
t.Fatalf("failure: %s", ui.ErrorWriter)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := os.Stat(filepath.Join(local.DefaultEnvDir, "test")); !os.IsNotExist(err) {
|
if _, err := os.Stat(filepath.Join(local.DefaultWorkspaceDir, "test")); !os.IsNotExist(err) {
|
||||||
t.Fatal("env 'test' still exists!")
|
t.Fatal("env 'test' still exists!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ func (c *WorkspaceDeleteCommand) Run(args []string) int {
|
||||||
|
|
||||||
delEnv := args[0]
|
delEnv := args[0]
|
||||||
|
|
||||||
if !validEnvName(delEnv) {
|
if !validWorkspaceName(delEnv) {
|
||||||
c.Ui.Error(fmt.Sprintf(envInvalidName, delEnv))
|
c.Ui.Error(fmt.Sprintf(envInvalidName, delEnv))
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ func (c *WorkspaceDeleteCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if delEnv == c.Env() {
|
if delEnv == c.Workspace() {
|
||||||
c.Ui.Error(fmt.Sprintf(strings.TrimSpace(envDelCurrent), delEnv))
|
c.Ui.Error(fmt.Sprintf(strings.TrimSpace(envDelCurrent), delEnv))
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,7 @@ func (c *WorkspaceListCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
env, isOverridden := c.EnvOverridden()
|
env, isOverridden := c.WorkspaceOverridden()
|
||||||
|
|
||||||
var out bytes.Buffer
|
var out bytes.Buffer
|
||||||
for _, s := range states {
|
for _, s := range states {
|
||||||
|
|
|
@ -38,14 +38,14 @@ func (c *WorkspaceNewCommand) Run(args []string) int {
|
||||||
|
|
||||||
newEnv := args[0]
|
newEnv := args[0]
|
||||||
|
|
||||||
if !validEnvName(newEnv) {
|
if !validWorkspaceName(newEnv) {
|
||||||
c.Ui.Error(fmt.Sprintf(envInvalidName, newEnv))
|
c.Ui.Error(fmt.Sprintf(envInvalidName, newEnv))
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
// You can't ask to create a workspace when you're overriding the
|
// You can't ask to create a workspace when you're overriding the
|
||||||
// workspace name to be something different.
|
// workspace name to be something different.
|
||||||
if current, isOverridden := c.EnvOverridden(); current != newEnv && isOverridden {
|
if current, isOverridden := c.WorkspaceOverridden(); current != newEnv && isOverridden {
|
||||||
c.Ui.Error(envIsOverriddenNewError)
|
c.Ui.Error(envIsOverriddenNewError)
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@ func (c *WorkspaceNewCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// now set the current workspace locally
|
// now set the current workspace locally
|
||||||
if err := c.SetEnv(newEnv); err != nil {
|
if err := c.SetWorkspace(newEnv); err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Error selecting new workspace: %s", err))
|
c.Ui.Error(fmt.Sprintf("Error selecting new workspace: %s", err))
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ func (c *WorkspaceSelectCommand) Run(args []string) int {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to load root config module: %s", err))
|
c.Ui.Error(fmt.Sprintf("Failed to load root config module: %s", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
current, isOverridden := c.EnvOverridden()
|
current, isOverridden := c.WorkspaceOverridden()
|
||||||
if isOverridden {
|
if isOverridden {
|
||||||
c.Ui.Error(envIsOverriddenSelectError)
|
c.Ui.Error(envIsOverriddenSelectError)
|
||||||
return 1
|
return 1
|
||||||
|
@ -56,7 +56,7 @@ func (c *WorkspaceSelectCommand) Run(args []string) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
name := args[0]
|
name := args[0]
|
||||||
if !validEnvName(name) {
|
if !validWorkspaceName(name) {
|
||||||
c.Ui.Error(fmt.Sprintf(envInvalidName, name))
|
c.Ui.Error(fmt.Sprintf(envInvalidName, name))
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ func (c *WorkspaceSelectCommand) Run(args []string) int {
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.SetEnv(name)
|
err = c.SetWorkspace(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(err.Error())
|
c.Ui.Error(err.Error())
|
||||||
return 1
|
return 1
|
||||||
|
|
Loading…
Reference in New Issue