天天看点

Terraform使用本地编译(In-house)的Providers

Terraform Provider的全网标识符

Terraform的Provider在全网的的标识符由三部分组成,分别为

hostname

namespace

type

组成,即

<hostname>/<namespace>/<type>

hostname

是指分发、下载Provider的域名,默认为

registry.terraform.io

namespace

是指提供、开发Provider的组织的命名空间,默认为

hashicorp

type

是指Provider的具体类型。

例如有以下Terraform模板:

terraform {
    required_providers {
         alicloud = {
          source = "aliyun/alicloud"
          version = "1.126.0"
        }
    }
}           

上述模板使用

terraform init

命令会默认去

registry.terraform.io

下载

aliyun

开发的

alicloud

Provider的

1.126.0

版本。

本地安装Terraform Provider

如果使用本地安装插件有两种方法。首先两种方法都需要将下载的Provider或者本地编译完成的Provider放置在以下文件目录层级:

XX(e.g. /usr/share/terraform/providers/)
└── <hostname>(e.g. registry.terraform.io)
    └── <namespace>(e.g. aliyun)
        └── <type>(e.g. alicloud)
            └── <version>(e.g. 1.127.0)
                └── <your OS>(e.g. linux_amd64)
                    └── <binary file>(e.g. terraform-provider-alicloud)           

方法一:使用terraform init的自带参数

第一种方法,使用

terraform init

plugin-dir

参数:

terraform init -plugin-dir=/usr/share/terraform/providers           

方法二:编写配置文件

第二种方法,编写

./terraformrc

配置文件,该文件需要放在

$HOME/

目录下:

provider_installation {
  filesystem_mirror {
    path    = "/usr/share/terraform/providers"
    include = ["registry.terraform.io/*/*"]
  }
}           

其中include字段是指符合该通配符全网标识符的Provider,需要去

/usr/share/terraform/providers

查找本地Provider。

./terraformrc

的编写更详细的参数可以参考

官网