Split variable evaluation / validation scope #2199
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, GraphNodeReferenceOutside is used to make sure that variables are evaluated in the correct scope. However, with the addition of function providers and "bugfixes" introduced in provider iteration, variables now require two completely distinct scopes.
One scope is used for variable evaluation from module call inputs, the other for the validation scope. These two scopes are now represented by the original struct in charge of the variable, and an new one which only contains the validation logic.
Only the new "validation scope" node provides the reference and will be depended on, other nodes may use the value post-validation.
Additionally ProviderFunctionTransformer now understands GraphNodeReferenceOutside, which fixes a few related bugs. Idealy, we could get rid of that interface, but due to how expansion is handled, it's quite tricky.
This also implements a lot of the required machinery for #1336.
Resolves #2175
Target Release
1.9.0
Checklist
Go checklist
Website/documentation checklist