一组基于python的cli工具,用于处理terraform配置
terrawrap的Python项目详细描述
TerraWrap
一组基于python的cli工具,用于批量处理terraform配置
关于放大
Amplify构建创新和引人注目的数字教育产品,增强教师和学生的能力
国家。作为K-12教育领域的领先创新者,我们有着悠久的历史,被誉为最佳技术
教育领域的公司和科技领域的最佳教育公司。而其他公司则试图将学习经验缩减为
在技术方面,我们使用技术来扩展真实课堂中的可能性,让真实的学生和教师参与其中。
更多信息,请访问https://www.amplify.com
目录
功能
自动.tfvars
继承。terrawrap使得通过 继承auto.tfvars
文件。远程后端生成。TerraWrap使通过 为它们生成配置。
存储库级计划/应用。terrawrap提供了在整个 立即存储库。
< > >使大型组织的地形干燥。Terraform的最佳实践是分解Terraform配置 变成许多小的州档案。这会导致在使用大型terraform时样板代码发生爆炸。 有100份国家档案的组织。terrawrap通过提供
auto.tfvars来减少一些样板代码。 继承和生成后端配置。
使terraform代码更易于管理。terraform一次只在一个目录上运行命令。这使得 很难处理数百个terraform目录/状态文件。terrawrap为运行 一次对整个存储库执行命令,而不是一次对一个目录执行命令。
所有terraform代码都应该是有效的terraform。与terrawrap一起使用的任何terraform代码都应该可以使用 没有包装的地形。TerraWrap不提供任何新语法。
terrawrap不是代码生成器。生成的代码很难 阅读并理解。代码生成器往往会导致泄漏的抽象,而这些抽象可能比它们更麻烦 价值。但是,terrawrap确实生成了远程后端配置,以解决terraform不支持 后端配置中的变量(请参见https://github.com/hashicorp/terraform/issues/13022" rel="nofollow">https://github.com/hashicorp/terraform/issues/13022)。我们希望这是 TerraWrap中代码生成的唯一实例。
< > >
目标
开始
先决条件
TerraWrap需要Python3.6.0或更高版本才能运行。
安装
此软件包可以使用pip安装
pip3 install terrawrap
现在您应该可以使用tf
命令了。
从源构建
对于开发,建议使用tox>;=2.9.1
。
运行测试
terrawrap使用tox
。您需要使用pip install tox
安装tox。
运行tox
将自动执行linter和单元测试。
您还可以使用-e
参数单独运行它们。
例如,tox-e py37 unit
将运行python 3.7的单元测试
要查看所有可用选项,请运行tox-l
配置
.tf_包装器
terrawrap可以通过.tf_wrapper
文件进行配置。包装器将遍历提供的配置
路径并查找.tfu wrapper
文件。文件将按发现的顺序合并。考虑
下面的示例:
foo ├── bar │ └── .tf_wrapper └── .tf_wrapper
如果这两个.tfu wrapper
文件之间存在冲突配置,则中的.tfu wrapper
文件
foo/bar
将获胜。
.tfu wrapper中支持以下选项:
configure_backend:True# If true, automatically configure Terraform backends.pipeline_check:True# If true, require this directory to be in a pipeline file.envvars:<NAME_OF_ENVVAR>:source:# The source of the envvar. One of `['ssm', 'text']`.path:# If the source of the envvar is `ssm`, the SSM Parameter Store path to lookup the value of the environment variable from.value:# if the source of the envvar is `text`, the string value to set as the environment variable.
自动变量
terrawrap通过扫描*.auto.tfvars
目录结构中的文件。
例如,以下命令tf config/foo/bar apply
具有以下目录结构:
config ├── foo | └── bar | │ ├── baz.tf | │ └── bar.auto.tfvars | └── foo.auto.tfvars └── config.auto.tfvars
将生成以下命令:
terraform apply -var-file config/config.auto.tfvars \ -var-file config/foo/foo.auto.tfvars \ -var-file config/foo/bar/bar.auto.tfvars
后端配置
terrawrap支持通过注入适当的-backend配置来自动配置后端
运行
init时的参数
例如,terrawrap命令tf config/foo/bar init
将生成如下terraform命令
aws s3远程状态后端
terraform init -reconfigure \ -backend-config=dynamodb_table=<lock table name> \ -backend-config=encrypt=true\ -backend-config=key=config/foo/bar.tfstate \ -backend-config=region=<region name> \ -backend-config=bucket=<state bucket name> \ -backend-config=skip_get_ec2_platforms=true\ -backend-config=skip_region_validation=true\ -backend-config=skip_credentials_validation=true
terrawrap通过在目录结构中查找.tf_wrapper
文件来配置后端。
支持s3
或gcs
。有关可用的选项,请参阅相关的TerraForm文档
对于每种后端类型:
https://www.terraform.io/docs/backends/types/s3.html"配置变量https://www.terraform.io/docs/backends/types/gcs.html配置变量
s3后端
backends: s3: region: role_arn: bucket: dynamodb_table:<表><广告>
s3状态文件密钥名是从用于运行terraform命令的目录名生成的。
例如,tf config/foo/bar init
在s3中使用键为config/foo/bar.tf state
的状态文件
地面军事系统后端
backends:
gcs:
bucket:
<表><广告>选项名称 必需的 目的
< /广告><正文>桶 >是GCS存储桶的名称 命令
Tf
tf<;directory>;<;terraform command>;
为包含*.tf
文件的给定目录运行terraform命令。
terrawrap在运行给定命令时自动包含上述autovars。任何地形
支持命令
计划检查
plan_check<;directory>;
对从给定目录开始的所有子目录递归运行terraform plan
。
plan_check
使用git
来标识与master
分支相比哪些文件已更改。然后它将运行计划
在任何包含tf
文件且符合以下条件的目录中