A go project containing convenience functions for writing tflint rules.
The modulecontent package contains functions for extracting information from Terraform modules. It supports evaluation of all expressions and can be used to extract blocks and attributes according to the supplied inputs.
The blocks and attributes provided by this package can be evaluated using the supplied *terraform.Evaluator EvaluateExpr().
Use the FetchBlocks() and FetchAttributes() functions to extract the blocks and attributes from the module.
You can use the resulting cty.Value in the blockquery package.
This package queries the cty.Value returned by the modulecontent package.
The query language based on gjson, but is not as advanced.
Queries are in dotted string notation, with numeric values used to access list members and a hash symbol for a wildcard.
Use the Query() function to return a cty.Value.
You can then use one of the comparison functions , e.g. IsOneOf() to check the result against a set of expected values.
These contain template rules for common use cases.
Use NewAzApiRule() to create a rule that checks for specific body properties for a given resource type and API version:
NewAzApiRuleQueryMustExist(
"ruleName", // The rule name
"https://link-to-rule-docs.com", // The link to the rule documentation
"Microsoft.Network/publicIPAddresses", // The resource type
"2023-05-01", // Minimum API version applicable
"", // No maximum API version applicable (use latest)
"properties.sku.name", // The query
blockquery.IsOneOf, // The comparison function
blockquery.NewStringResults("Standard")... // The expected values
)