terraform/internal/command
Martin Atkins 343279110a core: Graph walk loads plugin schemas opportunistically
Previously our graph walker expected to recieve a data structure
containing schemas for all of the provider and provisioner plugins used in
the configuration and state. That made sense back when
terraform.NewContext was responsible for loading all of the schemas before
taking any other action, but it no longer has that responsiblity.

Instead, we'll now make sure that the "contextPlugins" object reaches all
of the locations where we need schema -- many of which already had access
to that object anyway -- and then load the needed schemas just in time.

The contextPlugins object memoizes schema lookups, so we can safely call
it many times with the same provider address or provisioner type name and
know that it'll still only load each distinct plugin once per Context
object.

As of this commit, the Context.Schemas method is now a public interface
only and not used by logic in the "terraform" package at all. However,
that does leave us in a rather tenuous situation of relying on the fact
that all practical users of terraform.Context end up calling "Schemas" at
some point in order to verify that we have all of the expected versions
of plugins. That's a non-obvious implicit dependency, and so in subsequent
commits we'll gradually move all responsibility for verifying plugin
versions into the caller of terraform.NewContext, which'll heal a
long-standing architectural wart whereby the caller is responsible for
installing and locating the plugin executables but not for verifying that
what's installed is conforming to the current configuration and dependency
lock file.
2021-09-10 14:56:49 -07:00
..
arguments commands: `terraform add` (#28874) 2021-06-17 12:08:37 -04:00
cliconfig Upgrade to Go 1.17 2021-08-17 15:20:05 -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: Render "moved" annotations in plan UI 2021-09-03 17:44:07 -04:00
jsonconfig allow json output to marshal ConfigModeAttr blocks 2021-09-03 13:53:52 -04:00
jsonplan Revert "json-output: Release format version 1.0" 2021-09-09 11:25:35 -04: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 Revert "json-output: Release format version 1.0" 2021-09-09 11:25:35 -04:00
views Revert "json-output: Release format version 1.0" 2021-09-09 11:25:35 -04:00
webbrowser Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
add.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
add_test.go command: Fix stale lock after running add 2021-08-20 13:22:11 -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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
autocomplete_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
cli_ui.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
cli_ui_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
command.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
command_test.go commands: `terraform add` (#28874) 2021-06-17 12:08:37 -04: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 Move configs/ to internal/configs/ 2021-05-17 14:09:07 -07:00
flag_kv.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
flag_kv_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
fmt.go Move configs/ to internal/configs/ 2021-05-17 14:09:07 -07:00
fmt_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
get.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
get_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07: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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
import.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
import_test.go core: Replace contextComponentFactory with contextPlugins 2021-09-10 14:56:49 -07:00
init.go cli: Add -ignore-remote-version flag for init 2021-06-02 15:30:05 -04:00
init_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
login.go de-linting 2021-09-01 11:36:21 -04:00
login_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
logout.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
logout_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
meta.go de-linting 2021-09-01 11:36:21 -04:00
meta_backend.go de-linting 2021-09-01 11:36:21 -04:00
meta_backend_migrate.go command: Suppress prompt for init -force-copy 2021-08-20 14:46:09 -04:00
meta_backend_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
meta_config.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
meta_dependencies.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
meta_new.go Move plans/ to internal/plans/ 2021-05-17 14:09:07 -07:00
meta_providers.go terraform: use ProtocolVersion from unmanaged providers' reattachConfig to chose the correct PluginClient (#28190) 2021-05-18 10:59:14 -04: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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
plan_test.go core: Graph walk loads plugin schemas opportunistically 2021-09-10 14:56:49 -07:00
plugins.go Move plugin/ and plugin6/ to internal/plugin{,6}/ 2021-05-17 14:09:07 -07:00
plugins_lock.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
plugins_lock_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
plugins_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
providers.go Move configs/ to internal/configs/ 2021-05-17 14:09:07 -07: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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
push.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
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 json-output: Omit unchanged resource_drift entries 2021-06-17 15:09:16 -04:00
state_command.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
state_list.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
state_list_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
ui_input.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07: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 Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
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 Move configs/ to internal/configs/ 2021-05-17 14:09:07 -07:00
version.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
version_test.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
workspace_command.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
workspace_command_test.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
workspace_delete.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
workspace_list.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
workspace_new.go Move states/ to internal/states/ 2021-05-17 14:09:07 -07:00
workspace_select.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00
workspace_show.go Move command/ to internal/command/ 2021-05-17 14:09:07 -07:00