terraform/command
Martin Atkins 4d53eaa6df state: more robust handling of state Serial
Previously we relied on a constellation of coincidences for everything to
work out correctly with state serials. In particular, callers needed to
be very careful about mutating states (or not) because many different bits
of code shared pointers to the same objects.

Here we move to a model where all of the state managers always use
distinct instances of state, copied when WriteState is called. This means
that they are truly a snapshot of the state as it was at that call, even
if the caller goes on mutating the state that was passed.

We also adjust the handling of serials so that the state managers ignore
any serials in incoming states and instead just treat each Persist as
the next version after what was most recently Refreshed.

(An exception exists for when nothing has been refreshed, e.g. because
we are writing a state to a location for the first time. In that case
we _do_ trust the caller, since the given state is either a new state
or it's a copy of something we're migrating from elsewhere with its
state and lineage intact.)

The intent here is to allow the rest of Terraform to not worry about
serials and state identity, and instead just treat the state as a mutable
structure. We'll just snapshot it occasionally, when WriteState is called,
and deal with serials _only_ at persist time.

This is intended as a more robust version of #15423, which was a quick
hotfix to an issue that resulted from our previous slopping handling
of state serials but arguably makes the problem worse by depending on
an additional coincidental behavior of the local backend's apply
implementation.
2017-07-05 12:34:30 -07:00
..
clistate Have the clistate Lock use LockWithContext 2017-04-01 17:09:20 -04:00
format command/format: minor adjustments to plan rendering 2017-06-22 07:03:23 -07:00
test-fixtures command/validate: Add flag to check that all variables are specified (#13872) 2017-07-05 17:32:29 +01:00
testdata Have backend operations properly unlock state 2017-02-15 14:41:55 -05:00
apply.go command: also print plan for destroy 2017-06-27 11:22:31 -07:00
apply_destroy_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
apply_test.go Merge pull request #15032 from hashicorp/jbardin/init 2017-06-12 09:06:32 -04: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 always pass in the full plugin path to dicovery 2017-06-16 14:09:47 -04:00
command_test.go Update tests for the new ProviderResolver interface 2017-06-09 14:03:59 -07:00
console.go have Meta.Backend use a Config rather than loading 2017-06-09 14:03:59 -07: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 Add debug command with json2dot 2016-11-21 11:59:20 -05: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/fmt: Improve documentation for -diff and defaults (#6398) 2016-04-29 00:39:53 +01:00
fmt_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
get.go command: convert to use backends 2017-01-26 14:33:49 -08:00
get_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
graph.go have Meta.Backend use a Config rather than loading 2017-06-09 14:03:59 -07:00
graph_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07: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 it's possible to get a nil diff in PreApply 2017-04-28 21:59:56 -04:00
hook_ui_test.go command/hook_ui: Increase max length of state IDs (#13317) 2017-04-04 15:41:54 +01:00
import.go find -plugin-dir during import 2017-06-26 18:28:45 -04:00
import_test.go test import with -plugin-dir 2017-06-27 11:07:45 -04:00
init.go core: Skip provider checksum validation based on env var 2017-07-03 13:59:13 -04:00
init_test.go command: init to allow plugin init without backend init 2017-06-21 11:43:28 -07:00
internal_plugin.go Set a log prefix for each plugin and remove go-dynect global log prefix (#6336) 2016-05-10 14:49:13 -04:00
internal_plugin_list.go remove "core" distinction 2017-06-12 13:43:54 -04:00
internal_plugin_test.go remove "core" distinction 2017-06-12 13:43:54 -04:00
meta.go core: Skip provider checksum validation based on env var 2017-07-03 13:59:13 -04:00
meta_backend.go command: add "apply -auto-approve=false" flag 2017-06-27 11:22:26 -07:00
meta_backend_migrate.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
meta_backend_test.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
meta_new.go have Meta.Backend use a Config rather than loading 2017-06-09 14:03:59 -07:00
meta_test.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
module_storage.go fix a bunch of tests from go-getter import 2015-10-15 13:48:58 -07:00
module_storage_test.go fix a bunch of tests from go-getter import 2015-10-15 13:48:58 -07:00
output.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
output_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
plan.go Add plugin dir scaffolding 2017-06-15 14:26:12 -04:00
plan_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
plugins.go improve plugin error formatting 2017-06-22 15:31:36 -04:00
plugins_lock.go change providers.json to lock.json 2017-06-09 14:03:59 -07: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 add -plugin-dir option 2017-06-15 15:23:16 -04:00
providers.go command/providers: Enable processing of meta-parameters 2017-06-10 11:51:06 +01:00
providers_test.go command/providers: Add regression test 2017-06-10 12:02:01 +01:00
push.go command: shallow UI-focused rename of "environment" to "workspace" 2017-06-09 15:01:39 -07:00
push_test.go Don't show plugin init message if there are none 2017-06-19 12:08:42 -04:00
refresh.go Add plugin dir scaffolding 2017-06-15 14:26:12 -04:00
refresh_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
show.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -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 command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
state_list_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
state_meta.go don't load the backend when -state is provided 2017-06-23 14:41:49 -04:00
state_mv.go Fix state mv/rm -backup documentation 2017-06-23 14:46:09 -04:00
state_mv_test.go don't load the backend when -state is provided 2017-06-23 14:41:49 -04:00
state_pull.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
state_pull_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
state_push.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
state_push_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
state_rm.go Fix state mv/rm -backup documentation 2017-06-23 14:46:09 -04:00
state_rm_test.go don't load the backend when -state is provided 2017-06-23 14:41:49 -04:00
state_show.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
state_show_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
state_test.go command: tests should move to temporary cwd 2017-02-07 09:11:48 -08:00
taint.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -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 command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
unlock_test.go Push plugin discovery down into command package 2017-06-09 14:03:59 -07:00
untaint.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -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: Add flag to check that all variables are specified (#13872) 2017-07-05 17:32:29 +01:00
validate_test.go command/validate: Add flag to check that all variables are specified (#13872) 2017-07-05 17:32:29 +01:00
version.go fixing version numbers RCs should be labeled x.x.x-rcx 2015-02-07 16:56:56 +01:00
version_test.go Implement CLI, version command 2014-05-24 12:04:43 -07:00
workspace_command.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
workspace_command_test.go state: more robust handling of state Serial 2017-07-05 12:34:30 -07:00
workspace_delete.go Unlock state before workspace deletion 2017-06-27 14:31:08 -04:00
workspace_list.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
workspace_new.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00
workspace_select.go command + backend: rename various API objects to "Workspace" terminology 2017-06-09 16:26:25 -07:00