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"
)
// 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'.
type FlagVar map[string]string
type FlagKV map[string]string
func (v *FlagVar) String() string {
func (v *FlagKV) String() string {
return ""
}
func (v *FlagVar) Set(raw string) error {
func (v *FlagKV) Set(raw string) error {
idx := strings.Index(raw, "=")
if idx == -1 {
return fmt.Errorf("No '=' value in arg: %s", raw)
@ -32,16 +32,16 @@ func (v *FlagVar) Set(raw string) error {
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'
type FlagVarFile map[string]string
type FlagKVFile map[string]string
func (v *FlagVarFile) String() string {
func (v *FlagKVFile) String() string {
return ""
}
func (v *FlagVarFile) Set(raw string) error {
vs, err := loadVarFile(raw)
func (v *FlagKVFile) Set(raw string) error {
vs, err := loadKVFile(raw)
if err != nil {
return err
}
@ -57,7 +57,7 @@ func (v *FlagVarFile) Set(raw string) error {
return nil
}
func loadVarFile(rawPath string) (map[string]string, error) {
func loadKVFile(rawPath string) (map[string]string, error) {
path, err := homedir.Expand(rawPath)
if err != nil {
return nil, fmt.Errorf(

View File

@ -7,11 +7,11 @@ import (
"testing"
)
func TestFlagVar_impl(t *testing.T) {
var _ flag.Value = new(FlagVar)
func TestFlagKV_impl(t *testing.T) {
var _ flag.Value = new(FlagKV)
}
func TestFlagVar(t *testing.T) {
func TestFlagKV(t *testing.T) {
cases := []struct {
Input string
Output map[string]string
@ -43,7 +43,7 @@ func TestFlagVar(t *testing.T) {
}
for _, tc := range cases {
f := new(FlagVar)
f := new(FlagKV)
err := f.Set(tc.Input)
if (err != nil) != tc.Error {
t.Fatalf("bad error. Input: %#v", tc.Input)
@ -56,11 +56,11 @@ func TestFlagVar(t *testing.T) {
}
}
func TestFlagVarFile_impl(t *testing.T) {
var _ flag.Value = new(FlagVarFile)
func TestFlagKVFile_impl(t *testing.T) {
var _ flag.Value = new(FlagKVFile)
}
func TestFlagVarFile(t *testing.T) {
func TestFlagKVFile(t *testing.T) {
inputLibucl := `
foo = "bar"
`
@ -93,7 +93,7 @@ foo = "bar"
t.Fatalf("err: %s", err)
}
f := new(FlagVarFile)
f := new(FlagKVFile)
err := f.Set(path)
if (err != nil) != tc.Error {
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
}
path := m.statePath
if path == "" {
path = DefaultStateFilename
localPath := m.statePath
if localPath == "" {
localPath = DefaultStateFilename
}
remotePath := filepath.Join(DefaultDataDir, DefaultStateFilename)
state, statePath, err := State(&StateOpts{
LocalPath: path,
LocalPath: localPath,
LocalPathOut: m.stateOutPath,
RemotePath: remotePath,
BackupPath: m.backupPath,
})
if err != nil {
@ -246,11 +248,11 @@ func (m *Meta) contextOpts() *terraform.ContextOpts {
func (m *Meta) flagSet(n string) *flag.FlagSet {
f := flag.NewFlagSet(n, flag.ContinueOnError)
f.BoolVar(&m.input, "input", true, "input")
f.Var((*FlagVar)(&m.variables), "var", "variables")
f.Var((*FlagVarFile)(&m.variables), "var-file", "variable file")
f.Var((*FlagKV)(&m.variables), "var", "variables")
f.Var((*FlagKVFile)(&m.variables), "var-file", "variable file")
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.

View File

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