我第一次使用 tflint 扫描我的 terraform 代码。为此,我创建了 shell 脚本来执行 tflint 命令,但是,在执行 tflint 作业时,我收到一些 [WARN] 消息。我不确定它们是如何生成的。有办法抑制吗
tflint 命令已成功执行,并且还在我的 terraform 代码中显示可能的问题/通知。
我正在使用下面的 Github 工作流程操作;
- name: Setup TFLint
uses: terraform-linters/setup-tflint@v1
with:
tflint_version: v0.26.0
- name: Lint Terraform Code
run: scripts/tflint.sh
shell: bash
continue-on-error: false
“.tflint.hcl”文件->
plugin "aws" {
enabled = true
version = "0.12.0"
source = "github.com/terraform-linters/tflint-ruleset-aws"
}
rule "terraform_naming_convention" {
enabled = true
}
rule "terraform_unused_declarations" {
enabled = true
}
rule "terraform_deprecated_index" {
enabled = true
}
rule "terraform_documented_outputs" {
enabled = true
}
rule "terraform_documented_variables" {
enabled = true
}
rule "terraform_typed_variables" {
enabled = true
}
tflint.sh ->
#!/usr/bin/env bash
echo "Scanning all files(*.tf) with tflint"
find * -name '*.tf' | grep -E -v ".terraform|.terragrunt-cache" | while read -r line; do
tflint "$line" -f compact
done
Github 工作流程输出显示 [WARN] 消息-->
截至 tflint
v0.39.3
参考
您可以使用以下注释来内联忽略规则。
resource "aws_instance" "foo" {
# tflint-ignore: aws_instance_invalid_type
instance_type = "t1.2xlarge"
}
从 tflint
v0.40.0
Ref 添加了另外两种注释样式。
# comma-sperated
# tflint-ignore: aws_instance_invalid_type, other_rule
# ingore all using keyword
# tflint-ignore: all
不同的规则可以应用于资源块或其中的元素。 以下面示例中的
terraform_naming_convention
为例。此规则描述了资源的 terraform 命名约定违规。要忽略此语句,指令位于块上方。
# tflint-ignore: terraform_naming_convention
resource "random_id" "bad-example" {
# tflint-ignore: terraform_deprecated_interpolation
prefix = "${local.prefix}"
keepers = {
id = "dev-test"
}
byte_length = 2
}
您需要在需要忽略的块之外添加注释。例如:
# tflint-ignore: terraform_unused_declarations
variable "branch" {
type = string
description = "Git branch"
}
你也可以放置多个忽略:
# tflint-ignore: terraform_unused_declarations, other_rule
variable "branch" {
type = string
description = "Git branch"
}
最后你可以从 lint 中排除该块:
# tflint-ignore: all
variable "branch" {
type = string
description = "Git branch"
}
注意:根据被忽略的块,如果尚未创建资源,您也可以尝试将
tflint-ignore
放入块内。
参考:
我用一个创建 dynamodb 表的 terraform 文件遇到了这个问题,上面的建议都不起作用。 我已经在资源块内部和外部尝试过这些,但它们不起作用:
# tflint-ignore: server_side_encryption
# tflint-disable: server_side_encryption
# tflint-ignore: all
tflint 项目当前版本为 v0.47,此时可能不应该使用。
顺便说一下,我已经成功地通过使用空设备
/dev/null
来抑制警告消息,并将脚本生成的STDERR日志重定向到2> /dev/null
。
最终代码:
- name: Lint Terraform Code
run: scripts/tflint.sh 2> /dev/null
shell: bash
continue-on-error: false