1.7.7.1. fmt
terraform fmt
命令被用来格式化 Terraform 代码文件的格式和规范。该命令会对代码文件应用我们之前介绍过的代码风格规范中的一些规定,另外会针对可读性对代码做些微调整。
其他具有生成Terraform代码文件功能的命令会按照terraform fmt的标准来生成代码,所以请在项目中遵循fmt的代码风格以保持代码风格的统一。
其他那些会生成 Terraform 代码的 Terraform 命令,生成的代码都会符合 terraform fmt
所强制推行的格式,因此对我们自己编写的文件使用该命令可以保持所有代码风格的一致。
Terraform 不同版本的代码风格规范会有些微不同,所以在升级 Terraform 后我们建议要对代码执行一次 terraform fmt
。
我们不会将修改 terraform fmt
执行的格式规则视作是 Terraform 新版本的破坏性变更(意为,不同版本的 terraform fmt
可能会对代码做不同的格式化),但我们的目标是最大限度地减少对那些已符合 Terraform 文档中显示的样式示例的代码的更改。添加新的格式规则时,他们通常会按照文档中代码示例中展示的新规则来制定,因此我们建议遵循文档中的样式,即使这些文档中的样式尚未被 terraform fmt
强制执行。
格式化决定始终是主观的,因此您可能不同意 terraform fmt
做出的决定。该命令是被设计成固执己见的,并且没有自定义选项,因为它的主要目标是鼓励不同 Terraform 代码库之间风格的一致性,即使所选的风格永远不可能是每个人都喜欢的。
我们建议代码作者在编写 Terraform 模块时遵循 terraform fmt
应用的样式约定,但如果您发现结果特别令人反感,那么您可以选择不使用此命令,并可能选择使用第三方格式化工具。如果您选择使用第三方工具,那么您还应该在 Terraform 自动生成的文件上运行它,以获得手写文件和生成文件之间的一致性。
1.7.7.1.1. 用法
terraform fmt [options] [target...]
默认情况下,fmt
会扫描当前文件夹以寻找代码文件。如果 [target...]
参数指向一个目录,那么 fmt
会扫描该目录。如果 [target...]
参数是一个文件,那么 fmt
只会处理那个文件。如果 [target...]
参数是一个减号(-
),那么 fmt
命令会从标准输入中读取(STDIN)。
该命令支持以下参数:
-list=false
:不列出包含不一致风格的文件-write=false
:不要重写输入文件(通过-check
参数实现,或是使用标准输入流时)-diff
:展示格式差异-check
:检查输入是否合规。返回状态码 0 则代表所有输入的代码风格都是合规,反之则不是 0,并且会打印一份包含了文件内容不合规的文件名清单。-recursive
:是否递归处理所有子文件夹。默认情况下为false
(只有当前文件夹会被处理,不涉及内嵌子模块)