terraform/command
Martin Atkins 31a4b44d2e backend/local: treat output changes as side-effects to be applied
This is a baby-step towards an intended future where all Terraform actions
which have side-effects in either remote objects or the Terraform state
can go through the plan+apply workflow.

This initial change is focused only on allowing plan+apply for changes to
root module output values, so that these can be written into a new state
snapshot (for consumption by terraform_remote_state elsewhere) without
having to go outside of the primary workflow by running
"terraform refresh".

This is also better than "terraform refresh" because it gives an
opportunity to review the proposed changes before applying them, as we're
accustomed to with resource changes.

The downside here is that Terraform Core was not designed to produce
accurate changesets for root module outputs. Although we added a place for
it in the plan model in Terraform 0.12, Terraform Core currently produces
inaccurate changesets there which don't properly track the prior values.

We're planning to rework Terraform Core's evaluation approach in a
forthcoming release so it would itself be able to distinguish between the
prior state and the planned new state to produce an accurate changeset,
but this commit introduces a temporary stop-gap solution of implementing
the logic up in the local backend code, where we can freeze a snapshot of
the prior state before we take any other actions and then use that to
produce an accurate output changeset to decide whether the plan has
externally-visible side-effects and render any changes to output values.

This temporary approach should be replaced by a more appropriately-placed
solution in Terraform Core in a release, which should then allow further
behaviors in similar vein, such as user-visible drift detection for
resource instances.
2020-05-29 07:36:40 -07:00
..
cliconfig provider cache: log errors and validate dir exists (#24993) 2020-05-19 15:32:36 -04:00
clistate terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
e2etest command: Unmanaged providers 2020-05-26 17:48:57 -07:00
format backend/local: treat output changes as side-effects to be applied 2020-05-29 07:36:40 -07:00
jsonconfig command/jsonconfig: Use correct provider address to access schema 2020-04-06 09:24:23 -07:00
jsonplan command/jsonconfig: Use correct provider address to access schema 2020-04-06 09:24:23 -07:00
jsonprovider Mildwonkey/command tests (#24535) 2020-04-06 09:24:23 -07:00
jsonstate remove a few traces of states.EachMode 2020-04-30 09:22:15 -04:00
testdata command/init: Use full config for provider reqs 2020-05-25 16:50:12 -04:00
webbrowser command/login: Fix browser launcher for WSL users 2020-02-13 15:02:40 -05:00
012_config_upgrade.go command: remove 0.12upgrade (#24403) 2020-03-19 08:01:16 -04:00
012_config_upgrade_test.go command: remove 0.12upgrade (#24403) 2020-03-19 08:01:16 -04:00
013_config_upgrade.go getproviders: add a registry-specific error and modify output when a 2020-05-20 11:04:11 -04:00
013_config_upgrade_test.go command: Add prompt & confirmation to 0.13upgrade 2020-05-11 09:32:11 -04:00
apply.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
apply_destroy_test.go command: apply and most of import tests passing 2020-04-06 09:24:23 -07:00
apply_test.go command: apply and most of import tests passing 2020-04-06 09:24:23 -07:00
autocomplete.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
autocomplete_test.go command: use newer version of "complete" library 2017-12-05 10:24:04 -08:00
cli_ui.go adding new AskSecret to ColorizeUi 2015-04-29 13:07:13 -05:00
cli_ui_test.go command/*: colors on error messages (red) 2014-07-12 20:59:16 -07:00
command.go Implement the Enterprise enhanced remote backend 2018-08-03 22:22:55 +02:00
command_test.go remove unused DependsOn usage in state 2020-05-14 15:46:08 -04:00
console.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
console_interactive.go command: update "terraform console" for HCL2 2018-10-16 18:46:46 -07:00
console_interactive_solaris.go command: split out and tag code so compilation works on Solaris 2016-11-14 00:32:01 -08:00
console_test.go Support reading module outputs in terraform console (#24808) 2020-04-30 09:21:42 -04:00
debug_command.go Add debug command with json2dot 2016-11-21 11:59:20 -05:00
flag_kv.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
flag_kv_test.go command: use helper/variables for flags and parsing 2016-12-10 14:30:40 -05:00
fmt.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
fmt_test.go command/fmt: Include source snippets in errors 2020-03-26 14:00:26 -04:00
get.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
get_test.go command: Update "terraform get" to use the new module installer 2019-01-17 16:52:34 -08:00
graph.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
graph_test.go Mildwonkey/command tests (#24535) 2020-04-06 09:24:23 -07:00
hook_module_install.go Move module install functionality over to internal/initwd 2019-01-14 11:33:21 -08:00
hook_ui.go command: Add UI hooks for read actions 2020-05-21 16:02:18 -04:00
hook_ui_test.go Merge pull request #18823 from minamijoyo/fix-multibyte-trucate 2019-08-06 14:24:24 -04:00
import.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
import_test.go command/import: fix TestImport_initializationErrorShouldUnlock 2020-04-06 09:24:23 -07:00
init.go Merge pull request #24932 from hashicorp/signing-language 2020-05-28 09:09:34 -04:00
init_test.go command/init: Use full config for provider reqs 2020-05-25 16:50:12 -04:00
internal_plugin.go command/internal-plugin: Strip off TF_CLI_ARGS arguments 2019-12-05 15:00:51 -08:00
internal_plugin_list.go provisioner: new Puppet provisioner (#18851) 2019-06-10 15:31:21 -04:00
internal_plugin_test.go command: Make the tests compile again 2020-04-06 09:24:23 -07:00
login.go command: Fix OAuth2 PKCE arguments 2020-05-05 09:58:48 -07:00
login_test.go Add token validation for manual terraform login 2020-02-04 17:24:25 -05:00
logout.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
logout_test.go command/logout: Add terraform logout command 2020-02-06 15:00:55 -05:00
meta.go command: Unmanaged providers 2020-05-26 17:48:57 -07:00
meta_backend.go command: use backend config from state when backend=false is used. (#23802) 2020-01-07 15:07:06 -05:00
meta_backend_migrate.go don't store prepared backend config 2019-05-24 14:51:18 -04:00
meta_backend_test.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
meta_config.go don't print just warnings when loading backend cfg 2019-12-06 10:20:23 -05:00
meta_new.go prune dead code from command/meta 2019-07-18 16:11:41 -04:00
meta_providers.go command: Unmanaged providers 2020-05-26 17:48:57 -07:00
meta_test.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
meta_vars.go vendor: switch to HCL 2.0 in the HCL repository 2019-10-02 15:10:21 -07:00
output.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
output_test.go command/output: Absence of outputs is not an error 2019-11-06 16:26:32 -08:00
plan.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
plan_test.go terraform: return `initialization required` error when provider schemas not found (#24715) 2020-04-21 16:29:27 -04:00
plugins.go Remove terraform.ResourceProvider, use providercache.Installer instead 2020-04-06 09:24:23 -07:00
plugins_lock.go Standardize on log level "WARN" rather than "WARNING" 2018-01-16 18:05:26 -08:00
plugins_lock_test.go cleanup temp files from command tests 2018-03-28 13:08:38 -04:00
plugins_test.go command: Make the tests compile again 2020-04-06 09:24:23 -07:00
providers.go command/providers: refactor with new provider types and functions 2020-04-10 15:08:10 -04:00
providers_schema.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
providers_schema_test.go command: Make the tests compile again 2020-04-06 09:24:23 -07:00
providers_test.go command/providers: refactor with new provider types and functions 2020-04-10 15:08:10 -04:00
push.go command: remove "terraform push" 2018-10-16 18:24:47 -07:00
refresh.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
refresh_test.go remove unused DependsOn usage in state 2020-05-14 15:46:08 -04:00
show.go backend/local: treat output changes as side-effects to be applied 2020-05-29 07:36:40 -07:00
show_test.go remove unused DependsOn usage in state 2020-05-14 15:46:08 -04:00
state_command.go Thread the environment through all commands 2017-02-28 16:35:46 -05:00
state_list.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
state_list_test.go command/state: update and fix the state list command 2018-10-19 16:31:12 +02:00
state_meta.go command: Add state replace-provider subcommand 2020-04-02 08:15:52 -04:00
state_mv.go fix state mv to work without EachMode 2020-04-30 09:22:15 -04:00
state_mv_test.go fix state mv to work without EachMode 2020-04-30 09:22:15 -04:00
state_pull.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
state_pull_test.go command: Use statemgr.Import and statemgr.Export for state push and pull 2018-11-19 09:02:35 -08:00
state_push.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
state_push_test.go command/state: lock when pushing state 2018-11-20 11:15:16 +01:00
state_replace_provider.go website: Add docs for state replace-provider 2020-04-23 11:41:57 -04:00
state_replace_provider_test.go command: Add state replace-provider subcommand 2020-04-02 08:15:52 -04:00
state_rm.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
state_rm_test.go finish provider ModuleInstance replacement 2020-03-11 14:19:52 -04:00
state_show.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
state_show_test.go Mildwonkey/command tests (#24535) 2020-04-06 09:24:23 -07:00
state_test.go command: Allow tests to run to completion without panics or hangs 2018-10-16 19:14:11 -07:00
taint.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
taint_test.go finish provider ModuleInstance replacement 2020-03-11 14:19:52 -04:00
ui_input.go Make sure UIInput keeps working after being canceled 2019-04-29 15:15:26 +02:00
ui_input_test.go Make sure UIInput keeps working after being canceled 2019-04-29 15:15:26 +02:00
unlock.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
unlock_test.go check for errors when loading a backend config 2019-03-12 17:57:26 -04:00
untaint.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
untaint_test.go finish provider ModuleInstance replacement 2020-03-11 14:19:52 -04:00
validate.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
validate_test.go vendor: go get github.com/hashicorp/hcl2@0b64543c968c 2019-06-18 17:37:24 -07:00
version.go Remove terraform.ResourceProvider, use providercache.Installer instead 2020-04-06 09:24:23 -07:00
version_test.go Implement CLI, version command 2014-05-24 12:04:43 -07:00
workspace_command.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
workspace_command_test.go finish provider ModuleInstance replacement 2020-03-11 14:19:52 -04:00
workspace_delete.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
workspace_list.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
workspace_new.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
workspace_select.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00
workspace_show.go command: Simplify Meta.process helper method 2020-04-01 15:01:08 -04:00