Skip to content

Commit

Permalink
fix: suggested changes and linter fix
Browse files Browse the repository at this point in the history
  • Loading branch information
GoodmanBen committed Mar 13, 2022
1 parent 5c86185 commit 0f5bb7f
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 32 deletions.
4 changes: 3 additions & 1 deletion command/file_runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ func NewFileRunner(filename string, config *config.TfmigrateConfig, option *tfmi
return nil, err
}

m, err := mc.Migrator.NewMigrator(option, config.IsBackendTerraformCloud)
option.IsBackendTerraformCloud = config.IsBackendTerraformCloud

m, err := mc.Migrator.NewMigrator(option)

if err != nil {
return nil, err
Expand Down
5 changes: 4 additions & 1 deletion tfmigrate/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type MigrationConfig struct {
// MigratorConfig is an interface of factory method for Migrator.
type MigratorConfig interface {
// NewMigrator returns a new instance of Migrator.
NewMigrator(o *MigratorOption, isBackendTerraformCloud bool) (Migrator, error)
NewMigrator(o *MigratorOption) (Migrator, error)
}

// MigratorOption customizes a behavior of Migrator.
Expand All @@ -27,4 +27,7 @@ type MigratorOption struct {

// PlanOut is a path to plan file to be saved.
PlanOut string

// IsBackendTerraformCloud is a boolean indicating if the remote backend is Terraform Cloud
IsBackendTerraformCloud bool
}
2 changes: 1 addition & 1 deletion tfmigrate/mock_migrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ type MockMigratorConfig struct {
var _ MigratorConfig = (*MockMigratorConfig)(nil)

// NewMigrator returns a new instance of MockMigrator.
func (c *MockMigratorConfig) NewMigrator(o *MigratorOption, isBackendTerraformCloud bool) (Migrator, error) {
func (c *MockMigratorConfig) NewMigrator(o *MigratorOption) (Migrator, error) {
return NewMockMigrator(c.PlanError, c.ApplyError), nil
}

Expand Down
28 changes: 12 additions & 16 deletions tfmigrate/multi_state_migrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ type MultiStateMigratorConfig struct {
var _ MigratorConfig = (*MultiStateMigratorConfig)(nil)

// NewMigrator returns a new instance of MultiStateMigrator.
func (c *MultiStateMigratorConfig) NewMigrator(o *MigratorOption, isBackendTerraformCloud bool) (Migrator, error) {
func (c *MultiStateMigratorConfig) NewMigrator(o *MigratorOption) (Migrator, error) {
if len(c.Actions) == 0 {
return nil, fmt.Errorf("faild to NewMigrator with no actions")
}
Expand All @@ -56,7 +56,7 @@ func (c *MultiStateMigratorConfig) NewMigrator(o *MigratorOption, isBackendTerra
c.ToWorkspace = "default"
}

return NewMultiStateMigrator(c.FromDir, c.ToDir, c.FromWorkspace, c.ToWorkspace, actions, o, c.Force, isBackendTerraformCloud), nil
return NewMultiStateMigrator(c.FromDir, c.ToDir, c.FromWorkspace, c.ToWorkspace, actions, o, c.Force), nil
}

// MultiStateMigrator implements the Migrator interface.
Expand All @@ -76,16 +76,13 @@ type MultiStateMigrator struct {
o *MigratorOption
// force operation in case of unexpected diff
force bool
// isBackendTerraformCloud is a boolean representing whether they remote backend
// is Terraform Cloud
isBackendTerraformCloud bool
}

var _ Migrator = (*MultiStateMigrator)(nil)

// NewMultiStateMigrator returns a new MultiStateMigrator instance.
func NewMultiStateMigrator(fromDir string, toDir string, fromWorkspace string, toWorkspace string,
actions []MultiStateAction, o *MigratorOption, force bool, isBackendTerraformCloud bool) *MultiStateMigrator {
actions []MultiStateAction, o *MigratorOption, force bool) *MultiStateMigrator {
fromTf := tfexec.NewTerraformCLI(tfexec.NewExecutor(fromDir, os.Environ()))
toTf := tfexec.NewTerraformCLI(tfexec.NewExecutor(toDir, os.Environ()))
if o != nil && len(o.ExecPath) > 0 {
Expand All @@ -94,14 +91,13 @@ func NewMultiStateMigrator(fromDir string, toDir string, fromWorkspace string, t
}

return &MultiStateMigrator{
fromTf: fromTf,
toTf: toTf,
fromWorkspace: fromWorkspace,
toWorkspace: toWorkspace,
actions: actions,
o: o,
force: force,
isBackendTerraformCloud: isBackendTerraformCloud,
fromTf: fromTf,
toTf: toTf,
fromWorkspace: fromWorkspace,
toWorkspace: toWorkspace,
actions: actions,
o: o,
force: force,
}
}

Expand All @@ -111,14 +107,14 @@ func NewMultiStateMigrator(fromDir string, toDir string, fromWorkspace string, t
// the Migrator interface between a single and multi state migrator.
func (m *MultiStateMigrator) plan(ctx context.Context) (*tfexec.State, *tfexec.State, error) {
// setup fromDir.
fromCurrentState, fromSwitchBackToRemoteFunc, err := setupWorkDir(ctx, m.fromTf, m.fromWorkspace, m.isBackendTerraformCloud)
fromCurrentState, fromSwitchBackToRemoteFunc, err := setupWorkDir(ctx, m.fromTf, m.fromWorkspace, m.o.IsBackendTerraformCloud)
if err != nil {
return nil, nil, err
}
// switch back it to remote on exit.
defer fromSwitchBackToRemoteFunc()
// setup toDir.
toCurrentState, toSwitchBackToRemoteFunc, err := setupWorkDir(ctx, m.toTf, m.toWorkspace, m.isBackendTerraformCloud)
toCurrentState, toSwitchBackToRemoteFunc, err := setupWorkDir(ctx, m.toTf, m.toWorkspace, m.o.IsBackendTerraformCloud)
if err != nil {
return nil, nil, err
}
Expand Down
24 changes: 11 additions & 13 deletions tfmigrate/state_migrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ package tfmigrate
import (
"context"
"fmt"
"github.com/minamijoyo/tfmigrate/tfexec"
"log"
"os"

"github.com/minamijoyo/tfmigrate/tfexec"
)

// StateMigratorConfig is a config for StateMigrator.
Expand Down Expand Up @@ -34,7 +35,7 @@ type StateMigratorConfig struct {
var _ MigratorConfig = (*StateMigratorConfig)(nil)

// NewMigrator returns a new instance of StateMigrator.
func (c *StateMigratorConfig) NewMigrator(o *MigratorOption, isBackendTerraformCloud bool) (Migrator, error) {
func (c *StateMigratorConfig) NewMigrator(o *MigratorOption) (Migrator, error) {
// default working directory
dir := "."
if len(c.Dir) > 0 {
Expand All @@ -60,7 +61,7 @@ func (c *StateMigratorConfig) NewMigrator(o *MigratorOption, isBackendTerraformC
c.Workspace = "default"
}

return NewStateMigrator(dir, c.Workspace, actions, o, c.Force, isBackendTerraformCloud), nil
return NewStateMigrator(dir, c.Workspace, actions, o, c.Force), nil
}

// StateMigrator implements the Migrator interface.
Expand All @@ -76,28 +77,25 @@ type StateMigrator struct {
force bool
// workspace is the state workspace which the migration works with.
workspace string
// IsBackendTerraformCloud is whether the remote backed is TerraformCloud
isBackendTerraformCloud bool
}

var _ Migrator = (*StateMigrator)(nil)

// NewStateMigrator returns a new StateMigrator instance.
func NewStateMigrator(dir string, workspace string, actions []StateAction,
o *MigratorOption, force bool, isBackendTerraformCloud bool) *StateMigrator {
o *MigratorOption, force bool) *StateMigrator {
e := tfexec.NewExecutor(dir, os.Environ())
tf := tfexec.NewTerraformCLI(e)
if o != nil && len(o.ExecPath) > 0 {
tf.SetExecPath(o.ExecPath)
}

return &StateMigrator{
tf: tf,
actions: actions,
o: o,
force: force,
workspace: workspace,
isBackendTerraformCloud: isBackendTerraformCloud,
tf: tf,
actions: actions,
o: o,
force: force,
workspace: workspace,
}
}

Expand All @@ -107,7 +105,7 @@ func NewStateMigrator(dir string, workspace string, actions []StateAction,
// the Migrator interface between a single and multi state migrator.
func (m *StateMigrator) plan(ctx context.Context) (*tfexec.State, error) {
// setup work dir.
currentState, switchBackToRemoteFunc, err := setupWorkDir(ctx, m.tf, m.workspace, m.isBackendTerraformCloud)
currentState, switchBackToRemoteFunc, err := setupWorkDir(ctx, m.tf, m.workspace, m.o.IsBackendTerraformCloud)
if err != nil {
return nil, err
}
Expand Down

0 comments on commit 0f5bb7f

Please sign in to comment.