opentofu/terraform
Martin Atkins a43b7df282 core: Handle forced-create_before_destroy during the plan walk
Previously we used a single plan action "Replace" to represent both the
destroy-before-create and the create-before-destroy variants of replacing.
However, this forces the apply graph builder to jump through a lot of
hoops to figure out which nodes need it forced on and rebuild parts of
the graph to represent that.

If we instead decide between these two cases at plan time, the actual
determination of it is more straightforward because each resource is
represented by only one node in the plan graph, and then we can ensure
we put the right nodes in the graph during DiffTransformer and thus avoid
the logic for dealing with deposed instances being spread across various
different transformers and node types.

As a nice side-effect, this also allows us to show the difference between
destroy-then-create and create-then-destroy in the rendered diff in the
CLI, although this change doesn't fully implement that yet.
2018-10-16 19:14:11 -07:00
..
test-fixtures validate test updates 2018-10-16 19:14:11 -07:00
context_apply_test.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
context_components_test.go replace provider and provisioner types in tests 2018-10-16 19:11:09 -07:00
context_components.go ResourceProvisioner to provisioners.Interface 2018-10-16 19:11:09 -07:00
context_fixtures_test.go core: Fix TestContext2Apply_vars 2018-10-16 19:14:11 -07:00
context_graph_type.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
context_import_test.go convert import tests 2018-10-16 19:14:11 -07:00
context_import.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
context_input_test.go core: Fix various compile-time errors in tests 2018-10-16 19:14:11 -07:00
context_input.go core: Context.Input as config walk, rather than graph walk 2018-10-16 18:49:20 -07:00
context_plan_test.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
context_refresh_test.go finish context refresh tests 2018-10-16 19:14:11 -07:00
context_test.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
context_validate_test.go validate test updates 2018-10-16 19:14:11 -07:00
context.go core: Prune placeholder objects from state after refresh 2018-10-16 19:14:11 -07:00
diff_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
diff.go core: testDiffFn must populate old value for "type" 2018-10-16 19:14:11 -07:00
edge_destroy.go terraform: starting CBD, destroy edge for the destroy relationship 2016-10-19 13:38:52 -07:00
eval_apply.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
eval_check_prevent_destroy.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
eval_context_builtin_test.go terraform: More wiring in of new provider types 2018-10-16 19:12:54 -07:00
eval_context_builtin.go ResourceProvisioner to provisioners.Interface 2018-10-16 19:11:09 -07:00
eval_context_mock.go ResourceProvisioner to provisioners.Interface 2018-10-16 19:11:09 -07:00
eval_context.go ResourceProvisioner to provisioners.Interface 2018-10-16 19:11:09 -07:00
eval_count_boundary.go core: Update EvalCountFixZeroOneBoundaryGlobal for new state types 2018-10-16 19:14:11 -07:00
eval_count_computed.go terraform: detect compute counts and show a nicer error 2016-11-11 11:07:17 -08:00
eval_count.go core: Update EvalCountFixZeroOneBoundaryGlobal for new state types 2018-10-16 19:14:11 -07:00
eval_diff_test.go core: Fix various compile-time errors in tests 2018-10-16 19:14:11 -07:00
eval_diff.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
eval_error.go core: [refactor] store Deposed resource instances as a list 2015-03-04 12:25:59 -06:00
eval_filter_operation.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_filter.go terraform: more eval stuff 2015-02-19 12:07:54 -08:00
eval_if.go core: [refactor] pull Deposed out of Tainted list 2015-03-04 12:25:47 -06:00
eval_import_state.go terraform: More wiring in of new provider types 2018-10-16 19:12:54 -07:00
eval_lang.go move "configschema" from "config" to "configs" 2018-10-16 18:50:29 -07:00
eval_local_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
eval_local.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
eval_noop.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_output_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
eval_output.go core: EvalWriteOutput discard unknown values before writing state 2018-10-16 19:14:11 -07:00
eval_provider_test.go replace provider and provisioner types in tests 2018-10-16 19:11:09 -07:00
eval_provider.go first step in core provider type replacement 2018-10-16 19:11:09 -07:00
eval_provisioner_test.go replace provider and provisioner types in tests 2018-10-16 19:11:09 -07:00
eval_provisioner.go ResourceProvisioner to provisioners.Interface 2018-10-16 19:11:09 -07:00
eval_read_data.go finish context refresh tests 2018-10-16 19:14:11 -07:00
eval_refresh.go core: EvalRefresh should not mutate the state object it is given 2018-10-16 19:14:11 -07:00
eval_sequence_test.go terraform: Refresh, Read/Write state 2015-02-19 12:08:00 -08:00
eval_sequence.go core: EvalSequence to handle EvalEarlyExitError 2018-10-16 18:49:20 -07:00
eval_state_test.go replace provider and provisioner types in tests 2018-10-16 19:11:09 -07:00
eval_state.go core: If create leg of create_before_destroy fails, restore deposed 2018-10-16 19:14:11 -07:00
eval_test.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_validate_selfref_test.go move "configschema" from "config" to "configs" 2018-10-16 18:50:29 -07:00
eval_validate_selfref.go move "configschema" from "config" to "configs" 2018-10-16 18:50:29 -07:00
eval_validate_test.go core: Fix various compile-time errors in tests 2018-10-16 19:14:11 -07:00
eval_validate.go terraform: Return validation diagnostics with source info where possible 2018-10-16 19:14:11 -07:00
eval_variable.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
eval.go core: EvalSequence must continue when only warnings are returned 2018-10-16 18:49:20 -07:00
evaltree_provider.go first step in core provider type replacement 2018-10-16 19:11:09 -07:00
evaluate_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
evaluate.go core: Use values from plan only if object marked as planned 2018-10-16 19:14:11 -07:00
features.go output warning flag 2017-11-28 14:18:54 -05:00
graph_builder_apply_test.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
graph_builder_apply.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
graph_builder_destroy_plan.go core: Be more explicit in how we handle create_before_destroy 2018-10-16 19:14:11 -07:00
graph_builder_eval.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
graph_builder_import.go core: Don't create indirect provider dependencies for references 2018-10-16 18:49:20 -07:00
graph_builder_plan_test.go core: update test fixtures for new name of the "count boundary" vertex 2018-10-16 19:14:11 -07:00
graph_builder_plan.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
graph_builder_refresh_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
graph_builder_refresh.go core: Be more explicit in how we handle create_before_destroy 2018-10-16 19:14:11 -07:00
graph_builder_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
graph_builder_validate.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
graph_builder.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
graph_dot_test.go terraform: remove ConnectDependents and related interfaces 2017-02-03 14:25:54 +01:00
graph_dot.go Remove dot package 2016-11-14 08:50:34 -05:00
graph_interface_subgraph.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
graph_test.go core: Remove GraphWalkerPanicwrap, etc 2018-10-16 18:48:28 -07:00
graph_walk_context.go core: Evaluate resource references from plan where possible 2018-10-16 19:14:11 -07:00
graph_walk_operation.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
graph_walk_test.go terraform: trying this graphwalker thing 2015-02-19 12:07:56 -08:00
graph_walk.go core: Remove GraphWalkerPanicwrap, etc 2018-10-16 18:48:28 -07:00
graph.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
graphtype_string.go core: update Stringer implementations for GraphType and walkOperation 2018-10-16 18:49:20 -07:00
hook_mock.go terraform: More wiring in of new provider types 2018-10-16 19:12:54 -07:00
hook_stop_test.go terraform: stopHook and tests 2014-07-02 16:16:38 -07:00
hook_stop.go terraform: More wiring in of new provider types 2018-10-16 19:12:54 -07:00
hook_test.go core: Fix various compile-time errors in tests 2018-10-16 19:14:11 -07:00
hook.go terraform: More wiring in of new provider types 2018-10-16 19:12:54 -07:00
instancetype_string.go Update various files for new version of "stringer" 2017-12-11 13:26:29 -08:00
instancetype.go core: formalize resource addressing 2015-03-31 15:04:10 -05:00
interpolate.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
module_dependencies_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
module_dependencies.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
node_count_boundary.go core: Update EvalCountFixZeroOneBoundaryGlobal for new state types 2018-10-16 19:14:11 -07:00
node_data_destroy.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
node_data_refresh_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
node_data_refresh.go finish context refresh tests 2018-10-16 19:14:11 -07:00
node_local.go core: Local and output values must reference destroy nodes too 2018-10-16 18:49:20 -07:00
node_module_removed.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
node_module_variable_test.go core: Update TestNodeApplyableModuleVariablePath for new address type 2018-10-16 18:48:28 -07:00
node_module_variable.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
node_output_orphan.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
node_output.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
node_provider_abstract.go move "configschema" from "config" to "configs" 2018-10-16 18:50:29 -07:00
node_provider_disabled.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
node_provider_eval.go core: Context.Eval method 2018-10-16 18:46:46 -07:00
node_provider.go WIP reference providers by full name 2017-11-02 15:00:06 -04:00
node_provisioner.go core: NodeProvisioner.Name update for new address types 2018-10-16 18:48:28 -07:00
node_resource_abstract.go core: Don't create self-references in state 2018-10-16 19:14:11 -07:00
node_resource_apply_instance.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
node_resource_apply.go core: NodeApplyableResource only depends on count and for_each 2018-10-16 19:14:11 -07:00
node_resource_destroy_deposed.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
node_resource_destroy.go core: Be more explicit in how we handle create_before_destroy 2018-10-16 19:14:11 -07:00
node_resource_plan_destroy.go core: Re-implement EvalWriteDiff to work with new plan types 2018-10-16 19:14:11 -07:00
node_resource_plan_instance.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
node_resource_plan_orphan.go core: Record correct provider address in orphan destroy plan 2018-10-16 19:14:11 -07:00
node_resource_plan.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
node_resource_refresh_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
node_resource_refresh.go core: Prune placeholder objects from state after refresh 2018-10-16 19:14:11 -07:00
node_resource_validate.go ResourceProvisioner to provisioners.Interface 2018-10-16 19:11:09 -07:00
node_root_variable.go core: render variables, locals and outputs nicely in "terraform graph" 2018-10-16 18:46:46 -07:00
path.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
plan.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
provider_mock.go core: If create leg of create_before_destroy fails, restore deposed 2018-10-16 19:14:11 -07:00
provisioner_mock.go core: Legacy ApplyFn handling for MockProvisioner 2018-10-16 19:14:11 -07:00
resource_address_test.go configs: Re-unify the ManagedResource and DataResource types 2018-10-16 18:44:26 -07:00
resource_address.go core: NewLegacyResourceInstanceAddress correct handling of addrs.NoKey 2018-10-16 18:46:46 -07:00
resource_provider_mock_test.go terraform: More wiring in of new provider types 2018-10-16 19:12:54 -07:00
resource_provider_mock.go minor race issue in mockResourceProvider 2017-12-20 09:18:38 -05:00
resource_provider.go first step in core provider type replacement 2018-10-16 19:11:09 -07:00
resource_provisioner_mock_test.go replace provider and provisioner types in tests 2018-10-16 19:11:09 -07:00
resource_provisioner_mock.go move "configschema" from "config" to "configs" 2018-10-16 18:50:29 -07:00
resource_provisioner.go ResourceProvisioner to provisioners.Interface 2018-10-16 19:11:09 -07:00
resource_test.go core: Drop InstanceInfo.HumanId 2018-10-16 19:14:11 -07:00
resource.go core: Drop InstanceInfo.HumanId 2018-10-16 19:14:11 -07:00
schemas_test.go core: Fix various compile-time errors in tests 2018-10-16 19:14:11 -07:00
schemas.go core: Re-implement ReadDataDiff around our new approach 2018-10-16 19:14:11 -07:00
semantics_test.go core: fix tests for checkInputVariables 2018-10-16 18:48:28 -07:00
semantics.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
state_add_test.go Set proper Mode when moving a data source in state 2016-11-21 18:26:29 -05:00
state_add.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
state_filter_test.go terraform: StateFilter handles cases where ResourceState has no type 2017-01-21 10:24:03 -08:00
state_filter.go fix sorting of module resources during state mv 2017-02-23 18:27:16 -05:00
state_test.go core: TestStateAddModule old-style output 2018-10-16 18:48:28 -07:00
state_upgrade_v1_to_v2.go terraform: convert empty path to root path in V1 state 2017-03-21 11:37:12 -07:00
state_upgrade_v2_to_v3.go terraform: V1 to V2 upgrade should treat nil path as root path 2017-03-21 11:12:44 -07:00
state_v1.go core: Introduce state v3 and upgrade process 2016-06-09 10:49:49 +01:00
state.go core: Move StateValueFromInstanceState shim from helper/schema 2018-10-16 19:14:11 -07:00
terraform_test.go core: Fix TestContext2Apply_moduleDestroyOrder 2018-10-16 19:14:11 -07:00
testing.go terraform: support backends in the state 2017-01-26 14:33:49 -08:00
transform_attach_config_provider.go core: Attach resource and provider config schemas during graph build 2018-10-16 18:46:46 -07:00
transform_attach_config_resource.go core: Additional trace logging in attach resource config transformer 2018-10-16 18:48:28 -07:00
transform_attach_schema.go move "configschema" from "config" to "configs" 2018-10-16 18:50:29 -07:00
transform_attach_state.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_config_flat_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
transform_config_flat.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_config_old.go terraform: remove config transformer old 2017-01-26 19:57:46 -08:00
transform_config_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
transform_config.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_count_boundary.go core: Update EvalCountFixZeroOneBoundaryGlobal for new state types 2018-10-16 19:14:11 -07:00
transform_destroy_cbd_test.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -07:00
transform_destroy_cbd.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
transform_destroy_edge_test.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -07:00
transform_destroy_edge.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_diff_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_diff.go core: Handle forced-create_before_destroy during the plan walk 2018-10-16 19:14:11 -07:00
transform_expand_test.go implement dag.Subgrapher interface 2016-11-14 08:50:34 -05:00
transform_expand.go terraform: more dead code removal 2017-01-26 19:47:02 -08:00
transform_import_provider.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_import_state.go terraform: More wiring in of new provider types 2018-10-16 19:12:54 -07:00
transform_local.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_module_variable_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
transform_module_variable.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_orphan_count_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_orphan_count.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_orphan_output.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_orphan_resource_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_orphan_resource.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_output.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_provider_test.go core: Update ProviderTransformer tests for new ImportTarget interface 2018-10-16 18:48:28 -07:00
transform_provider.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_provisioner_test.go core: Be more explicit in how we handle create_before_destroy 2018-10-16 19:14:11 -07:00
transform_provisioner.go core: Make provisioner schemas available to plan resource instance nodes 2018-10-16 18:49:20 -07:00
transform_reference_test.go core: Fix ReferenceTransformer tests 2018-10-16 18:48:28 -07:00
transform_reference.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_removed_modules.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
transform_resource_count.go move "configschema" from "config" to "configs" 2018-10-16 18:50:29 -07:00
transform_root_test.go core: NodeAbstractResource correct default result from ProvidedBy 2018-10-16 18:48:28 -07:00
transform_root.go terraform: provider transform is converted to new graph world view 2017-01-26 20:58:22 -08:00
transform_state.go core: Be more explicit in how we handle create_before_destroy 2018-10-16 19:14:11 -07:00
transform_targets_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
transform_targets.go don't check for targeted downstream from providers 2018-10-16 18:49:20 -07:00
transform_transitive_reduction_test.go move "configschema" from "config" to "configs" 2018-10-16 18:50:29 -07:00
transform_transitive_reduction.go terraform: add TransitiveReductionTransformer 2015-02-27 19:18:04 -08:00
transform_variable.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_vertex_test.go terraform: GraphVertexTransformers 2015-02-19 12:07:57 -08:00
transform_vertex.go terraform: GraphVertexTransformers 2015-02-19 12:07:57 -08:00
transform.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
ui_input_mock.go terraform: Input() asks for variable inputs 2014-09-28 23:37:36 -07:00
ui_input_prefix_test.go terraform: prefix the Id for configuring providers 2014-09-29 10:36:49 -07:00
ui_input_prefix.go terraform: Make output more machine-like 2014-09-29 12:52:48 -07:00
ui_input.go helper/scheam: support UI defaults 2014-09-29 14:00:35 -07:00
ui_output_callback_test.go terraform: provisioners 2015-02-19 12:08:06 -08:00
ui_output_callback.go terraform: provisioners 2015-02-19 12:08:06 -08:00
ui_output_mock_test.go terraform: UIOutput interface 2014-10-04 09:00:07 -07:00
ui_output_mock.go minor race fix in tests 2017-10-02 16:19:01 -04:00
ui_output_provisioner_test.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
ui_output_provisioner.go terraform: Ugly huge change to weave in new State and Plan types 2018-10-16 19:11:09 -07:00
ui_output.go terraform: UIOutput interface 2014-10-04 09:00:07 -07:00
upgrade_state_v1_test.go Fix swallowed tests in terraform package tests 2017-07-20 02:23:43 -07:00
upgrade_state_v2_test.go core: Add test for V2->V3 state upgrade 2016-06-09 11:16:34 +01:00
user_agent.go Standardize http.Client creation with User-Agent 2018-02-28 12:09:50 -05:00
util_test.go Resolve resource provider types in config package 2017-06-09 14:03:59 -07:00
util.go Resolve resource provider types in config package 2017-06-09 14:03:59 -07:00
valuesourcetype_string.go core: Context.Eval method 2018-10-16 18:46:46 -07:00
variables_test.go core: fix the tests in variables_test.go 2018-10-16 18:48:28 -07:00
variables.go core: fix the tests in variables_test.go 2018-10-16 18:48:28 -07:00
version_required.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
version.go use the new version package 2017-10-19 21:48:08 -04:00
walkoperation_string.go core: update Stringer implementations for GraphType and walkOperation 2018-10-16 18:49:20 -07:00