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

相关文章

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

前端-06-eslint9大变样后,如何生成旧版本的.eslintrc.cjs配置文件

目录 问题解决办法 问题 最近在写一个vue3+ts的项目,看了尚硅谷的视频,到了配置eslintrc.cjs的时候我犯了难,因为eslint从9.0之后重大更新,跟以前完全不一样,但是我还是想用和老师一样的eslintrc.cjs文件,该怎么做呢? 视频链接:尚硅谷Vue项目实战硅谷甄选,vue3项目+TypeScript前端项目一套通关 解决办法 首先 eslint 要

Centos9 网卡配置文件

1、Centos stream 9 网络介结 Centos以前版本,NetworkManage以ifcfg格式存储网络配置文件在/etc/sysconfig/networkscripts/目录中。但是,Centos steam 9现已弃用ifcfg格式,默认情况下,NetworkManage不再创建此格式的新配置文件。从Centos steam 9开始采用密钥文件格式(基于INI文件),Netw

C++入门(05-2)从命令行执行C++编译器_GCC

文章目录 GCC编译器1. 下载MinGW-w64,安装(不推荐)2. 使用MSYS2安装MinGW-w64(推荐)2.1 安装MSYS22.2 初始化和更新2.3 安装MinGW-w64编译器2.3 在MSYS2 Shell中导航到代码目录2.4 使用 g++ 编译2.5 运行可执行文件 GCC编译器 GCC(GNU Compiler Collection)是一个开源编译器集

C++入门(05)从命令行执行C++编译器_MSVC

文章目录 1.C++ 编译器2. 常用 C++ 编译器MSVC(Microsoft Visual C++)GCC(GNU Compiler Collection)Clang 3. MSVC 编译器3.1 开发者命令提示符3.2 编译 C++ 代码 1.C++ 编译器 将C++源代码(扩展名为 .cpp )转换成计算机可以运行的可执行程序 编译器会检查代码的语法和语义,生成相应

【SpringMVC学习03】-SpringMVC的配置文件详解

在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。其实真正需要程序员开发的就两大块:一个是Handler,一个是jsp。 在springMVC的入门程序中,SpringMVC的核心配置文件——springmvc.xml为: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:

python+selenium2轻量级框架设计-03读取配置文件

任何一个项目,都涉及到了配置文件和管理和读写,Python支持很多配置文件的读写,这里介绍读取ini文件。 以读取url和浏览器作为例子 #浏览器引擎类import configparser,time,osfrom selenium import webdriverfrom framework.logger import Loggerlogger = Logger(logger='