Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
(WIP) Allow undeclared vars
Browse files Browse the repository at this point in the history
* hashicorp#19424

This adds the flag `-allow-undeclared-vars` which skips the parsing of
variables, which would otherwise generate an Error/Warning when a `-var`
is passed to `apply`/`plan` without being defined in a variable block

Without flag:
```
$ terraform plan -var foo=bar
Error: Value for undeclared variable

A variable named "foo" was assigned on the command line, but the root module
does not declare a variable of that name. To use this value, add a "variable"
block to the configuration.
```

With flag:
```
$ terraform apply -var foo=bar -allow-undeclared-vars

Refreshing Terraform state in-memory prior to plan...
...
```
  • Loading branch information
Stretch96 committed Mar 18, 2019
1 parent 04f3766 commit 295ce1f
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 13 deletions.
13 changes: 7 additions & 6 deletions backend/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,12 +189,13 @@ type Operation struct {

// The options below are more self-explanatory and affect the runtime
// behavior of the operation.
AutoApprove bool
Destroy bool
DestroyForce bool
Parallelism int
Targets []addrs.Targetable
Variables map[string]UnparsedVariableValue
AutoApprove bool
AllowUndeclaredVars bool
Destroy bool
DestroyForce bool
Parallelism int
Targets []addrs.Targetable
Variables map[string]UnparsedVariableValue

// Input/output/control options.
UIIn terraform.UIInput
Expand Down
12 changes: 7 additions & 5 deletions backend/local/backend_local.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,14 +136,16 @@ func (b *Local) contextDirect(op *backend.Operation, opts terraform.ContextOpts)
}
opts.Config = config

variables, varDiags := backend.ParseVariableValues(op.Variables, config.Module.Variables)
diags = diags.Append(varDiags)
if !op.AllowUndeclaredVars {
variables, varDiags := backend.ParseVariableValues(op.Variables, config.Module.Variables)
diags = diags.Append(varDiags)
if op.Variables != nil {
opts.Variables = variables
}
}
if diags.HasErrors() {
return nil, nil, diags
}
if op.Variables != nil {
opts.Variables = variables
}

tfCtx, ctxDiags := terraform.NewContext(&opts)
diags = diags.Append(ctxDiags)
Expand Down
4 changes: 3 additions & 1 deletion command/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ type ApplyCommand struct {
}

func (c *ApplyCommand) Run(args []string) int {
var destroyForce, refresh, autoApprove bool
var destroyForce, refresh, autoApprove, allowUndeclaredVars bool
args, err := c.Meta.process(args, true)
if err != nil {
return 1
Expand All @@ -50,6 +50,7 @@ func (c *ApplyCommand) Run(args []string) int {
cmdFlags.StringVar(&c.Meta.backupPath, "backup", "", "path")
cmdFlags.BoolVar(&c.Meta.stateLock, "lock", true, "lock state")
cmdFlags.DurationVar(&c.Meta.stateLockTimeout, "lock-timeout", 0, "lock timeout")
cmdFlags.BoolVar(&allowUndeclaredVars, "allow-undeclared-vars", false, "allow-undeclared-vars")
cmdFlags.Usage = func() { c.Ui.Error(c.Help()) }
if err := cmdFlags.Parse(args); err != nil {
return 1
Expand Down Expand Up @@ -180,6 +181,7 @@ func (c *ApplyCommand) Run(args []string) int {
opReq.ConfigDir = configPath
opReq.Destroy = c.Destroy
opReq.DestroyForce = destroyForce
opReq.AllowUndeclaredVars = allowUndeclaredVars
opReq.PlanFile = planFile
opReq.PlanRefresh = refresh
opReq.Type = backend.OperationTypeApply
Expand Down
4 changes: 3 additions & 1 deletion command/plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ type PlanCommand struct {
}

func (c *PlanCommand) Run(args []string) int {
var destroy, refresh, detailed bool
var destroy, refresh, detailed, allowUndeclaredVars bool
var outPath string

args, err := c.Meta.process(args, true)
Expand All @@ -34,6 +34,7 @@ func (c *PlanCommand) Run(args []string) int {
cmdFlags.BoolVar(&detailed, "detailed-exitcode", false, "detailed-exitcode")
cmdFlags.BoolVar(&c.Meta.stateLock, "lock", true, "lock state")
cmdFlags.DurationVar(&c.Meta.stateLockTimeout, "lock-timeout", 0, "lock timeout")
cmdFlags.BoolVar(&allowUndeclaredVars, "allow-undeclared-vars", false, "allow-undeclared-vars")
cmdFlags.Usage = func() { c.Ui.Error(c.Help()) }
if err := cmdFlags.Parse(args); err != nil {
return 1
Expand Down Expand Up @@ -96,6 +97,7 @@ func (c *PlanCommand) Run(args []string) int {
opReq := c.Operation(b)
opReq.ConfigDir = configPath
opReq.Destroy = destroy
opReq.AllowUndeclaredVars = allowUndeclaredVars
opReq.PlanRefresh = refresh
opReq.PlanOutPath = outPath
opReq.PlanRefresh = refresh
Expand Down

0 comments on commit 295ce1f

Please sign in to comment.