Terraform配置缓存
【摘要】 一 背景需要手动或者terraform init一次下载, 然后缓存。后续直接使用缓存。本次实践使用的是Linux/Mac 系统,如果是windows系统有两点不同的配置。Terraform使用预填充插件(防止通过init命令从web下载)。配置文件使用与 .tf 文件相同的 HCL 语法,但具有不同的属性和块。以下示例说明了一般语法;有关每个设置的含义的信息,请参阅以下部分:creden...
一 背景
需要手动或者terraform init
一次下载, 然后缓存。后续直接使用缓存。
本次实践使用的是Linux/Mac
系统,如果是windows
系统有两点不同的配置。
Terraform使用预填充插件(防止通过init
命令从web下载)。
配置文件使用与 .tf 文件相同的 HCL 语法,但具有不同的属性和块。以下示例说明了一般语法;有关每个设置的含义的信息,请参阅以下部分:
credentials
:配置用于 Terraform Cloud 或 Terraform Enterprise 的凭据。有关详细信息,请参阅下面的凭据Credentials。credentials_helper
:为 Terraform Cloud 或 Terraform Enterprise 配置用于存储和检索凭据的外部帮助程序。有关详细信息,请参阅下面的凭据助手。disable_checkpoint
:设置为 true 时,禁用需要联系 HashiCorp 提供的网络服务的升级和安全公告检查。disable_checkpoint_signature
:当设置为 true 时,允许上述升级和安全公告检查,但禁止使用匿名 id 来删除重复警告消息。plugin_cache_dir
:启用插件缓存并以字符串形式指定插件缓存目录的位置。provider_installation
:自定义 terraform init 在安装提供程序插件时使用的安装方法。有关详细信息,请参阅下面的提供程序安装。
二 配置
# 创建缓存目录
mkdir -pv $HOME/.terraform.d/terraform-plugin-cache
# 写入配置文件
cat > $HOME/.terraform.d/.terraformrc <<EOF
plugin_cache_dir = "$HOME/.terraform.d/terraform-plugin-cache"
disable_checkpoint = true
EOF
# 全局生效配置文件路径
export TF_CLI_CONFIG_FILE=$HOME/.terraform.d/.terraformrc
三 初始化
terraform init进行联网下载,或者可以进入到registry.terraform.io 手动通过github下载
可以看到在缓存目录下已经成功缓存
四 离线测试
4.1 制定plugin-dir
terraform init --plugin-dir $HOME/.terraform.d/terraform-plugin-cache/
4.2 定义Terraform插件使用本地mirror
在.terraformrc 中添加filesystem_mirror
provider_installation {
filesystem_mirror {
path = "/Users/xuel/.terraform.d/terraform-plugin-cache"
include = ["registry.terraform.io/*/*"]
}
}
$ terraform providers mirror /Users/larry/Software/terraform/plugins
terraform init -plugin-dir=/Users/larry/Software/terraform/plugins
4.3 两者的练习与区别
4.3.1 联系
前两个是相互联系的,因为它们都共享相同的底层机制:“文件系统镜像”插件安装方法。
4.3.2 区别
- 使用
terraform init -plugin-dir
使Terraform实际上构造了一个one-offprovider_installation
块,其中只包含一个引用给定目录的filesystem_mirror
块。它允许您仅在一次安装操作中获得这种效果,而不是在中心位置为将来的所有命令配置它。具体而言,如果运行terraform init -plugin-dir=/example
,则在功能上等同于以下CLI配置:
provider_installation {
filesystem_mirror {
path = "/Users/xuel/.terraform.d/terraform-plugin-cache"
include = ["registry.terraform.io/*/*"]
}
}
-
插件缓存目录不同,因为Terraform仍将访问配置的安装方法(默认情况下,每个提供商的原始注册表),但如果插件包文件已经在缓存中,则将跳过下载插件包文件(该文件实际上包含插件代码,而不是关于发布的元数据)。同样,它会将下载的任何新插件包保存到缓存中,以备将来使用。
因此,这不会阻止Terraform尝试通过网络访问原始注册表来安装任何新插件。这只是一个避免重复使用re-downloading相同包的优化。
注意事项
- 注意环境变量TF_CLI_CONFIG_FILE,全局生效添加之.bashrc中。
- 到此就完成了terraform离线本地源的配置了, 除了这种方式外其实也可以基于terraform开放的HTTP API协议,使用Python Flask写一个registry server。
- 如果想要自己手动下载,可以到这个网址:https://releases.hashicorp.com/
参考链接
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)