Terraform命令行配置文件

2024-05-06 01:12

本文主要是介绍Terraform命令行配置文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

命令行配置文件(.terraformrcterraform.rc)为每个用户配置了命令行的行为,适用于所有的Terraform工作目录,这与编写的Terraform代码是分开的。

配置文件位置

配置文件的位置取决于用户使用的操作系统:

  • Windows平台上,文件名必须是terraform.rc,位置必须在相关用户的%APPDATA%目录下,这个目录的物理路径取决于Windows的版本以及系统配置
  • 在其他操作系统上,文件名必须是.terraformrc,位置必须是在相关用户的HOME目录

在Windows上创建配置文件时,要注意Windows资源管理器默认隐藏文件扩展名的行为,Terraform不会把terraform.rc.txt文件识别为命令行配置文件,而默认情况下Windows资源管理器会将它的文件名显示为terraform.rc(隐藏了扩展名的缘故)。

可以通过设置TF_CLI_CONFIG_FILE环境变量的方式来修改配置文件的位置。

配置文件语法

配置文件本身如同.tf文件那样也采用HCL语法,但使用不同的属性和块。
以下是常见语法示例:

plugin_cache_dir   = "$HOME/.terraform.d/plugin-cache"
disable_checkpoint = true

可用配置项

命令行配置文件中可以设置的配置项有:

  • credentials:使用Terraform Cloud服务或Terraform企业版时使用的凭据
  • credentials_helper:配置一个外部的用于读写Terraform Cloud或Terraform企业版凭据的帮助程序
  • disable_checkpoint:设置为true可以完全关闭与Checkpoint的交互
  • disable_checkpoint_signature:设置为true可以阻止向Checkpoint发送匿名ID
  • plugin_cache_dir:开启插件缓存
  • provider_installation:定制化执行terraform init时安装插件的行为

Provider的安装

默认情况下Terraform从官方Provider Registry下载安装Provider插件,Provider在Registry中的原始地址采用类似registry.terraform.io/hashicorp/aws的编码规则。通常为了简便,Terraform允许省略地址中的主机名部分registry.terraform.io,所以可以直接使用地址hashicorp/aws

有时无法直接从官方Registry下载插件,例如要在一个与公网隔离的环境中运行Terraform时。为了允许Terraform工作在这样的环境下,有一些可选方法允许从其他地方获取Provider插件。

显式安装方法配置

可以在命令行配置文件中定义一个provider_installation块来修改Terraform默认的插件安装行为,命令Terraform使用本地的Registry镜像服务,或是使用一些用户修改过的插件。
通常provider_installation块的结构如下:

provider_installation {filesystem_mirror {path    = "/usr/share/terraform/providers"include = ["example.com/*/*"]}direct {exclude = ["example.com/*/*"]}
}

provider_installation块中每一个内嵌块都指定了一种安装方式,每一种安装方式都可以同时包含includeexclude模式来指定安装方式使用的Provider类型。在上述例子中,把所有原先位于example.com这个Registry存储中的Provider设置成只能从本地文件系统的/usr/share/terraform/providers镜像存储中寻找并安装,而其他的Provider只能从它们原先的Registry存储下载安装。

