三亚网站建设,绿色大气网站,网站导航设置,游戏充值代理平台《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新#xff0c;书中的示例代码也是放在GitHub上#xff0c;方便大家参考查看。 不怕出身低#xff0c;行行出状元。 插件
Terraform可以对多种平台的多种资源进行管理#xff0c;这个是通过… 《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新书中的示例代码也是放在GitHub上方便大家参考查看。 不怕出身低行行出状元。 插件
Terraform可以对多种平台的多种资源进行管理这个是通过插件来实现的。
这里的插件在Terraform的世界也叫Providers也是一个个可执行文件。不同的插件完成不同的功能对接AWS就要使用AWS的插件对接GCP就要用GCP的插件。
当我们通过terraform init初始化一个项目时Terraform就会根据配置帮我们下载插件。在我们执行apply的时候就会调用这些插件实现对应的资源管理。
我们可以到官方仓库 https://registry.terraform.io/browse/providers 去搜有什么插件可用这里有极其丰富的插件也有详细的使用说明 接下来我们就插件探讨几个问题
怎么指定下载哪些插件和版本号从哪里下载下载到什么地方没有对插件库有访问权限的环境下怎么处理是否每个项目都要下载相同的插件
指定下载哪些插件和版本
Terraform是通过解析required_providers知道需要哪些插件一般习惯是定义一个verion.tf文件把相关配置都放在这个文件里比如
terraform {required_version v1.0.11required_providers {local {source hashicorp/localversion 2.1.0}random {source hashicorp/randomversion 3.1.0}}
}
这个文件定义了Terraform核心组件的版本还定义了local和random插件及其版本号。上面指定Terraform版本为1.0.11local版本为2.1.0random版本为3.1.0。
我们看这里的版本号有两个等于号会不会觉得奇怪其实这是HCL语言的一个特性除了号还可以是、等这样可以指定版本范围而不只是某个特定版本。
从哪里下载
可以通过命令terraform providers查看当前项目配置的插件是从哪里下载的。如下
$ terraform providersProviders required by configuration:
.
├── provider[registry.terraform.io/hashicorp/random] 3.1.0
└── provider[registry.terraform.io/hashicorp/local] 2.1.0
默认是从官方的公共仓库registry.terraform.io下载的。
如果需要指定其它仓库代码如下
terraform {required_version v1.0.11required_providers {local {source hashicorp/localversion 2.1.0}random {source hashicorp/randomversion 3.1.0}pkslowcloud {source registry.pkslow.com/examplecorp/pkslowcloudversion 0.1.0}}
}
这里pkslowcloud就是使用自定义的仓库地址执行providers命令如下
$ terraform providersProviders required by configuration:
.
├── provider[registry.terraform.io/hashicorp/local] 2.1.0
├── provider[registry.terraform.io/hashicorp/random] 3.1.0
└── provider[registry.pkslow.com/examplecorp/pkslowcloud] 0.1.0
注意pkslowcloud实际不存在大家不必尝试下载使用。
下载到什么地方
执行terraform init进行初始化就会下载插件
$ terraform initInitializing the backend...Initializing provider plugins...
- Finding hashicorp/random versions matching 3.1.0...
- Finding hashicorp/local versions matching 2.1.0...
- Installing hashicorp/random v3.1.0...
- Installed hashicorp/random v3.1.0 (signed by HashiCorp)
- Installing hashicorp/local v2.1.0...
- Installed hashicorp/local v2.1.0 (signed by HashiCorp)
执行完init命令后当前工作目录就会有一个.terraform文件夹这里就放了插件的程序。目录结构如下
$ tree -a
.
├── .terraform
│ └── providers
│ └── registry.terraform.io
│ └── hashicorp
│ ├── local
│ │ └── 2.1.0
│ │ └── darwin_amd64
│ │ └── terraform-provider-local_v2.1.0_x5
│ └── random
│ └── 3.1.0
│ └── darwin_amd64
│ └── terraform-provider-random_v3.1.0_x5
没有网络环境怎么办
在有些情况下并不能直接访问Terraform的公共仓库去下载插件如果可以从其它地方复制一份插件并可以使用那岂不是美哉Terraform已经考虑了这种需求。
首先它支持有网络环境的机器把当前目录的插件复制到特定目录命令如下
$ terraform providers mirror /Users/larry/Software/terraform/plugins
- Mirroring hashicorp/local...- Selected v2.1.0 to meet constraints 2.1.0- Downloading package for darwin_amd64...- Package authenticated: signed by HashiCorp
- Mirroring hashicorp/random...- Selected v3.1.0 to meet constraints 3.1.0- Downloading package for darwin_amd64...- Package authenticated: signed by HashiCorp
查看一下目录结构Terraform会打包好插件为zip文件
$ tree -a /Users/larry/Software/terraform/plugins
/Users/larry/Software/terraform/plugins-localdisk
└── registry.terraform.io└── hashicorp├── local│ ├── 2.1.0.json│ ├── index.json│ └── terraform-provider-local_2.1.0_darwin_amd64.zip└── random├── 3.1.0.json├── index.json└── terraform-provider-random_3.1.0_darwin_amd64.zip
下次我们可以指定插件目录实现复用
$ terraform init -plugin-dir/Users/larry/Software/terraform/pluginsInitializing the backend...Initializing provider plugins...
- Reusing previous version of hashicorp/random from the dependency lock file
- Reusing previous version of hashicorp/local from the dependency lock file
- Using previously-installed hashicorp/random v3.1.0
- Using previously-installed hashicorp/local v2.1.0
看日志可以看到Terraform不再下载而是重用插件。
执行完命令init后再查看terraform version则会显示插件的版本
$ terraform version
Terraform v1.0.11
on darwin_amd64provider registry.terraform.io/hashicorp/local v2.1.0provider registry.terraform.io/hashicorp/random v3.1.0
Terraform对于这种插件目录重用的支持不只是zip包二进制也是支持的但对应的目录结果有点不一样。这里不展开介绍了。