terraform/command
James Bardin 7cba68326a always wait for a RunningOperation to return
If the user wishes to interrupt the running operation, only the first
interrupt was communicated to the operation by canceling the provided
context. A second interrupt would start the shutdown process, but not
communicate this to the running operation. This order of event could
cause partial writes of state.

What would happen is that once the command returns, the plugin system
would stop the provider processes. Once the provider processes dies, all
pending Eval operations would return return with an error, and quickly
cause the operation to complete. Since the backend code didn't know that
the process was shutting down imminently, it would continue by
attempting to write out the last known state. Under the right
conditions, the process would exit part way through the writing of the
state file.

Add Stop and Cancel CancelFuncs to the RunningOperation, to allow it to
easily differentiate between the two signals. The backend will then be
able to detect a shutdown and abort more gracefully.

In order to ensure that the backend is not in the process of writing the
state out, the command will always attempt to wait for the process to
complete after cancellation.
2018-02-12 11:56:03 -05:00
..
clistate Have the clistate Lock use LockWithContext 2017-04-01 17:09:20 -04:00
e2etest Re-integrate the "terraform" provider into the main binary 2017-11-03 11:36:31 -07:00
format command: utility for rendering tfdiag diagnostics 2017-10-06 11:46:07 -07:00
test-fixtures add test for internal plugins with -plugin-dir 2018-01-05 11:51:09 -05:00
testdata Have backend operations properly unlock state 2017-02-15 14:41:55 -05:00
apply.go always wait for a RunningOperation to return 2018-02-12 11:56:03 -05:00
apply_destroy_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
apply_test.go go fmt 2017-12-26 13:26:38 -05:00
autocomplete.go command: use newer version of "complete" library 2017-12-05 10:24:04 -08: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 return tfdiags.Diagnostics from validation methods 2017-11-28 11:15:29 -08:00
command_test.go pass command credentials into module.Storage 2017-10-27 16:16:35 -04:00
console.go command: validate config as part of loading it 2017-12-07 14:28:43 -08:00
console_interactive.go command: split out and tag code so compilation works on Solaris 2016-11-14 00:32:01 -08: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 Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
debug_command.go Add debug command with json2dot 2016-11-21 11:59:20 -05:00
debug_json2dot.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
debug_json2dot_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
flag_kv.go command: use helper/variables for flags and parsing 2016-12-10 14:30:40 -05:00
flag_kv_test.go command: use helper/variables for flags and parsing 2016-12-10 14:30:40 -05:00
fmt.go command: add -check flag to fmt (#15304) 2017-07-21 14:37:15 -05:00
fmt_test.go command: add -check flag to fmt (#15304) 2017-07-21 14:37:15 -05:00
get.go use the new ModuleStorage in the command package 2017-10-27 12:58:24 -04:00
get_test.go update tests for updated output 2017-11-03 11:13:31 -04:00
graph.go command: validate config as part of loading it 2017-12-07 14:28:43 -08:00
graph_test.go graph should not panic with no config 2017-07-18 13:03:57 -04:00
hcl_printer.go always quote hcl map keys 2017-02-24 18:32:59 -05:00
hcl_printer_test.go always quote hcl map keys 2017-02-24 18:32:59 -05:00
hook_ui.go command: show resource actions using resource addresses 2017-09-01 17:55:05 -07:00
hook_ui_test.go Output duration in UiHook after successful operation completion. 2017-08-16 14:41:41 -07:00
import.go command: show a special error message when importing in an empty dir 2017-12-11 16:08:33 -08:00
import_test.go command: show a special error message when importing in an empty dir 2017-12-11 16:08:33 -08:00
init.go Merge pull request #16920 from hashicorp/jbardin/init-future-state 2018-01-05 16:54:41 -05:00
init_test.go Merge pull request #16969 from hashicorp/jbardin/reset-plugin-dir 2018-01-08 16:51:47 -05:00
internal_plugin.go create a new InternalProviders test 2018-01-05 10:59:30 -05:00
internal_plugin_list.go v0.11.2 2018-01-09 23:13:33 +00:00
internal_plugin_test.go create a new InternalProviders test 2018-01-05 10:59:30 -05:00
meta.go Merge pull request #16961 from hashicorp/jbardin/mock-provider-race 2018-01-08 16:47:58 -05:00
meta_backend.go Standardize on log level "WARN" rather than "WARNING" 2018-01-16 18:05:26 -08:00
meta_backend_migrate.go re-word state migration prompts 2018-01-04 16:22:54 -05:00
meta_backend_test.go remove extra "yes" confirmation in tests 2017-12-18 11:42:33 -05:00
meta_new.go command: validate config as part of loading it 2017-12-07 14:28:43 -08:00
meta_test.go properly cleanup and print correct error messages 2017-07-06 11:33:32 -04:00
output.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
output_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
plan.go always wait for a RunningOperation to return 2018-02-12 11:56:03 -05:00
plan_test.go slow down the plan shutdown tests for slow hosts 2018-01-31 17:09:48 -05:00
plugins.go Merge pull request #16969 from hashicorp/jbardin/reset-plugin-dir 2018-01-08 16:51:47 -05:00
plugins_lock.go Standardize on log level "WARN" rather than "WARNING" 2018-01-16 18:05:26 -08:00
plugins_lock_test.go command: helper to manage the provider plugins lock file 2017-06-09 14:03:59 -07:00
plugins_test.go Re-integrate the "terraform" provider into the main binary 2017-11-03 11:36:31 -07:00
providers.go command: validate config as part of loading it 2017-12-07 14:28:43 -08:00
providers_test.go command/providers: Add regression test 2017-06-10 12:02:01 +01:00
push.go command: validate config as part of loading it 2017-12-07 14:28:43 -08:00
push_test.go Don't show plugin init message if there are none 2017-06-19 12:08:42 -04:00
refresh.go always wait for a RunningOperation to return 2018-02-12 11:56:03 -05:00
refresh_test.go update state test strings in command package 2017-11-07 21:18:08 -05:00
show.go command/format: improve consistency of plan results 2017-09-01 17:55:05 -07:00
show_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
state_command.go Thread the environment through all commands 2017-02-28 16:35:46 -05:00
state_list.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
state_list_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
state_meta.go Make the state commands use the real command.Meta 2017-07-27 15:33:50 -04:00
state_mv.go update state rm amd mv docs 2017-08-03 13:24:23 -04:00
state_mv_test.go add tests for state commands through a backend 2017-07-27 18:06:47 -04:00
state_pull.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
state_pull_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
state_push.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
state_push_test.go create failing test cases for remote lineage issue 2017-08-01 19:34:21 -04:00
state_rm.go command/state-rm: tell the user how many items were removed 2017-09-20 12:48:27 -07:00
state_rm_test.go add tests for state commands through a backend 2017-07-27 18:06:47 -04:00
state_show.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
state_show_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
state_test.go Make the state commands use the real command.Meta 2017-07-27 15:33:50 -04:00
taint.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
taint_test.go Clean up LockInfo and LockError and use them 2017-02-15 14:44:43 -05:00
ui_input.go command: initial work on migrating envs, basic cases first 2017-03-01 10:59:17 -08:00
ui_input_test.go command: use bufio.ReadString instead of scanning to get spaces 2016-08-22 12:59:48 -07:00
unlock.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
unlock_test.go create failing test cases for remote lineage issue 2017-08-01 19:34:21 -04:00
untaint.go Use all tfvars files in working directory 2017-07-05 17:24:17 -07:00
untaint_test.go Clean up LockInfo and LockError and use them 2017-02-15 14:44:43 -05:00
validate.go command: validate config as part of loading it 2017-12-07 14:28:43 -08:00
validate_test.go return tfdiags.Diagnostics from validation methods 2017-11-28 11:15:29 -08:00
version.go command: Include provider versions in "terraform version" 2017-10-25 17:36:24 -07:00
version_test.go Implement CLI, version command 2014-05-24 12:04:43 -07:00
workspace_command.go Remove duplicated help messages from `workspace --help` 2018-01-23 23:38:42 +09:00
workspace_command_test.go update workspace new test for inmem backend 2017-08-01 19:34:22 -04:00
workspace_delete.go command: parameter autocomplete for "terraform workspace ..." 2017-09-26 14:01:13 -07:00
workspace_list.go command: parameter autocomplete for "terraform workspace ..." 2017-09-26 14:01:13 -07:00
workspace_new.go command: parameter autocomplete for "terraform workspace ..." 2017-09-26 14:01:13 -07:00
workspace_select.go command: parameter autocomplete for "terraform workspace ..." 2017-09-26 14:01:13 -07:00
workspace_show.go command: parameter autocomplete for "terraform workspace ..." 2017-09-26 14:01:13 -07:00