terraform/internal/command
Martin Atkins 36c4d4c241 core and backend: remove redundant handling of default variable values
Previously we had three different layers all thinking they were
responsible for substituting a default value for an unset root module
variable:
 - the local backend, via logic in backend.ParseVariableValues
 - the context.Plan function (and other similar functions) trying to
   preprocess the input variables using
   terraform.mergeDefaultInputVariableValues .
 - the newer prepareFinalInputVariableValue, which aims to centralize all
   of the variable preparation logic so it can be common to both root and
   child module variables.

The second of these was also trying to handle type constraint checking,
which is also the responsibility of the central function and not something
we need to handle so early.

Only the last of these consistently handles both root and child module
variables, and so is the one we ought to keep. The others are now
redundant and are causing prepareFinalInputVariableValue to get a slightly
corrupted view of the caller's chosen variable values.

To rectify that, here we remove the two redundant layers altogether and
have unset root variables pass through as cty.NilVal all the way to the
central prepareFinalInputVariableValue function, which will then handle
them in a suitable way which properly respects the "nullable" setting.

This commit includes some test changes in the terraform package to make
those tests no longer rely on the mergeDefaultInputVariableValues logic
we've removed, and to instead explicitly set cty.NilVal for all unset
variables to comply with our intended contract for PlanOpts.SetVariables,
and similar. (This is so that we can more easily catch bugs in callers
where they _don't_ correctly handle input variables; it allows us to
distinguish between the caller explicitly marking a variable as unset vs.
not describing it at all, where the latter is a bug in the caller.)
2022-01-10 12:26:54 -08:00
..
arguments command/init: Add -cloud alias (of -backend) 2021-11-19 14:40:12 -06:00
cliconfig cliconfig: Fix error message about invalid credentials helper type 2021-09-29 13:36:59 -07:00
clistate Upgrade to Go 1.17 2021-08-17 15:20:05 -07:00
e2etest build: Build and run e2etest as part of the release build pipeline 2022-01-05 14:31:04 -08:00
format command/format: Limitation of plans.ResourceInstanceDeleteBecauseNoModule 2021-12-13 10:04:15 -05:00
jsonconfig allow json output to marshal ConfigModeAttr blocks 2021-09-03 13:53:52 -04:00
jsonplan core and backend: remove redundant handling of default variable values 2022-01-10 12:26:54 -08:00
jsonprovider Merge pull request #29648 from hashicorp/jbardin/tfproto6.1 2021-10-28 16:00:02 -04:00
jsonstate json-output: Release format version 1.0 2021-10-06 11:13:06 -04:00
testdata providercache: Discard lock entries for unused providers 2021-12-17 15:30:21 -08:00
views command: Remove the experimental "terraform add" command 2021-10-20 06:42:47 -07:00
webbrowser
workdir workdir: Start of a new package for working directory state management 2021-09-10 14:56:49 -07:00
apply.go command: Adjust skipping of resource counts for any remote implementation 2021-10-29 21:23:28 -05:00
apply_destroy_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
apply_test.go test planfile may need to have a specific lineage 2021-10-13 17:28:14 -04:00
autocomplete.go
autocomplete_test.go
cli_ui.go
cli_ui_test.go
command.go
command_test.go command: make module installation interruptible 2021-11-11 12:28:10 +00:00
console.go Merge pull request #29825 from hashicorp/jbardin/no-panicwrap 2021-10-29 14:41:05 -04:00
console_interactive.go remove wrapped streams and readline 2021-10-28 11:51:39 -04:00
console_interactive_solaris.go Upgrade to Go 1.17 2021-08-17 15:20:05 -07:00
console_test.go
flag_kv.go
flag_kv_test.go
fmt.go
fmt_test.go
get.go command: make module installation interruptible 2021-11-11 12:28:10 +00:00
get_test.go command: make module installation interruptible 2021-11-11 12:28:10 +00:00
graph.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
graph_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
hook_module_install.go
import.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
import_test.go backend/local: Check dependency lock consistency before any operations 2021-10-01 14:43:58 -07:00
init.go command/init: Adjust init help output 2021-11-19 14:40:12 -06:00
init_test.go providercache: Discard lock entries for unused providers 2021-12-17 15:30:21 -08:00
login.go insert panic handlers 2021-10-28 11:51:39 -04:00
login_test.go
logout.go
logout_test.go
meta.go cli: Fix init failure with deleted cache 2021-10-21 08:44:26 -04:00
meta_backend.go command/meta_backend: Allow the remote backend to have no workspaces [again] 2021-12-14 09:50:42 -06:00
meta_backend_migrate.go Do not ask to migrate empty default workspace 2021-12-01 11:43:41 -06:00
meta_backend_migrate_test.go Backend State Migration to `cloud`: Multiple Workspaces 2021-10-28 19:29:13 -05:00
meta_backend_test.go command/init: Fail if -input=false but required 2021-10-25 15:08:10 -04:00
meta_config.go revert change to installModules diag handling 2021-11-11 12:28:16 +00:00
meta_dependencies.go backend/local: Check dependency lock consistency before any operations 2021-10-01 14:43:58 -07:00
meta_new.go Move plans/ to internal/plans/ 2021-05-17 14:09:07 -07:00
meta_providers.go command: Early error message for missing cache entries of locked providers 2021-10-05 10:59:59 -07:00
meta_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
meta_vars.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
output.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
output_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
plan.go Clarify legacy Ui comments 2021-10-28 19:29:21 -05:00
plan_test.go backend/local: Check dependency lock consistency before any operations 2021-10-01 14:43:58 -07:00
plugins.go workdir: Start of a new package for working directory state management 2021-09-10 14:56:49 -07:00
plugins_lock.go core: Simplify and centralize plugin availability checks 2021-10-01 14:43:58 -07:00
plugins_lock_test.go
plugins_test.go
providers.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
providers_lock.go providers subcommand tests (#28744) 2021-05-19 12:56:16 -04:00
providers_lock_test.go providers subcommand tests (#28744) 2021-05-19 12:56:16 -04:00
providers_mirror.go
providers_mirror_test.go providers subcommand tests (#28744) 2021-05-19 12:56:16 -04:00
providers_schema.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
providers_schema_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
providers_test.go
push.go
refresh.go Clarify legacy Ui comments 2021-10-28 19:29:21 -05:00
refresh_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
show.go command/show: Disable plan state lineage checks 2021-12-17 17:46:42 -05:00
show_test.go command/show: Disable plan state lineage checks 2021-12-17 17:46:42 -05:00
state_command.go
state_list.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
state_list_test.go
state_meta.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
state_mv.go Error if backup or backup-out options are used without the state option on non-local backends for the state mv command 2021-11-09 13:09:36 -06:00
state_mv_test.go Error if backup or backup-out options are used without the state option on non-local backends for the state mv command 2021-11-09 13:09:36 -06:00
state_pull.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
state_pull_test.go
state_push.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
state_push_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_replace_provider.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_replace_provider_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_rm.go
state_rm_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_show.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
state_show_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
taint.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
taint_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
test.go command: make module installation interruptible 2021-11-11 12:28:10 +00:00
test_test.go
ui_input.go command: Ensure all answers were used in command.testInputResponseMap 2021-09-21 22:26:16 -05:00
ui_input_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
unlock.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
unlock_test.go
untaint.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
untaint_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
validate.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
validate_test.go
version.go
version_test.go
workspace_command.go command/workspace_delete: Allow deleting a workspace with empty husks 2021-10-13 13:54:11 -07:00
workspace_command_test.go command/workspace_delete: Allow deleting a workspace with empty husks 2021-10-13 13:54:11 -07:00
workspace_delete.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
workspace_list.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
workspace_new.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
workspace_select.go Add cloud {} configuration block for Terraform Cloud 2021-10-28 19:29:09 -05:00
workspace_show.go