command: FlagVar => FlagKV

This commit is contained in:
Mitchell Hashimoto 2015-02-21 18:30:41 -08:00
parent 4f91b98a3e
commit 3550f7ac3a
4 changed files with 38 additions and 32 deletions

View File

@ -9,15 +9,15 @@ import (
"github.com/mitchellh/go-homedir" "github.com/mitchellh/go-homedir"
) )
// FlagVar is a flag.Value implementation for parsing user variables // FlagKV is a flag.Value implementation for parsing user variables
// from the command-line in the format of '-var key=value'. // from the command-line in the format of '-var key=value'.
type FlagVar map[string]string type FlagKV map[string]string
func (v *FlagVar) String() string { func (v *FlagKV) String() string {
return "" return ""
} }
func (v *FlagVar) Set(raw string) error { func (v *FlagKV) Set(raw string) error {
idx := strings.Index(raw, "=") idx := strings.Index(raw, "=")
if idx == -1 { if idx == -1 {
return fmt.Errorf("No '=' value in arg: %s", raw) return fmt.Errorf("No '=' value in arg: %s", raw)
@ -32,16 +32,16 @@ func (v *FlagVar) Set(raw string) error {
return nil return nil
} }
// FlagVarFile is a flag.Value implementation for parsing user variables // FlagKVFile is a flag.Value implementation for parsing user variables
// from the command line in the form of files. i.e. '-var-file=foo' // from the command line in the form of files. i.e. '-var-file=foo'
type FlagVarFile map[string]string type FlagKVFile map[string]string
func (v *FlagVarFile) String() string { func (v *FlagKVFile) String() string {
return "" return ""
} }
func (v *FlagVarFile) Set(raw string) error { func (v *FlagKVFile) Set(raw string) error {
vs, err := loadVarFile(raw) vs, err := loadKVFile(raw)
if err != nil { if err != nil {
return err return err
} }
@ -57,7 +57,7 @@ func (v *FlagVarFile) Set(raw string) error {
return nil return nil
} }
func loadVarFile(rawPath string) (map[string]string, error) { func loadKVFile(rawPath string) (map[string]string, error) {
path, err := homedir.Expand(rawPath) path, err := homedir.Expand(rawPath)
if err != nil { if err != nil {
return nil, fmt.Errorf( return nil, fmt.Errorf(

View File

@ -7,11 +7,11 @@ import (
"testing" "testing"
) )
func TestFlagVar_impl(t *testing.T) { func TestFlagKV_impl(t *testing.T) {
var _ flag.Value = new(FlagVar) var _ flag.Value = new(FlagKV)
} }
func TestFlagVar(t *testing.T) { func TestFlagKV(t *testing.T) {
cases := []struct { cases := []struct {
Input string Input string
Output map[string]string Output map[string]string
@ -43,7 +43,7 @@ func TestFlagVar(t *testing.T) {
} }
for _, tc := range cases { for _, tc := range cases {
f := new(FlagVar) f := new(FlagKV)
err := f.Set(tc.Input) err := f.Set(tc.Input)
if (err != nil) != tc.Error { if (err != nil) != tc.Error {
t.Fatalf("bad error. Input: %#v", tc.Input) t.Fatalf("bad error. Input: %#v", tc.Input)
@ -56,11 +56,11 @@ func TestFlagVar(t *testing.T) {
} }
} }
func TestFlagVarFile_impl(t *testing.T) { func TestFlagKVFile_impl(t *testing.T) {
var _ flag.Value = new(FlagVarFile) var _ flag.Value = new(FlagKVFile)
} }
func TestFlagVarFile(t *testing.T) { func TestFlagKVFile(t *testing.T) {
inputLibucl := ` inputLibucl := `
foo = "bar" foo = "bar"
` `
@ -93,7 +93,7 @@ foo = "bar"
t.Fatalf("err: %s", err) t.Fatalf("err: %s", err)
} }
f := new(FlagVarFile) f := new(FlagKVFile)
err := f.Set(path) err := f.Set(path)
if (err != nil) != tc.Error { if (err != nil) != tc.Error {
t.Fatalf("bad error. Input: %#v", tc.Input) t.Fatalf("bad error. Input: %#v", tc.Input)

View File

@ -174,14 +174,16 @@ func (m *Meta) State() (state.State, error) {
return m.state, nil return m.state, nil
} }
path := m.statePath localPath := m.statePath
if path == "" { if localPath == "" {
path = DefaultStateFilename localPath = DefaultStateFilename
} }
remotePath := filepath.Join(DefaultDataDir, DefaultStateFilename)
state, statePath, err := State(&StateOpts{ state, statePath, err := State(&StateOpts{
LocalPath: path, LocalPath: localPath,
LocalPathOut: m.stateOutPath, LocalPathOut: m.stateOutPath,
RemotePath: remotePath,
BackupPath: m.backupPath, BackupPath: m.backupPath,
}) })
if err != nil { if err != nil {
@ -246,11 +248,11 @@ func (m *Meta) contextOpts() *terraform.ContextOpts {
func (m *Meta) flagSet(n string) *flag.FlagSet { func (m *Meta) flagSet(n string) *flag.FlagSet {
f := flag.NewFlagSet(n, flag.ContinueOnError) f := flag.NewFlagSet(n, flag.ContinueOnError)
f.BoolVar(&m.input, "input", true, "input") f.BoolVar(&m.input, "input", true, "input")
f.Var((*FlagVar)(&m.variables), "var", "variables") f.Var((*FlagKV)(&m.variables), "var", "variables")
f.Var((*FlagVarFile)(&m.variables), "var-file", "variable file") f.Var((*FlagKVFile)(&m.variables), "var-file", "variable file")
if m.autoKey != "" { if m.autoKey != "" {
f.Var((*FlagVarFile)(&m.autoVariables), m.autoKey, "variable file") f.Var((*FlagKVFile)(&m.autoVariables), m.autoKey, "variable file")
} }
// Create an io.Writer that writes to our Ui properly for errors. // Create an io.Writer that writes to our Ui properly for errors.

View File

@ -20,6 +20,9 @@ type StateOpts struct {
LocalPath string LocalPath string
LocalPathOut string LocalPathOut string
// RemotePath is the path where the remote state cache would be.
RemotePath string
// BackupPath is the path where the backup will be placed. If not set, // BackupPath is the path where the backup will be placed. If not set,
// it is assumed to be the path where the state is stored locally // it is assumed to be the path where the state is stored locally
// plus the DefaultBackupExtension. // plus the DefaultBackupExtension.
@ -37,14 +40,15 @@ func State(opts *StateOpts) (state.State, string, error) {
var resultPath string var resultPath string
// Get the remote state cache path // Get the remote state cache path
remoteCachePath := filepath.Join(DefaultDataDir, DefaultStateFilename) if opts.RemotePath != "" {
if _, err := os.Stat(remoteCachePath); err == nil { if _, err := os.Stat(opts.RemotePath); err == nil {
// We have a remote state, initialize that. // We have a remote state, initialize that.
result, err = remoteStateFromPath(remoteCachePath) result, err = remoteStateFromPath(opts.RemotePath)
if err != nil { if err != nil {
return nil, "", err return nil, "", err
}
resultPath = opts.RemotePath
} }
resultPath = remoteCachePath
} }
// Do we have a local state? // Do we have a local state?