tflint-ruleset-blueprint/rules/terraform_doc_sample_restricted_resources.go (50 lines of code) (raw):

package rules import ( "fmt" "github.com/terraform-linters/tflint-plugin-sdk/hclext" "github.com/terraform-linters/tflint-plugin-sdk/tflint" ) // TerraformDocSamplesRestrictedResources checks whether restricted resources are used. type TerraformDocSamplesRestrictedResources struct { tflint.DefaultRule } // NewTerraformDocSamplesRestrictedResources returns a new rule. func NewTerraformDocSamplesRestrictedResources() *TerraformDocSamplesRestrictedResources { return &TerraformDocSamplesRestrictedResources{} } // Name returns the rule name. func (r *TerraformDocSamplesRestrictedResources) Name() string { return "terraform_doc_sample_restricted_resources" } // Enabled returns whether the rule is enabled by default. func (r *TerraformDocSamplesRestrictedResources) Enabled() bool { return false } // Severity returns the rule severity. func (r *TerraformDocSamplesRestrictedResources) Severity() tflint.Severity { return tflint.ERROR } // Link returns the rule reference link func (r *TerraformDocSamplesRestrictedResources) Link() string { return "https://googlecloudplatform.github.io/samples-style-guide/#language-specific" } const ( nullResource = "null_resource" ) var restrictedResources = []string{nullResource} // Check checks whether config contains restricted resource types. func (r *TerraformDocSamplesRestrictedResources) Check(runner tflint.Runner) error { path, err := runner.GetModulePath() if err != nil { return err } if !path.IsRoot() { // Each sample must be a root module. return nil } for _, restrictedResource := range restrictedResources { content, err := runner.GetResourceContent(restrictedResource, &hclext.BodySchema{}, nil) if err != nil { return err } for _, b := range content.Blocks { err := runner.EmitIssue(r, fmt.Sprintf("doc sample restricted resource type: %s", restrictedResource), b.DefRange) if err != nil { return err } } } return nil }