目录
一、实验
1.环境
2.初始化一个项目
3.Terraform使用本地编译(In-house)的Providers
二、问题
1.Terraform Provider有哪些全网标识符
2.本地安装Terraform Provider有哪些方法
一、实验
1.环境
(1)主机
表1-1 主机
主机 | 系统 | 软件 | 备注 |
pipepoint | Linux | Terraform 1.6.6 |
2.初始化一个kind项目
(1)查看版本
terraform -v
(2)初始化
terraform init
会报错
3.Terraform使用本地编译(In-house)的Providers
(1)编写配置文件
vim .terraformrc
provider_installation {
filesystem_mirror {
path = "/usr/share/terraform/providers"
include = ["registry.terraform.io/*/*"]
}
}
(2)Terraform模板(kind)
Terraform Registry
USE PROVIDER
terraform {
required_providers {
kind = {
source = "tehcyx/kind"
version = "0.2.1"
}
}
}
provider "kind" {
# Configuration options
}
(3) 下载软件包
https://github.com/tehcyx/terraform-provider-kind/releases
(4)tree递归查看目录 (将软件包按递归目录放置)
tree -s /usr/share/terraform/
(5)格式化代码
terraform fmt
(6) 初始化
terraform init
(6) 验证
terraform validate
二、问题
1.Terraform Provider有哪些全网标识符
(1)概念
Terraform的Provider在全网的的标识符由三部分组成,分别为hostname,namespace和type组成,即<hostname>/<namespace>/<type>。hostname是指分发、下载Provider的域名,默认为registry.terraform.io。namespace是指提供、开发Provider的组织的命名空间,默认为hashicorp。type是指Provider的具体类型。
(2)Terraform模板(alicloud)
Terraform Registry
模板使用terraform init
命令会默认去registry.terraform.io
下载aliyun
开发的alicloud
Provider的1.214.0
版本。
terraform {
required_providers {
alicloud = {
source = "aliyun/alicloud"
version = "1.214.1"
}
}
2.本地安装Terraform Provider有哪些方法
(1)原理
如果使用本地安装插件有两种方法。首先两种方法都需要将下载的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.214.1)
└── <your OS>(e.g. linux_amd64)
└── <binary file>(e.g. terraform-provider-alicloud)
(2)方法一 (使用terraform init的自带参数)
第一种方法,使用terraform init
的plugin-dir
参数:
terraform init -plugin-dir=/usr/share/terraform/providers
(3)方法二 (编写配置文件)
第二种方法,编写.terraformrc
配置文件,该文件需要放在$HOME/
目录下:
#其中include字段是指符合该通配符全网标识符的Provider,需要去/usr/share/terraform/providers查找本地Provider。
provider_installation {
filesystem_mirror {
path = "/usr/share/terraform/providers"
include = ["registry.terraform.io/*/*"]
}
}