Terraform插件Provider管理,搜索、定义、下载
我最新最全的文章都在,欢迎大家来喝茶!
简介
最近工作中用到了terraform,权当学习记录一下,希望能帮助到其它人。
terraform系列文章如下:
terraform入门教程,示例展示管理docker和kubernetes资源
terraform插件provider管理,搜索、定义、下载
terraform模块module管理,聚合资源的抽取与复用
provider即插件
provider可理解为插件,terraform是支持多云基础设施编排的,但光terraform
这个程序只是核心功能,对于不同的云平台,需要不同的provider来支持。这样可以非常灵活的添加平台,需要aws的部署,就添加aws的provider;需要kubernetes,就添加kubernetes的功能。
其实一个provider就一个程序,它是一个独立的进程,terrafrom会跟provider通信,以完成所有功能。
搜索provider
provider分为四种:
- official:官方提供的;
- verified:官方认证的;
- community: 社区提供的;
- custom: 自定义的;
我们可以到( )去搜索,这里已经提供了极其丰富的provider,基本是够用的了。
而且每个provider都提供了很好的文档说明,如gcp:
˛
定义provider
我们可以定义需要用到哪些provider和对应的版本,新建一个versions.tf文件,内容如下:
terraform { required_version = "= v0.15.4" required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "= 2.2.0" } docker = { source = "kreuzwerker/docker" version = "= 2.12.2" } } }
版本号可以用=
或者>=
等,灵活方便。
下载provider
当我们定义好了provider和对应的版本号后,就可以通过terraform init
命令下载了。如下:
$ terraform init initializing provider plugins... - finding hashicorp/kubernetes versions matching "2.2.0"... - finding kreuzwerker/docker versions matching "2.12.2"... - installing kreuzwerker/docker v2.12.2... - installed kreuzwerker/docker v2.12.2 (self-signed, key id 24e54f214569a8a5) - installing hashicorp/kubernetes v2.2.0... - installed hashicorp/kubernetes v2.2.0 (signed by hashicorp)
这里有两个问题需要解决:
(1)它从哪里下载?
(2)它下载到什么地方去了?
对于provider的定义有一个source
值,格式如下:
[<hostname>]<namespace>/<type>
hostname是选填的,默认是官方的 registry.terraform.io
,所以它是从这个地址去下载的,当然也可以自建terraform仓库,特别是许多大公司,不会直接连外网。
那它会下载到哪里呢?以版本terraform v0.15.4 on darwin_amd64
为例,它会下载在项目当前目录下:
$ tree -a . ├── .terraform │ ├── modules │ │ └── modules.json │ └── providers │ └── registry.terraform.io │ ├── hashicorp │ │ └── kubernetes │ │ └── 2.2.0 │ │ └── darwin_amd64 │ │ └── terraform-provider-kubernetes_v2.2.0_x5 │ └── kreuzwerker │ └── docker │ └── 2.12.2 │ └── darwin_amd64 │ ├── changelog.md │ ├── license │ ├── readme.md │ └── terraform-provider-docker_v2.12.2 ├── .terraform.lock.hcl ├── main.tf ├── nginx │ ├── main.tf │ └── variables.tf └── versions.tf 13 directories, 11 files
但如果每个项目都要单独下载一次,那可是太麻烦了。我们可以把所有插件都放在同一个地方,然后通过-plugin-dir
来指定,如下:
$ rm -rf ./.terraform* $ terraform init -plugin-dir=/users/larry/software/terraform/plugins initializing provider plugins... - finding kreuzwerker/docker versions matching "2.12.2"... - finding hashicorp/kubernetes versions matching "2.2.0"... - installing kreuzwerker/docker v2.12.2... - installed kreuzwerker/docker v2.12.2 (unauthenticated) - installing hashicorp/kubernetes v2.2.0... - installed hashicorp/kubernetes v2.2.0 (unauthenticated) $ tree -a . ├── .terraform │ ├── modules │ │ └── modules.json │ ├── plugin_path │ └── providers │ └── registry.terraform.io │ ├── hashicorp │ │ └── kubernetes │ │ └── 2.2.0 │ │ └── darwin_amd64 -> /users/larry/software/terraform/plugins/registry.terraform.io/hashicorp/kubernetes/2.2.0/darwin_amd64 │ └── kreuzwerker │ └── docker │ └── 2.12.2 │ └── darwin_amd64 -> /users/larry/software/terraform/plugins/registry.terraform.io/kreuzwerker/docker/2.12.2/darwin_amd64 ├── .terraform.lock.hcl ├── main.tf ├── nginx │ ├── main.tf │ └── variables.tf └── versions.tf 13 directories, 7 files
可以看到它只是在当前目录创建了一个链接到指定plugin目录的provider上。
如果想要自己手动下载,可以到这个网址:
其实工作时用到的provider就几个,直接下载好放在plugin
目录即可。
欢迎关注微信公众号<南瓜慢说>,将持续为你更新...
多读书,多分享;多写作,多整理。