Terraform配置缓存

举报
kaliarch 发表于 2022/06/11 12:21:42 2022/06/11
【摘要】 一 背景需要手动或者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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。