command/meta: always ask for unset variable input
Fixes #7975 This changes the InputMode for the CLI to always be: InputModeProvider | InputModeVar | InputModeVarUnset Which means: * Ask for provider variables * Ask for user variables _that are not already set_ The change is the latter point. Before, we'd only ask for variables if zero were given. This forces the user to either have no variables set via the CLI, env vars, tfvars or ALL variables, but no in between. As reported in #7975, this isn't expected behavior. The new change makes is so that unset variables are always asked for. Users can retain the previous behavior by setting `-input=false`. This would ensure that variables set by external sources cover all cases.
This commit is contained in:
parent
61a1501731
commit
1248b147ac
|
@ -407,6 +407,47 @@ func TestApply_input(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// When only a partial set of the variables are set, Terraform
|
||||
// should still ask for the unset ones by default (with -input=true)
|
||||
func TestApply_inputPartial(t *testing.T) {
|
||||
// Disable test mode so input would be asked
|
||||
test = false
|
||||
defer func() { test = true }()
|
||||
|
||||
// Set some default reader/writers for the inputs
|
||||
defaultInputReader = bytes.NewBufferString("one\ntwo\n")
|
||||
defaultInputWriter = new(bytes.Buffer)
|
||||
|
||||
statePath := testTempFile(t)
|
||||
|
||||
p := testProvider()
|
||||
ui := new(cli.MockUi)
|
||||
c := &ApplyCommand{
|
||||
Meta: Meta{
|
||||
ContextOpts: testCtxConfig(p),
|
||||
Ui: ui,
|
||||
},
|
||||
}
|
||||
|
||||
args := []string{
|
||||
"-state", statePath,
|
||||
"-var", "foo=foovalue",
|
||||
testFixturePath("apply-input-partial"),
|
||||
}
|
||||
if code := c.Run(args); code != 0 {
|
||||
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
|
||||
}
|
||||
|
||||
expected := strings.TrimSpace(`
|
||||
<no state>
|
||||
Outputs:
|
||||
|
||||
bar = one
|
||||
foo = foovalue
|
||||
`)
|
||||
testStateOutput(t, statePath, expected)
|
||||
}
|
||||
|
||||
func TestApply_noArgs(t *testing.T) {
|
||||
cwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
|
|
|
@ -221,10 +221,8 @@ func (m *Meta) InputMode() terraform.InputMode {
|
|||
|
||||
var mode terraform.InputMode
|
||||
mode |= terraform.InputModeProvider
|
||||
if len(m.variables) == 0 {
|
||||
mode |= terraform.InputModeVar
|
||||
mode |= terraform.InputModeVarUnset
|
||||
}
|
||||
|
||||
return mode
|
||||
}
|
||||
|
|
|
@ -175,7 +175,11 @@ func TestMetaInputMode_vars(t *testing.T) {
|
|||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
if m.InputMode()&terraform.InputModeVar != 0 {
|
||||
if m.InputMode()&terraform.InputModeVar == 0 {
|
||||
t.Fatalf("bad: %#v", m.InputMode())
|
||||
}
|
||||
|
||||
if m.InputMode()&terraform.InputModeVarUnset == 0 {
|
||||
t.Fatalf("bad: %#v", m.InputMode())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
variable "foo" {}
|
||||
variable "bar" {}
|
||||
|
||||
output "foo" { value = "${var.foo}" }
|
||||
output "bar" { value = "${var.bar}" }
|
|
@ -22,7 +22,8 @@ const (
|
|||
// InputModeVar asks for all variables
|
||||
InputModeVar InputMode = 1 << iota
|
||||
|
||||
// InputModeVarUnset asks for variables which are not set yet
|
||||
// InputModeVarUnset asks for variables which are not set yet.
|
||||
// InputModeVar must be set for this to have an effect.
|
||||
InputModeVarUnset
|
||||
|
||||
// InputModeProvider asks for provider variables
|
||||
|
|
Loading…
Reference in New Issue