1.6.12.1. init

terraform init命令被用来初始化一个包含Terraform代码的工作目录。在编写了一些Terraform代码或是克隆了一个Terraform项目后应首先执行该命令。反复执行该命令是安全的(考点)。

1.6.12.1.1. 用法

terraform init [options] [DIR]

该命令为初始化工作目录执行了多个不同的步骤。详细说明可以见下文,总体来说用户不需要担心这些步骤。即使某些步骤可能会遭遇错误,但是该命令绝对不会删除你的基础设施资源或是状态文件。

如果不传入任何参数,那么命令会初始化当前工作目录。我们推荐不使用DIR参数,直接在根模块的目录下运行该命令。

1.6.12.1.2. 常用参数

  • -input=true:是否在取不到输入变量值时提示用户输入
  • -lock=false:是否在运行时锁定状态文件
  • -lock-timeout=\:尝试获取状态文件锁时的超时时间,默认为0,意为一旦发现锁已被其他进程获取立即报错
  • -no-color:禁止输出中包含颜色
  • -upgrade:是否升级模块代码以及插件

1.6.12.1.3. 从模块源拷贝模块

默认情况下,terraform init会认为工作目录下已经包含了Terraform代码文件。

init配合-from-module=MODULE-SOURCE参数在一个空目录下执行,这将会在运行其他任何步骤之前先把相关模块复制到目标文件夹下。

这种特殊的使用方式有两种场景:

  • 对于source对应的版本控制系统,我们可以用这种方法签出指定版本代码并为它初始化工作目录
  • 如果模块源指向的是一个样例项目,那么这种方式可以把样例代码拷贝到本地目录以便我们后续基于样例编写新的代码

如果是常规运行操作我们建议用独立的步骤从版本控制系统中签出代码,使用版本控制系统所属的工具。

1.6.12.1.4. Backend初始化

在执行init时,会分析根模块代码以寻找Backend配置,然后使用给定的配置设定初始化Backend存储。

在已经初始化Backend后重复执行init命令会更新工作目录以使用新的Backend设置。取决于改变的内容,init可能会提示用户是否确认进行状态迁移(我们在状态管理章节中有所介绍)。-force-copy参数跳过了提示,直接确认迁移状态。-reconfigure参数则使得init不理会任何现有配置,防止任何状态迁移。

要跳过Backend配置,可以使用-backend=false。注意某些其他init步骤需要已经被初始化的Backend,所以推荐只在已经初始化过Backend后使用该参数。

-backend-config参数可以用来动态指定Backend配置,我们在状态管理章节中介绍“部分配置“时已经提过,在此不再赘述。

1.6.12.1.5. 初始化子模块

init会搜索module块,然后通过source参数取回模块代码。

模块安装之后重新运行init命令会继续安装那些自从上次init之后新增的模块,但不会修改已被安装的模块。使用-upgrade可以改变这种行为,将所有模块升级到最新版本的代码。

要跳过子模块安装步骤,可以使用-get=false参数。要注意其他一些init步骤需要模块树完整,所以建议只在成功安装过模块以后使用该参数。

1.6.12.1.6. 插件安装

我们在Provider章节中介绍了插件安装,所以在此不再赘述,我们值介绍一下参数:

  • -upgrade:将之前所有已安装的插件升级到符合version约束的最新版本。此参数对手动安装的插件无效
  • -get-plugins=false:跳过插件安装。Terraform会使用已安装在当前工作目录下或是插件缓存路径中的插件。如果这些插件不足以覆盖需求,那么init会失败
  • -plugin-dir=PATH:跳过插件安装,只从指定目录加载插件。该参数会跳过用户插件目录以及所有当前工作目录下的插件。要在使用过该参数后恢复默认行为,请使用-plugin-dir=""参数重新执行init。
  • -verify-plugins=false:在下载插件后跳过验证签名(不推荐)。官方插件都会经HashiCorp签名,Terraform会验证这些签名。可以使用该参数跳过签名验证(Terraform不会验证手动安装的插件的签名)

results matching ""

    No results matching ""