如果为一种安装方式同时设置了includeexclude,那么exclude模式将拥有更高的优先级。例如:包含registry.terraform.io/hashicorp/*但排除registry.terraform.io/hashicorp/dns将对所有hashicorp空间下的插件有效,但是hashicorp/dns除外。

和Terraform代码文件中Provider的source属性一样的是,在provider_installation里也可以省略registry.terraform.io/的前缀,甚至是使用通配符时亦是如此。比如,registry.terraform.io/hashicorp/*hashicorp/*是等价的;*/*registry.terraform.io/*/*的缩写,而不是*/*/*的缩写。

目前支持的安装方式如下:

  • direct:要求直接从原始的Registry服务下载,该方法不需要额外参数。

  • filesystem_mirror:一个本地存有Provider插件拷贝的目录,该方法需要一个额外的参数path来指定存有插件拷贝的目录路径。Terraform期待给定路径的目录内通过路径来描述插件的一些元信息,支持以下两种目录结构:

    • 打包式布局:HOSTNAME/NAMESPACE/TYPE/terraform-provider-TYPE_VERSION_TARGET.zip的格式指定了一个从原始Registry获取的包含插件的发行版zip文件
    • 解压式布局:HOSTNAME/NAMESPACE/TYPE/VERSION/TARGET式一个包含有Provider插件发行版zip文件解压缩后内容物的目录

    这两种布局下,VERSION都是代表着插件版本的字符串,比如2.0.0TARGET则指定了插件发行版对应的目标平台,例如darwin_amd64linux_armwindows_amd64等等。
    如果使用解压式布局,Terraform在安装插件时会尝试创建一个到镜像目录的符号连接来避免拷贝文件夹;打包式布局则不会这样做,因为Terraform必须在安装插件时解压发行版文件。

    可以指定多个filesystem_mirror块来指定多个不同的目录。

  • network_mirror:指定一个HTTPS服务地址提供Provider插件的拷贝,不论这些插件原先属于哪些Registry服务。该方法需要一个额外参数url来指定镜像服务的地址,url地址必须使用https:作为前缀,以斜杠结尾。Terraform期待该地址指定的服务实现了Provider网络镜像协议,这是一种被设计用来托管插件拷贝的网站所需要实现的协议。

    需要特别注意的是,请不要使用不可信的network_mirror地址。Terraform会验证镜像站点的TLS证书以确认身份,但一个拥有合法TLS证书的镜像站可能会提供包含恶意内容的插件文件。

  • dev_overrides:指定使用本地的开发版本插件,有时想要对Provider代码做一些修改,为了调试本地代码编译后的插件,可以使用dev_overrides指定使用本地编译的版本。
    例如,想要调试本地修改过的UCloud Provider插件,我们可以从github上克隆该项目源代码,修改完代码后,编译一个可执行版本(以Mac OS为例):

    $ GOOS=darwin GOARCH=arm64 go build -o bin/terraform-provider-ucloud
    $ chmod +x bin/terraform-provider-ucloud

    然后编写如下provider_installation配置:

    provider_installation{dev_overrides {"ucloud/ucloud" = "PATH_TO_PROJECT/terraform-provider-ucloud/"}
    }

    当Terraform代码中要求了sourceucloud/ucloud的Provider时,执行terraform init仍然会报错,提示找不到ucloud/ucloud这个Provider,但执行terraform plan或是terraform apply等操作时可以顺利执行,此时Terraform会使用路径指定的本地Provider插件,这种方式比较适合于调试本地Provider插件代码。

对于上述的几种插件安装方式,Terraform会尝试通过includeexclude模式匹配Provider,遍历匹配的安装方式,选择一个符合Terraform代码中对插件版本约束的最新版本。如果拥有一个插件的特定版本的本地镜像,并且希望Terraform只使用这个本地镜像,那么需要移除direct安装方式,或是在direct中通过exclude参数排除特定的Provider。

隐式的本地镜像目录

如果命令行配置文件中没有包含provider_installation块,那么Terraform会生成一个隐式的配置,该隐式配置包含了一个filesystem_mirror方法以及一个direct方法。
在不同的操作系统上,Terraform会选择不同的路径作为隐式filesystem_mirror路径:

  • Windows:%APPDATA%/terraform.d/plugins以及%APPDATA%/HashiCorp/Terraform/plugins
  • Mac OS X:$HOME/.terraform.d/plugins/~/Library/Application Support/io.terraform/plugins以及/Library/Application Support/io.terraform/plugins
  • Linux以及其他Unix风格系统:$HOME/.terraform.d/plugins/,以及配置的XDG基础目录后接terraform/plugins;如果没有设置XDG环境变量,Terraform会使用~/.local/share/terraform/plugins/usr/local/share/terraform/plugins,以及/usr/share/terraform/plugins

Terraform会在启动时为上述路径的每一个目录创建一个隐式filesystem_mirror块,另外如果当前工作目录下包含有terraform.d/plugins目录,那么也会为它创建一个隐式filesystem_mirror块。

相对于任意多个隐式filesystem_mirror块,Terraform同时也会创建一个隐式direct块。Terraform会扫描所有文件系统镜像目录,对找到的Provider自动从direct块中排除出去(这种自动的exclude行为只对隐式direct块有效。如果在provider_installation块中显式指定了direct块,那么需要显式定义exclude规则)。

这篇关于Terraform命令行配置文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963140

相关文章

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

使用Nginx配置文件服务器方式

《使用Nginx配置文件服务器方式》:本文主要介绍使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 为什么选择 Nginx 作为文件服务器?2. 环境准备3. 配置 Nginx 文件服务器4. 将文件放入服务器目录5. 启动 N

Python的pip在命令行无法使用问题的解决方法

《Python的pip在命令行无法使用问题的解决方法》PIP是通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载、更新等功能,安装诸如Pygame、Pymysql等Pyt... 目录前言一. pip是什么?二. 为什么无法使用?1. 当我们在命令行输入指令并回车时,一般主要是出现以

springboot实现配置文件关键信息加解密

《springboot实现配置文件关键信息加解密》在项目配置文件中常常会配置如数据库连接信息,redis连接信息等,连接密码明文配置在配置文件中会很不安全,所以本文就来聊聊如何使用springboot... 目录前言方案实践1、第一种方案2、第二种方案前言在项目配置文件中常常会配置如数据库连接信息、Red

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti