terraform/terraform
Martin Atkins cf4a5e6336 core: Don't DynamicExpand during validate
Previously we would attempt to DynamicExpand during the validate walk and
then validate each expanded instance separately. However, this meant that
we would not be able to validate the contents of a block where count = 0
or if count is not yet known.

Here we instead do a more static validation pass against the resource
configuration itself, setting count.index to cty.UnknownVal(cty.Number) so
we can type-check everything inside the block as being correct regardless
of the final count.

This is another step towards repairing the "validate" command for our
changed assumptions in a world where we have a more sophisticated type
checker.

This doesn't yet address the remaining problem that the expression
evaluator can't, with the current state structures, distinguish between
a completed resource with count = 0 and a resource that doesn't exist
at all (during validate), and so we'll still get errors if an expression
elsewhere in configuration refers to a dynamic index of a resource with
"count" set. That's a pre-existing condition that's no longer being masked
by _this_ problem, but can't be addressed until we've introduced the new
state types (states.State, etc) and thus we _can_ distinguish these two
situations. That will therefore be addressed in a later commit.
2018-10-16 18:50:29 -07:00
..
test-fixtures core: Don't DynamicExpand during validate 2018-10-16 18:50:29 -07:00
context.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
context_apply_test.go Fix up some missed "go fmt" 2018-10-16 18:49:20 -07:00
context_components.go
context_components_test.go core: mock provider factory functions for testing 2018-10-16 18:48:28 -07:00
context_fixtures_test.go core: Update tests that use the apply-vars fixture 2018-10-16 18:48:28 -07:00
context_graph_type.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
context_import.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -07:00
context_import_test.go core: Fix TestContextImport_providerVarConfig 2018-10-16 18:49:20 -07:00
context_input.go core: Context.Input as config walk, rather than graph walk 2018-10-16 18:49:20 -07:00
context_input_test.go core: Context.Input as config walk, rather than graph walk 2018-10-16 18:49:20 -07:00
context_plan_test.go core: Don't DynamicExpand during validate 2018-10-16 18:50:29 -07:00
context_refresh_test.go core: Fix TestContext2Refresh_dataState 2018-10-16 18:49:20 -07:00
context_test.go core: TestContext2Validate_interpolateMap 2018-10-16 18:49:20 -07:00
context_validate_test.go core: Don't DynamicExpand during validate 2018-10-16 18:50:29 -07:00
debug.go
debug_test.go core: fix tests for debug.go 2018-10-16 18:48:28 -07:00
diff.go core: fix string rendering of modules in diffs 2018-10-16 18:48:28 -07:00
diff_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
edge_destroy.go
eval.go core: EvalSequence must continue when only warnings are returned 2018-10-16 18:49:20 -07:00
eval_apply.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
eval_check_prevent_destroy.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
eval_context.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
eval_context_builtin.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
eval_context_builtin_test.go core: Don't save provider input for non-root module 2018-10-16 18:49:20 -07:00
eval_context_mock.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
eval_count.go core: skip resource validation when count is unknown 2018-10-16 18:48:28 -07:00
eval_count_boundary.go
eval_count_computed.go
eval_diff.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
eval_diff_test.go core: Fix ProcessIgnoreChanges tests 2018-10-16 18:48:28 -07:00
eval_error.go
eval_filter.go
eval_filter_operation.go
eval_if.go
eval_import_state.go core: More TRACE logging for the "terraform import" walk 2018-10-16 18:49:20 -07:00
eval_lang.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
eval_local.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
eval_local_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
eval_noop.go
eval_output.go core: EvalWriteOutput handle dynamic pseudo-type 2018-10-16 18:48:28 -07:00
eval_output_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
eval_provider.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
eval_provider_test.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
eval_provisioner.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
eval_provisioner_test.go
eval_read_data.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
eval_refresh.go core: More TRACE logging for the "terraform import" walk 2018-10-16 18:49:20 -07:00
eval_sequence.go core: EvalSequence to handle EvalEarlyExitError 2018-10-16 18:49:20 -07:00
eval_sequence_test.go
eval_state.go core: if InstanceState has empty id after apply, instance is deleted 2018-10-16 18:49:20 -07:00
eval_state_test.go core: Fix EvalWriteState tests 2018-10-16 18:48:28 -07:00
eval_test.go
eval_validate.go core: Don't DynamicExpand during validate 2018-10-16 18:50:29 -07:00
eval_validate_selfref.go core: Pass ProviderSchema to EvalValidateSelfRef 2018-10-16 18:48:28 -07:00
eval_validate_selfref_test.go core: Pass ProviderSchema to EvalValidateSelfRef 2018-10-16 18:48:28 -07:00
eval_validate_test.go core: Don't DynamicExpand during validate 2018-10-16 18:50:29 -07:00
eval_variable.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
evaltree_provider.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
evaluate.go core: Handle count.index evaluation more explicitly 2018-10-16 18:50:29 -07:00
evaluate_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
features.go output warning flag 2017-11-28 14:18:54 -05:00
graph.go core: Remove GraphWalkerPanicwrap, etc 2018-10-16 18:48:28 -07:00
graph_builder.go core: remove redundant rule lines in BasicGraphBuilder logs 2018-10-16 18:49:20 -07:00
graph_builder_apply.go core: Don't create indirect provider dependencies for references 2018-10-16 18:49:20 -07:00
graph_builder_apply_test.go core: fix updated test fixture 2018-10-16 18:49:20 -07:00
graph_builder_destroy_plan.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -07:00
graph_builder_eval.go core: Don't create indirect provider dependencies for references 2018-10-16 18:49:20 -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.go core: run ProvisionerTransformer during plan 2018-10-16 18:49:20 -07:00
graph_builder_plan_test.go core: Don't create indirect provider dependencies for references 2018-10-16 18:49:20 -07:00
graph_builder_refresh.go core: Don't create indirect provider dependencies for references 2018-10-16 18:49:20 -07:00
graph_builder_refresh_test.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -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_dot.go
graph_dot_test.go terraform: remove ConnectDependents and related interfaces 2017-02-03 14:25:54 +01: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.go core: Remove GraphWalkerPanicwrap, etc 2018-10-16 18:48:28 -07:00
graph_walk_context.go core: Stop loading provider schema during graph walk 2018-10-16 18:49:20 -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
graphtype_string.go core: update Stringer implementations for GraphType and walkOperation 2018-10-16 18:49:20 -07:00
hook.go
hook_mock.go
hook_stop.go
hook_stop_test.go
hook_test.go core: add testHook for testing correct interaction with hooks 2017-09-01 17:55:05 -07:00
instancetype.go
instancetype_string.go Update various files for new version of "stringer" 2017-12-11 13:26:29 -08:00
interpolate.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
module_dependencies.go core: fix inheritence checks in ConfigTreeDependencies 2018-10-16 18:48:28 -07:00
module_dependencies_test.go core: fix inheritence checks in ConfigTreeDependencies 2018-10-16 18:48:28 -07:00
node_count_boundary.go
node_data_destroy.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
node_data_refresh.go core: Actually read provider schema for data resources 2018-10-16 18:48:28 -07:00
node_data_refresh_test.go core: Tests for scale in and out need to mock EvalExpression 2018-10-16 18:48:28 -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 compare module by normalized path 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_module_variable_test.go core: Update TestNodeApplyableModuleVariablePath for new address type 2018-10-16 18:48:28 -07:00
node_output.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_provider.go WIP reference providers by full name 2017-11-02 15:00:06 -04:00
node_provider_abstract.go core: Attach resource and provider config schemas during graph build 2018-10-16 18:46:46 -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_provisioner.go core: NodeProvisioner.Name update for new address types 2018-10-16 18:48:28 -07:00
node_resource_abstract.go core: schema attach interfaces are not mutually-exclusive 2018-10-16 18:49:20 -07:00
node_resource_apply.go core: GraphNodeAttachDestroyer 2018-10-16 18:49:20 -07:00
node_resource_destroy.go core: Produce correct references for destroy nodes 2018-10-16 18:49:20 -07:00
node_resource_destroy_test.go core: Fix test for NodeDestroyResource.DynamicExpand 2018-10-16 18:48:28 -07:00
node_resource_plan.go core: attach provisioner schemas in subgraphs 2018-10-16 18:49:20 -07:00
node_resource_plan_destroy.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
node_resource_plan_instance.go core: Don't DynamicExpand during validate 2018-10-16 18:50:29 -07:00
node_resource_plan_orphan.go core: EvalDiffDestroy only update state if requested 2018-10-16 18:49:20 -07:00
node_resource_refresh.go core: Attach resource and provider config schemas during graph build 2018-10-16 18:46:46 -07:00
node_resource_refresh_test.go core: Tests for scale in and out need to mock EvalExpression 2018-10-16 18:48:28 -07:00
node_resource_validate.go core: Don't DynamicExpand during validate 2018-10-16 18:50:29 -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 core: Have WritePlan be explicit that it's non-functional right now 2018-10-16 18:49:20 -07:00
plan_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
resource.go core: NewInstanceInfo should take ResourceInstance, not Resource 2018-10-16 18:49:20 -07:00
resource_address.go core: NewLegacyResourceInstanceAddress correct handling of addrs.NoKey 2018-10-16 18:46:46 -07:00
resource_address_test.go configs: Re-unify the ManagedResource and DataResource types 2018-10-16 18:44:26 -07:00
resource_provider.go core: Remove machinery for the "input" walk 2018-10-16 18:49:20 -07:00
resource_provider_mock.go minor race issue in mockResourceProvider 2017-12-20 09:18:38 -05:00
resource_provider_mock_test.go add Provider schema to the contextFixture 2018-10-16 18:49:20 -07:00
resource_provisioner.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
resource_provisioner_mock.go core: Update MockResourceProvisioner to include GetConfigSchema 2018-10-16 18:46:46 -07:00
resource_provisioner_mock_test.go core: mock provider factory functions for testing 2018-10-16 18:48:28 -07:00
resource_test.go core: check for negative indices in ResourceConfig.get 2017-12-12 09:18:38 -08:00
schemas.go various: helpers for collecting necessary provider types 2018-10-16 18:50:29 -07:00
schemas_test.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -07:00
semantics.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
semantics_test.go core: fix tests for checkInputVariables 2018-10-16 18:48:28 -07:00
state.go core: TestContext2Apply_createBeforeDestroy_hook 2018-10-16 18:49:20 -07:00
state_add.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
state_add_test.go
state_filter.go fix sorting of module resources during state mv 2017-02-23 18:27:16 -05:00
state_filter_test.go
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_v1_to_v2_test.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
terraform_test.go core: TestContext2Apply_createBeforeDestroyUpdate 2018-10-16 18:49:20 -07:00
testing.go
transform.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07: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 core: schema attach interfaces are not mutually-exclusive 2018-10-16 18:49:20 -07:00
transform_attach_state.go terraform: ugly huge change to weave in new HCL2-oriented types 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_config_flat.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_config_flat_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
transform_config_old.go
transform_config_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
transform_count_boundary.go
transform_deposed.go deposed nodes need the resolved provider too 2018-10-16 18:48:28 -07:00
transform_destroy_cbd.go core: GraphNodeAttachDestroyer 2018-10-16 18:49:20 -07:00
transform_destroy_cbd_test.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -07:00
transform_destroy_edge.go core: Don't create indirect provider dependencies for references 2018-10-16 18:49:20 -07:00
transform_destroy_edge_test.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -07:00
transform_diff.go core: Fix DiffTransformer node addresses 2018-10-16 18:48:28 -07:00
transform_diff_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
transform_expand.go
transform_expand_test.go
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 core: Fix TestContextImport_collision 2018-10-16 18:49:20 -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.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_orphan_count.go core: Correct test TestOrphanResourceCountTransformer_zeroAndNone 2018-10-16 18:48:28 -07:00
transform_orphan_count_test.go core: Correct test TestOrphanResourceCountTransformer_zeroAndNone 2018-10-16 18:48:28 -07:00
transform_orphan_output.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_orphan_resource.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_orphan_resource_test.go core: Get tests compiling again 2018-10-16 18:46:46 -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.go core: Don't create indirect provider dependencies for references 2018-10-16 18:49:20 -07:00
transform_provider_test.go core: Update ProviderTransformer tests for new ImportTarget interface 2018-10-16 18:48:28 -07:00
transform_provisioner.go core: Make provisioner schemas available to plan resource instance nodes 2018-10-16 18:49:20 -07:00
transform_provisioner_test.go core: NodeProvisioner.Name update for new address types 2018-10-16 18:48:28 -07:00
transform_reference.go core: Local and output values must reference destroy nodes too 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_removed_modules.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
transform_resource_count.go core: Attach resource and provider config schemas during graph build 2018-10-16 18:46:46 -07:00
transform_root.go terraform: provider transform is converted to new graph world view 2017-01-26 20:58:22 -08:00
transform_root_test.go core: NodeAbstractResource correct default result from ProvidedBy 2018-10-16 18:48:28 -07:00
transform_state.go terraform: ugly huge change to weave in new HCL2-oriented types 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_targets_test.go core: Get tests compiling again 2018-10-16 18:46:46 -07:00
transform_transitive_reduction.go
transform_transitive_reduction_test.go core: Fetch schemas during context construction 2018-10-16 18:49:20 -07: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.go
transform_vertex_test.go
ui_input.go
ui_input_mock.go
ui_input_prefix.go
ui_input_prefix_test.go
ui_output.go
ui_output_callback.go
ui_output_callback_test.go
ui_output_mock.go minor race fix in tests 2017-10-02 16:19:01 -04:00
ui_output_mock_test.go
ui_output_provisioner.go
ui_output_provisioner_test.go
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
user_agent.go Standardize http.Client creation with User-Agent 2018-02-28 12:09:50 -05:00
util.go Resolve resource provider types in config package 2017-06-09 14:03:59 -07:00
util_test.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.go core: fix the tests in variables_test.go 2018-10-16 18:48:28 -07:00
variables_test.go core: fix the tests in variables_test.go 2018-10-16 18:48:28 -07:00
version.go use the new version package 2017-10-19 21:48:08 -04:00
version_required.go terraform: ugly huge change to weave in new HCL2-oriented types 2018-10-16 18:46:46 -07:00
walkoperation_string.go core: update Stringer implementations for GraphType and walkOperation 2018-10-16 18:49:20 -07:00