opentofu/internal/terraform
Martin Atkins 4bc1696fd1 core: Simplify our idea of "root node" and require it for DynamicExpand
The graph walking mechanism is specified as requiring a graph with a single
root, which in practice means there's exactly one node in the graph
which doesn't have any dependencies.

However, we previously weren't verifying that invariant is true for
subgraphs returned from DynamicExpand. It was working anyway, but it's not
ideal to be relying on a behavior that isn't guaranteed by our underlying
infrastructure.

We also previously had the RootTransformer being a bit clever and trying
to avoid adding a new node if there is already only a single graph with
no dependencies. That special case isn't particularly valuable since
there's no harm in turning a one-node graph into a two-node graph with
an explicit separate root node, and doing that allows us to assume that
the root node is always present and is always exactly terraform.rootNode.

Many existing DynamicExpand implementations were not producing valid
graphs and were previously getting away with it. All of them now produce
properly-rooted graphs that should pass validation, and we will guarantee
that with an explicit check of the DynamicExpand return value before we
try to walk that subgraph. For good measure we also verify that the root
node is exactly terraform.rootNode, even though that isn't strictly
required by our graph walker, just to help us catch potential future bugs
where a DynamicExpand implementation neglects to add our singleton root
node.
2022-10-13 14:01:08 -07:00
..
testdata unknown evaluation of missing instances in import 2022-10-04 11:07:16 -04:00
context_apply2_test.go noop orphan change has nothing to apply 2022-10-11 14:30:29 -04:00
context_apply_test.go Upgrade HCL to fix optional attr default crash 2022-09-23 10:34:54 -04:00
context_apply.go core: Propagate check results accurately from plan to apply 2022-08-26 15:47:29 -07:00
context_eval_test.go core and backend: remove redundant handling of default variable values 2022-01-10 12:26:54 -08:00
context_eval.go core and backend: remove redundant handling of default variable values 2022-01-10 12:26:54 -08:00
context_fixtures_test.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
context_import_test.go unknown evaluation of missing instances in import 2022-10-04 11:07:16 -04:00
context_import.go RemovePlannedResourceInstanceObjects during import 2022-09-25 14:41:53 -04:00
context_input_test.go wrap multiple provider creations into a factory fn 2021-10-12 17:47:50 -04:00
context_input.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
context_plan2_test.go test for cycle around aliased provider 2022-10-04 10:59:51 -04:00
context_plan_test.go special handling for legacy ignore_changes = all 2022-09-30 09:19:29 -04:00
context_plan.go core: Use the new checks package for condition tracking 2022-08-26 15:47:29 -07:00
context_plugins_test.go build: Use Go 1.19 2022-08-22 10:59:12 -07:00
context_plugins.go core: Simplify and centralize plugin availability checks 2021-10-01 14:43:58 -07:00
context_refresh_test.go core: Simplify and centralize plugin availability checks 2021-10-01 14:43:58 -07:00
context_refresh.go core: Functional-style API for terraform.Context 2021-08-30 13:59:14 -07:00
context_test.go fix test mocks to behave when planning destroys 2022-07-06 13:47:35 -04:00
context_validate_test.go don't lose warnings from static validation 2022-08-09 16:15:56 -04:00
context_validate.go Combine all plan graphs, including import 2022-06-20 15:40:49 -04:00
context_walk.go core: Propagate check results accurately from plan to apply 2022-08-26 15:47:29 -07:00
context.go insert panic handlers 2021-10-28 11:51:39 -04:00
diagnostics.go tfdiags: Treat unknown-related or sensitive-related messages differently 2022-06-23 13:52:23 -07:00
eval_conditions.go core: Use the new checks package for condition tracking 2022-08-26 15:47:29 -07:00
eval_context_builtin_test.go core: Replace contextComponentFactory with contextPlugins 2021-09-10 14:56:49 -07:00
eval_context_builtin.go core: Use the new checks package for condition tracking 2022-08-26 15:47:29 -07:00
eval_context_mock.go core: Use the new checks package for condition tracking 2022-08-26 15:47:29 -07:00
eval_context.go core: Use the new checks package for condition tracking 2022-08-26 15:47:29 -07:00
eval_count_test.go update to use typed sensitive marks 2021-06-25 12:49:07 -04:00
eval_count.go tfdiags: Treat unknown-related or sensitive-related messages differently 2022-06-23 13:52:23 -07:00
eval_for_each_test.go tfdiags: Treat unknown-related or sensitive-related messages differently 2022-06-23 13:52:23 -07:00
eval_for_each.go tfdiags: Treat unknown-related or sensitive-related messages differently 2022-06-23 13:52:23 -07:00
eval_provider_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
eval_provider.go core: EvalContextBuiltin no longer has a "Schemas" 2021-09-10 14:56:49 -07:00
eval_variable_test.go Merge pull request #30552 from gbataille/29156_do_not_log_sensitive_values 2022-05-30 10:40:51 -04:00
eval_variable.go Do not apply type defaults to null values 2022-09-15 15:32:36 -04:00
evaluate_test.go Merge pull request #29559 from hashicorp/jbardin/optional-attrs 2021-09-13 08:58:11 -04:00
evaluate_triggers_test.go evaluate replace_triggered_by expressions 2022-04-20 09:17:10 -04:00
evaluate_triggers.go evaluate replace_triggered_by expressions 2022-04-20 09:17:10 -04:00
evaluate_valid_test.go core: Graph walk loads plugin schemas opportunistically 2021-09-10 14:56:49 -07:00
evaluate_valid.go core: Document postconditions as valid use of self 2022-01-31 14:34:35 -05:00
evaluate.go unknown evaluation of missing instances in import 2022-10-04 11:07:16 -04:00
execute.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
features.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
graph_builder_apply_test.go core: refactoring.ImpliedMoveStatements replaces NodeCountBoundary 2021-09-20 09:06:22 -07:00
graph_builder_apply.go remove unused fields from DestroyEdgeTransformer 2022-05-27 10:54:58 -04:00
graph_builder_eval.go always validate all graphs 2022-03-11 10:20:50 -05:00
graph_builder_plan_test.go core: Use DynamicExpand even for root module outputs 2022-07-22 15:25:22 -07:00
graph_builder_plan.go core: Don't re-register checkable outputs during the apply step 2022-09-29 08:23:51 -07:00
graph_builder_test.go always validate all graphs 2022-03-11 10:20:50 -05:00
graph_builder.go always validate all graphs 2022-03-11 10:20:50 -05:00
graph_dot_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
graph_dot.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
graph_interface_subgraph.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
graph_test.go de-linting 2021-09-01 11:36:21 -04:00
graph_walk_context.go core: Use the new checks package for condition tracking 2022-08-26 15:47:29 -07:00
graph_walk_operation.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
graph_walk_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
graph_walk.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
graph.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
hook_mock.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
hook_stop_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
hook_stop.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
hook_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
hook.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
instance_expanders.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
marks_test.go update to use typed sensitive marks 2021-06-25 12:49:07 -04:00
marks.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
node_data_destroy_test.go command/workspace_delete: Allow deleting a workspace with empty husks 2021-10-13 13:54:11 -07:00
node_data_destroy.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
node_local_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
node_local.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
node_module_expand_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
node_module_expand.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
node_module_variable_test.go configs: add ConstraintType to config.Variable 2021-09-13 08:51:32 -04:00
node_module_variable.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
node_output_test.go core: Use the new checks package for condition tracking 2022-08-26 15:47:29 -07:00
node_output.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
node_provider_abstract.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
node_provider_eval.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
node_provider_test.go build: Use Go 1.19 2022-08-22 10:59:12 -07:00
node_provider.go configure providers during destroy plan 2022-06-01 16:03:27 -04:00
node_resource_abstract_instance_test.go core: Fix schema loading for deleted resources 2021-11-24 15:23:20 -05:00
node_resource_abstract_instance.go special handling for legacy ignore_changes = all 2022-09-30 09:19:29 -04:00
node_resource_abstract_test.go have mockProvider always check it was configured 2022-06-01 16:16:20 -04:00
node_resource_abstract.go build: Use Go 1.19 2022-08-22 10:59:12 -07:00
node_resource_apply_instance.go noop orphan change has nothing to apply 2022-10-11 14:30:29 -04:00
node_resource_apply_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
node_resource_apply.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
node_resource_destroy_deposed_test.go fixup tests for MockProvider changes 2021-10-08 08:42:06 -04:00
node_resource_destroy_deposed.go core: Check pre- and postconditions for resources and output values 2022-01-31 14:02:53 -05:00
node_resource_destroy.go core: Check pre- and postconditions for resources and output values 2022-01-31 14:02:53 -05:00
node_resource_import.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
node_resource_plan_destroy.go remove data sources from state read and upgrade 2022-04-11 11:55:53 -04:00
node_resource_plan_instance.go copy dependency values when sorting 2022-06-14 11:09:27 -04:00
node_resource_plan_orphan_test.go fixup tests for MockProvider changes 2021-10-08 08:42:06 -04:00
node_resource_plan_orphan.go plans: indicate when resource deleted due to move (#31695) 2022-08-30 18:01:29 +01:00
node_resource_plan.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
node_resource_validate_test.go core: Refactor stub repetition data generation 2022-03-10 13:52:48 -05:00
node_resource_validate.go communicator/ssh: Add support SSH over HTTP Proxy (#30274) 2022-04-27 16:59:17 -04:00
node_root_variable_test.go core: Check rule error message expressions 2022-03-04 15:35:39 -05:00
node_root_variable.go core: More accurate error message for invalid variable values 2022-01-10 12:26:54 -08:00
node_value.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
phasestate_string.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
provider_mock.go fix test mocks to behave when planning destroys 2022-07-06 13:47:35 -04:00
provisioner_mock_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
provisioner_mock.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
reduce_plan_test.go test for null map and fix lost map marks 2021-11-11 10:44:39 -05:00
reduce_plan.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
resource_provider_mock_test.go de-linting 2021-09-01 11:36:21 -04:00
schemas_test.go core: Opportunistic schema loading during graph construction 2021-09-10 14:56:49 -07:00
schemas.go providers: A type for all schemas for a particular provider 2022-03-04 15:51:36 -05:00
terraform_test.go Experiments supported only in alpha/dev builds 2022-06-17 14:46:07 -07:00
transform_attach_config_provider_meta.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_attach_config_provider.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_attach_config_resource.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_attach_schema.go core: Opportunistic schema loading during graph construction 2021-09-10 14:56:49 -07:00
transform_attach_state.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_config_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_config.go Combine all plan graphs, including import 2022-06-20 15:40:49 -04:00
transform_destroy_cbd_test.go make sure CBD test graphs are valid 2022-03-11 10:20:50 -05:00
transform_destroy_cbd.go build: Use Go 1.19 2022-08-22 10:59:12 -07:00
transform_destroy_edge_test.go core: Use DynamicExpand even for root module outputs 2022-07-22 15:25:22 -07:00
transform_destroy_edge.go check detailed provider for destroy edge cycles 2022-10-04 10:58:36 -04:00
transform_diff_test.go core: Create apply graph nodes even for no-op "changes" 2022-07-22 15:27:15 -07:00
transform_diff.go prevent errors from NoOp deposed changes 2022-10-03 09:24:23 -04:00
transform_expand.go core: DynamicExpand can return diagnostics 2022-09-26 13:46:25 -07:00
transform_import_state_test.go fixup tests for MockProvider changes 2021-10-08 08:42:06 -04:00
transform_local.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_module_expansion.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_module_variable_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_module_variable.go remove synthetic default expression for variables 2022-01-10 16:22:33 -05:00
transform_orphan_count_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_orphan_count.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_orphan_output.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_orphan_resource_test.go deposed instances should not be counted as orphans 2021-05-20 09:36:45 -04:00
transform_orphan_resource.go minor cleanup from review 2022-06-01 15:29:59 -04:00
transform_output.go core: Don't re-register checkable outputs during the apply step 2022-09-29 08:23:51 -07:00
transform_provider_test.go Merge pull request #31283 from hashicorp/jbardin/plan-import 2022-06-23 13:26:59 -04:00
transform_provider.go skip already added provider nodes 2022-06-10 10:37:58 -04:00
transform_provisioner.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_reference_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_reference.go do not connect references _to_ destroyers either 2022-05-27 10:50:01 -04:00
transform_removed_modules.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_resource_count.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_root_test.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
transform_root.go core: Simplify our idea of "root node" and require it for DynamicExpand 2022-10-13 14:01:08 -07:00
transform_state.go command/workspace_delete: Allow deleting a workspace with empty husks 2021-10-13 13:54:11 -07:00
transform_targets_test.go core: Use DynamicExpand even for root module outputs 2022-07-22 15:25:22 -07:00
transform_targets.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_transitive_reduction_test.go core: Opportunistic schema loading during graph construction 2021-09-10 14:56:49 -07:00
transform_transitive_reduction.go Update comment for this transformer 2022-03-22 17:17:56 -06:00
transform_variable.go core: Handle root and child module input variables consistently 2022-01-10 12:26:54 -08:00
transform_vertex_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform_vertex.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
transform.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_input_mock.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_input_prefix_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_input_prefix.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_input.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_output_callback_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_output_callback.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_output_mock_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_output_mock.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_output_provisioner_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_output_provisioner.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
ui_output.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
update_state_hook_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
update_state_hook.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
upgrade_resource_state_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
upgrade_resource_state.go remove data sources from state read and upgrade 2022-04-11 11:55:53 -04:00
util_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
util.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
validate_selfref_test.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
validate_selfref.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
valuesourcetype_string.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00
variables_test.go core and backend: remove redundant handling of default variable values 2022-01-10 12:26:54 -08:00
variables.go core: More accurate error message for invalid variable values 2022-01-10 12:26:54 -08:00
version_required.go Fail global required_version check if it contains any prerelease fields (#31331) 2022-06-30 09:58:28 +01:00
walkoperation_string.go Move terraform/ to internal/terraform/ 2021-05-17 14:09:07 -07:00