command: Input tells us whether we should ask for input or not

This commit is contained in:
Mitchell Hashimoto 2014-09-29 11:11:35 -07:00
parent a918833edd
commit 5b0859b3f5
3 changed files with 52 additions and 0 deletions

View File

@ -30,6 +30,7 @@ type Meta struct {
// Variables for the context (private) // Variables for the context (private)
autoKey string autoKey string
autoVariables map[string]string autoVariables map[string]string
input bool
variables map[string]string variables map[string]string
color bool color bool
@ -105,6 +106,11 @@ func (m *Meta) Context(copts contextOpts) (*terraform.Context, bool, error) {
return ctx, false, nil return ctx, false, nil
} }
// Input returns true if we should ask for input for context.
func (m *Meta) Input() bool {
return m.input && len(m.variables) == 0
}
// contextOpts returns the options to use to initialize a Terraform // contextOpts returns the options to use to initialize a Terraform
// context with the settings from this Meta. // context with the settings from this Meta.
func (m *Meta) contextOpts() *terraform.ContextOpts { func (m *Meta) contextOpts() *terraform.ContextOpts {
@ -127,6 +133,7 @@ func (m *Meta) contextOpts() *terraform.ContextOpts {
vs[k] = v vs[k] = v
} }
opts.Variables = vs opts.Variables = vs
opts.UIInput = new(UIInput)
return &opts return &opts
} }
@ -134,6 +141,7 @@ func (m *Meta) contextOpts() *terraform.ContextOpts {
// flags adds the meta flags to the given FlagSet. // flags adds the meta flags to the given FlagSet.
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.Var((*FlagVar)(&m.variables), "var", "variables") f.Var((*FlagVar)(&m.variables), "var", "variables")
f.Var((*FlagVarFile)(&m.variables), "var-file", "variable file") f.Var((*FlagVarFile)(&m.variables), "var-file", "variable file")

View File

@ -47,3 +47,45 @@ func TestMetaColorize(t *testing.T) {
t.Fatal("should be disabled") t.Fatal("should be disabled")
} }
} }
func TestMetaInput(t *testing.T) {
m := new(Meta)
args := []string{}
fs := m.flagSet("foo")
if err := fs.Parse(args); err != nil {
t.Fatalf("err: %s", err)
}
if !m.Input() {
t.Fatal("should input")
}
}
func TestMetaInput_disable(t *testing.T) {
m := new(Meta)
args := []string{"-input=false"}
fs := m.flagSet("foo")
if err := fs.Parse(args); err != nil {
t.Fatalf("err: %s", err)
}
if m.Input() {
t.Fatal("should not input")
}
}
func TestMetaInput_vars(t *testing.T) {
m := new(Meta)
args := []string{"-var", "foo=bar"}
fs := m.flagSet("foo")
if err := fs.Parse(args); err != nil {
t.Fatalf("err: %s", err)
}
if m.Input() {
t.Fatal("should not input")
}
}

View File

@ -167,6 +167,8 @@ Options:
-destroy If set, a plan will be generated to destroy all resources -destroy If set, a plan will be generated to destroy all resources
managed by the given configuration and state. managed by the given configuration and state.
-input=true Ask for input for variables if not directly set.
-module-depth=n Specifies the depth of modules to show in the output. -module-depth=n Specifies the depth of modules to show in the output.
This does not affect the plan itself, only the output This does not affect the plan itself, only the output
shown. By default, this is zero. -1 will expand all. shown. By default, this is zero. -1 will expand all.