New rule: terraform_variable_nullable
#113
bendrucker
started this conversation in
Ideas
Replies: 2 comments
-
This feels a bit pedantic given validation would immediately fail for the case where |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Yeah I guess that's not necessary, if |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
Introduce a new
terraform_variable_nullablerule that requires users to setnullablefor variables with adefault. This rule would be disabled by default. Eventually rules liketerraform_documented_variablesshould be renamed to clearly group with this and other similar rules (e.g.,terraform_variable_description).Example
The following configuration is invalid and will error when called:
Output:
Cases
Invalid
Would emit a warning telling the user to set
nullable:We can potentially suggest
nullable = falseas appropriate for most cases, but only the author can determine whethernullis handled by the module. Terraform has many options for this, includingval == nulland functions likecoalesce. It may be theoretically possible to detect null handling with static analysis, but it's impractically difficult.Valid
No warning, because the module should be handling
nullas its the default:Ignored as not applicable:
Background
Since Terraform 0.12, setting an attribute to
nullhas been equivalent to leaving it unset.https://www.hashicorp.com/blog/terraform-0-12-conditional-operator-improvements
At the time, this behavior only applied to provider attributes, and not module attributes. A module might define this:
Ideally, a caller should be able to do this:
If the calling module specifies a name, it should override the default. Otherwise, the default should be used. From 0.12 through 1.0, this wasn't possible.
Terraform 1.1 introduced
nullable, which enables this behavior:https://developer.hashicorp.com/terraform/language/values/variables#disallowing-null-input-values
The child module would define:
While the documentation does not explicitly explain this, this was introduced for backward compatibility, since enabling this behavior by default would be a breaking change:
https://discuss.hashicorp.com/t/request-for-feedback-optional-object-type-attributes-with-defaults-in-v1-3-alpha/40550/27
Also: hashicorp/terraform#29832
In most cases, variables with defined defaults should set
nullable = false. However, there are valid cases fornullable = trueif the module handles null values for that variable.Beta Was this translation helpful? Give feedback.
All reactions