terraform/internal/command
Martin Atkins df578afd7e backend/local: Check dependency lock consistency before any operations
In historical versions of Terraform the responsibility to check this was
inside the terraform.NewContext function, along with various other
assorted concerns that made that function particularly complicated.

More recently, we reduced the responsibility of the "terraform" package
only to instantiating particular named plugins, assuming that its caller
is responsible for selecting appropriate versions of any providers that
_are_ external. However, until this commit we were just assuming that
"terraform init" had correctly selected appropriate plugins and recorded
them in the lock file, and so nothing was dealing with the problem of
ensuring that there haven't been any changes to the lock file or config
since the most recent "terraform init" which would cause us to need to
re-evaluate those decisions.

Part of the game here is to slightly extend the role of the dependency
locks object to also carry information about a subset of provider
addresses whose lock entries we're intentionally disregarding as part of
the various little edge-case features we have for overridding providers:
dev_overrides, "unmanaged providers", and the testing overrides in our
own unit tests. This is an in-memory-only annotation, never included in
the serialized plan files on disk.

I had originally intended to create a new package to encapsulate all of
this plugin-selection logic, including both the version constraint
checking here and also the handling of the provider factory functions, but
as an interim step I've just made version constraint consistency checks
the responsibility of the backend/local package, which means that we'll
always catch problems as part of preparing for local operations, while
not imposing these additional checks on commands that _don't_ run local
operations, such as "terraform apply" when in remote operations mode.
2021-10-01 14:43:58 -07:00
..
arguments commands: `terraform add` (#28874) 2021-06-17 12:08:37 -04: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 terraform: use ProtocolVersion from unmanaged providers' reattachConfig to chose the correct PluginClient (#28190) 2021-05-18 10:59:14 -04:00
format command/format: Include deletion reasons in plan report 2021-09-23 14:37:08 -07:00
jsonconfig allow json output to marshal ConfigModeAttr blocks 2021-09-03 13:53:52 -04:00
jsonplan core: Report ActionReasons when we plan to delete "orphans" 2021-09-23 14:37:08 -07:00
jsonprovider Revert "json-output: Release format version 1.0" 2021-09-09 11:25:35 -04:00
jsonstate Revert "json-output: Release format version 1.0" 2021-09-09 11:25:35 -04:00
testdata LoadModule now always returns the module 2021-09-28 17:58:40 -04:00
views json-output: Add change reasons to explain deletes 2021-09-24 13:17:49 -04:00
webbrowser
workdir workdir: Start of a new package for working directory state management 2021-09-10 14:56:49 -07:00
add.go Merge pull request #29235 from magodo/terraform_add_output_append 2021-09-17 11:19:55 -04:00
add_test.go Fix terraform add test failure due to bad merge 2021-09-17 14:46:44 -04:00
apply.go de-linting 2021-09-01 11:36:21 -04:00
apply_destroy_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
apply_test.go de-linting 2021-09-01 11:36:21 -04:00
autocomplete.go
autocomplete_test.go
cli_ui.go
cli_ui_test.go
command.go
command_test.go backend/local: Check dependency lock consistency before any operations 2021-10-01 14:43:58 -07:00
console.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
console_interactive.go Upgrade to Go 1.17 2021-08-17 15:20:05 -07: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
get_test.go fix temp directory handling in some tests 2021-09-13 13:45:04 -04:00
graph.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
graph_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
hook_module_install.go
import.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
import_test.go backend/local: Check dependency lock consistency before any operations 2021-10-01 14:43:58 -07:00
init.go LoadModule now always returns the module 2021-09-28 17:58:40 -04:00
init_test.go LoadModule now always returns the module 2021-09-28 17:58:40 -04:00
login.go de-linting 2021-09-01 11:36:21 -04:00
login_test.go
logout.go
logout_test.go
meta.go core: Simplify and centralize plugin availability checks 2021-10-01 14:43:58 -07:00
meta_backend.go backend/local: Check dependency lock consistency before any operations 2021-10-01 14:43:58 -07:00
meta_backend_migrate.go command: Suppress prompt for init -force-copy 2021-08-20 14:46:09 -04:00
meta_backend_test.go command: Auto-select single workspace if necessary 2021-09-22 16:03:11 -05:00
meta_config.go workdir: Start of a new package for working directory state management 2021-09-10 14:56:49 -07: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 backend/local: Check dependency lock consistency before any operations 2021-10-01 14:43:58 -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 Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
output_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
plan.go
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
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 core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07: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 de-linting 2021-09-01 11:36:21 -04:00
refresh_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
show.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
show_test.go remove debugging println 2021-09-28 17:58:40 -04:00
state_command.go
state_list.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_list_test.go
state_meta.go de-linting 2021-09-01 11:36:21 -04:00
state_mv.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_mv_test.go de-linting 2021-09-01 11:36:21 -04:00
state_pull.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_pull_test.go
state_push.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07: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 core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07: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 Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
taint_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
test.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07: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 Move states/ to internal/states/ 2021-05-17 14:09:07 -07: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
workspace_command_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
workspace_delete.go
workspace_list.go
workspace_new.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
workspace_select.go
workspace_show.go