天天看點

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

的編寫更詳細的參數可以參考

官網