terraform/terraform
Paul Hinze 0fff7d1673 core: validate graph w/ diff during plan phase
This reimplements my prior attempt at nipping issues where a plan did
not yield the same cycle an apply did. My prior attempt was to have
ctx.Validate generate a "Verbose" worst-case graph. It turns out that
skipping PruneDestroyTransformer to generate this graph misses important
heuristics that prevent cycles by dropping destroy nodes that are
determined to be unused.

This resulted in Validate improperly failing in scenarios where these
heuristics would have broken the cycle.

We detected the problem during the work on #1781 and worked around the
issue by reverting to the non-Verbose graph in Validate.

This commit accomplishes the original goal in a better way - by
generating the full graph and checking it once Plan has calculated the
diff. This guarantees that any graph issue that would be caught by Apply
will be caught by Plan.
2015-05-05 17:24:44 -05:00
..
test-fixtures terraform: run prune destroy on validate 2015-05-05 12:11:49 -07:00
context.go core: validate graph w/ diff during plan phase 2015-05-05 17:24:44 -05:00
context_test.go terraform: run prune destroy on validate 2015-05-05 12:11:49 -07:00
diff.go core: avoid diff mismatch on NewRemoved fields during -/+ 2015-04-14 17:23:30 -05:00
diff_test.go core: avoid diff mismatch on NewRemoved fields during -/+ 2015-04-14 17:23:30 -05:00
eval.go terraform: provider cache should append the provider name to it 2015-02-19 12:08:33 -08:00
eval_apply.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_check_prevent_destroy.go core: add prevent_destroy lifecycle flag 2015-04-17 10:40:04 -05:00
eval_context.go terraform: set variables in the proper location 2015-05-01 16:29:19 -07:00
eval_context_builtin.go terraform: update comment on interpolater stuff 2015-05-04 10:51:34 -07:00
eval_context_mock.go terraform: set variables in the proper location 2015-05-01 16:29:19 -07:00
eval_count.go terraform: catch scenario where both "foo" and "foo.0" are in state 2015-03-01 21:28:41 -08:00
eval_diff.go terraform: add reason to diff mismatch error 2015-04-13 09:31:09 -05:00
eval_diff_test.go terraform: destroy node should not create 2015-02-24 22:45:47 -08:00
eval_error.go core: [refactor] store Deposed resource instances as a list 2015-03-04 12:25:59 -06:00
eval_filter.go terraform: more eval stuff 2015-02-19 12:07:54 -08:00
eval_filter_operation.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_if.go core: [refactor] pull Deposed out of Tainted list 2015-03-04 12:25:47 -06:00
eval_interpolate.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_interpolate_test.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_noop.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_output.go terraform: EvalDeleteOutput and context test 2015-04-29 11:27:12 -07:00
eval_provider.go terraform: fix provider config inheritance during input 2015-04-10 16:28:47 -05:00
eval_provider_test.go terraform: merge provider configs before validate [GH-1282] 2015-03-25 16:28:52 -07:00
eval_provisioner.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_provisioner_test.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_refresh.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_resource.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_sequence.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_sequence_test.go terraform: Refresh, Read/Write state 2015-02-19 12:08:00 -08:00
eval_state.go Support for multiple providers of the same type 2015-04-20 14:14:34 -07:00
eval_state_test.go core: tweaks from code review 2015-03-05 10:11:14 -06:00
eval_test.go terraform: clean up EvalNodes 2015-02-19 12:08:32 -08:00
eval_validate.go terraform: merge provider configs before validate [GH-1282] 2015-03-25 16:28:52 -07:00
eval_variable.go terraform: set variables in the proper location 2015-05-01 16:29:19 -07:00
evaltree_provider.go terraform: fix provider config inheritance during input 2015-04-10 16:28:47 -05:00
graph.go terraform: missing providers need to do dependencies 2015-05-01 18:08:06 -07:00
graph_builder.go terraform: destroy transform must happen globally 2015-05-02 18:21:00 -07:00
graph_builder_test.go terraform: remove test 2015-05-01 18:17:49 -07:00
graph_config_node.go terraform: fill in more flat interfaces 2015-05-01 15:28:41 -07:00
graph_config_node_module.go terraform: update comment 2015-05-04 10:49:34 -07:00
graph_config_node_module_test.go terraform: add module destroy node to graph 2015-05-01 18:26:35 -07:00
graph_config_node_output.go terraform: skip outputs for destroy graphs 2015-05-02 18:28:26 -07:00
graph_config_node_provider.go terraform: providers in flattened graphs should depend on the parent 2015-05-01 16:41:49 -07:00
graph_config_node_resource.go core: validate graph w/ diff during plan phase 2015-05-05 17:24:44 -05:00
graph_config_node_test.go terraform: redo how flattening works 2015-05-01 15:18:40 -07:00
graph_config_node_type.go terraform: add variables as graph nodes (no eval yet) 2015-04-30 16:27:20 -07:00
graph_config_node_variable.go terraform: set variables in the proper location 2015-05-01 16:29:19 -07:00
graph_config_node_variable_test.go terraform: set variables in the proper location 2015-05-01 16:29:19 -07:00
graph_dot.go core: graph command gets -verbose and -draw-cycles 2015-04-27 09:23:47 -05:00
graph_dot_test.go core: graph command gets -verbose and -draw-cycles 2015-04-27 09:23:47 -05:00
graph_interface_subgraph.go terraform: subpath context setting 2015-05-01 14:19:32 -07:00
graph_test.go terraform: GraphNodeDependent 2015-02-19 12:07:53 -08:00
graph_walk.go terraform: subpath context setting 2015-05-01 14:19:32 -07:00
graph_walk_context.go terraform: set variables in the proper location 2015-05-01 16:29:19 -07:00
graph_walk_operation.go terraform: provider cache should append the provider name to it 2015-02-19 12:08:33 -08:00
graph_walk_test.go terraform: trying this graphwalker thing 2015-02-19 12:07:56 -08:00
graphnodeconfigtype_string.go terraform: add variables as graph nodes (no eval yet) 2015-04-30 16:27:20 -07:00
hook.go terraform: PostStateUpdate hook and EvalUpdateStateHook 2015-02-23 19:09:48 -08:00
hook_mock.go terraform: PostStateUpdate hook and EvalUpdateStateHook 2015-02-23 19:09:48 -08:00
hook_stop.go terraform: PostStateUpdate hook and EvalUpdateStateHook 2015-02-23 19:09:48 -08:00
hook_stop_test.go terraform: stopHook and tests 2014-07-02 16:16:38 -07:00
hook_test.go terraform: initial hook impl 2014-06-26 16:52:15 -07:00
instancetype.go core: formalize resource addressing 2015-03-31 15:04:10 -05:00
instancetype_string.go core: formalize resource addressing 2015-03-31 15:04:10 -05:00
interpolate.go terraform: allow TF_VAR_name to be set to set variables 2015-04-22 06:31:53 +02:00
interpolate_test.go core: don't crash when count.index is used in the wrong context 2015-04-15 10:23:53 -05:00
path.go terraform: module inputs are passed through to subgraphs 2015-02-19 12:08:01 -08:00
plan.go core: targeted operations 2015-03-31 14:49:38 -05:00
plan_test.go terraform: Plan should use module.Tree 2014-09-24 14:56:48 -07:00
resource.go helper/schema: FieldReaderConfig detects computed maps 2015-04-21 22:07:52 +02:00
resource_address.go core: fix targeting with non-word chars 2015-04-30 15:49:37 -05:00
resource_address_test.go core: fix targeting with non-word chars 2015-04-30 15:49:37 -05:00
resource_provider.go terraform: add Input API to ResourceProvider 2014-09-28 23:50:37 -07:00
resource_provider_mock.go core: refactoring the way sets work internally v2 2014-12-12 23:21:20 +01:00
resource_provider_mock_test.go terraform: Resources method for providers 2014-06-03 14:26:31 -07:00
resource_provider_test.go terraform: add ResourceProviderFactoryFixed 2014-07-10 09:46:21 -07:00
resource_provisioner.go terraform: change provisioners to take UIOutput 2014-10-04 09:20:05 -07:00
resource_provisioner_mock.go terraform: change provisioners to take UIOutput 2014-10-04 09:20:05 -07:00
resource_provisioner_mock_test.go terraform: Adding mock resource provisioner 2014-07-10 11:38:56 -07:00
resource_test.go terraform: goodbye context.go (old) 2015-02-19 12:08:32 -08:00
semantics.go terraform: start implementing interfaces for semantic checks 2015-02-19 12:07:52 -08:00
semantics_test.go terraform: semantic check that variables are set on the correct types 2014-07-22 09:27:28 -07:00
state.go Support for multiple providers of the same type 2015-04-20 14:14:34 -07:00
state_test.go providers/aws: handle empty instancestate in state migration 2015-03-26 13:07:04 -05:00
state_v1.go config: add Config method 2014-10-02 11:34:08 -07:00
state_v1_test.go terraform: moving state v1 tests 2014-09-18 10:21:25 -07:00
terraform_test.go terraform: destroy transform must happen globally 2015-05-02 18:21:00 -07:00
transform.go terraform: GraphVertexTransformers 2015-02-19 12:07:57 -08:00
transform_config.go terraform: outputs connect properly 2015-05-01 11:26:58 -07:00
transform_config_test.go terraform: add variables as graph nodes (no eval yet) 2015-04-30 16:27:20 -07:00
transform_deposed.go Support for multiple providers of the same type 2015-04-20 14:14:34 -07:00
transform_destroy.go terraform: skip outputs for destroy graphs 2015-05-02 18:28:26 -07:00
transform_destroy_test.go core: validate graph w/ diff during plan phase 2015-05-05 17:24:44 -05:00
transform_expand.go terraform: module orphans are properly expanded and planned for destroy 2015-02-19 12:08:01 -08:00
transform_expand_test.go terraform: fix tests 2015-02-19 12:08:01 -08:00
transform_flatten.go terraform: redo how flattening works 2015-05-01 15:18:40 -07:00
transform_flatten_test.go terraform: add module destroy node to graph 2015-05-01 18:26:35 -07:00
transform_module.go terraform: add module destroy node to graph 2015-05-01 18:26:35 -07:00
transform_module_test.go terraform: module inputs are passed through to subgraphs 2015-02-19 12:08:01 -08:00
transform_orphan.go Support for multiple providers of the same type 2015-04-20 14:14:34 -07:00
transform_orphan_test.go Support for multiple providers of the same type 2015-04-20 14:14:34 -07:00
transform_output.go terraform: EvalDeleteOutput and context test 2015-04-29 11:27:12 -07:00
transform_output_test.go terraform: add output orphan transformer 2015-04-29 11:18:58 -07:00
transform_provider.go terraform: add edge for missing providers 2015-05-01 18:39:24 -07:00
transform_provider_test.go terraform: add variables as graph nodes (no eval yet) 2015-04-30 16:27:20 -07:00
transform_provisioner.go terraform: flattenable graphNodeMissingProvisioner 2015-05-05 12:45:28 -07:00
transform_provisioner_test.go terraform: provisioner transforms 2015-02-19 12:07:58 -08:00
transform_proxy.go terraform: proxy uses custom edge 2015-05-01 11:41:01 -07:00
transform_proxy_test.go terraform: GraphNodeProxy 2015-05-01 11:38:36 -07:00
transform_resource.go terraform: module dependencies in graph use full name (FOR THE FUTURE) 2015-04-30 17:19:01 -07:00
transform_resource_test.go terraform: inner-count dependencies work [GH-1540] 2015-04-18 15:56:43 -07:00
transform_root.go terraform: fill in more flat interfaces 2015-05-01 15:28:41 -07:00
transform_root_test.go terraform: validation in progress 2015-02-19 12:07:55 -08:00
transform_tainted.go Support for multiple providers of the same type 2015-04-20 14:14:34 -07:00
transform_tainted_test.go Support for multiple providers of the same type 2015-04-20 14:14:34 -07:00
transform_targets.go core: fix targeting in destroy w/ provisioners 2015-04-27 08:36:54 -05:00
transform_targets_test.go core: targeted operations 2015-03-31 14:49:38 -05:00
transform_transitive_reduction.go terraform: add TransitiveReductionTransformer 2015-02-27 19:18:04 -08:00
transform_transitive_reduction_test.go terraform: add TransitiveReductionTransformer 2015-02-27 19:18:04 -08:00
transform_vertex.go terraform: GraphVertexTransformers 2015-02-19 12:07:57 -08:00
transform_vertex_test.go terraform: GraphVertexTransformers 2015-02-19 12:07:57 -08:00
ui_input.go helper/scheam: support UI defaults 2014-09-29 14:00:35 -07:00
ui_input_mock.go terraform: Input() asks for variable inputs 2014-09-28 23:37:36 -07:00
ui_input_prefix.go terraform: Make output more machine-like 2014-09-29 12:52:48 -07:00
ui_input_prefix_test.go terraform: prefix the Id for configuring providers 2014-09-29 10:36:49 -07:00
ui_output.go terraform: UIOutput interface 2014-10-04 09:00:07 -07:00
ui_output_callback.go terraform: provisioners 2015-02-19 12:08:06 -08:00
ui_output_callback_test.go terraform: provisioners 2015-02-19 12:08:06 -08:00
ui_output_mock.go fmt 2014-10-10 14:50:35 -07:00
ui_output_mock_test.go terraform: UIOutput interface 2014-10-04 09:00:07 -07:00
ui_output_provisioner.go terraform: no longer require uiOutput, do it auto in Hook 2014-10-04 16:24:07 -07:00
ui_output_provisioner_test.go terraform: no longer require uiOutput, do it auto in Hook 2014-10-04 16:24:07 -07:00
util.go Support for multiple providers of the same type 2015-04-20 14:14:34 -07:00
util_test.go terraform: Adding a semaphore implementation 2014-10-16 10:04:36 -07:00
walkoperation_string.go terraform: provider cache should append the provider name to it 2015-02-19 12:08:33 -08:00