欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Terraform插件Provider管理,搜索、定义、下载

程序员文章站 2022-06-20 08:33:59
我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人。 Terraform系列文章如下: Terraform入门教程,示例展示管理Docker和Kubernetes资源 Terraform插件 ......

我最新最全的文章都在,欢迎大家来喝茶!

简介

最近工作中用到了terraform,权当学习记录一下,希望能帮助到其它人。

terraform系列文章如下:

terraform入门教程,示例展示管理docker和kubernetes资源

terraform插件provider管理,搜索、定义、下载

terraform状态state管理,让变更有记录

terraform模块module管理,聚合资源的抽取与复用

terraform常用命令

provider即插件

provider可理解为插件,terraform是支持多云基础设施编排的,但光terraform这个程序只是核心功能,对于不同的云平台,需要不同的provider来支持。这样可以非常灵活的添加平台,需要aws的部署,就添加aws的provider;需要kubernetes,就添加kubernetes的功能。

其实一个provider就一个程序,它是一个独立的进程,terrafrom会跟provider通信,以完成所有功能。

搜索provider

provider分为四种:

  • official:官方提供的;
  • verified:官方认证的;
  • community: 社区提供的;
  • custom: 自定义的;

我们可以到( )去搜索,这里已经提供了极其丰富的provider,基本是够用的了。

Terraform插件Provider管理,搜索、定义、下载

而且每个provider都提供了很好的文档说明,如gcp:

˛Terraform插件Provider管理,搜索、定义、下载

定义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目录即可。


欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

Terraform插件Provider管理,搜索、定义、下载

多读书,多分享;多写作,多整理。