1. 程式人生 > 其它 >Terraform外掛Provider管理,搜尋、定義、下載

Terraform外掛Provider管理,搜尋、定義、下載

我最新最全的文章都在 南瓜慢說 www.pkslow.com ,歡迎大家來喝茶!

簡介

最近工作中用到了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: 自定義的;

我們可以到( https://registry.terraform.io/browse/providers

)去搜索,這裡已經提供了極其豐富的Provider,基本是夠用的了。

而且每個Provider都提供了很好的文件說明,如GCP:https://registry.terraform.io/providers/hashicorp/google/latest/docs

˛

定義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上。

如果想要自己手動下載,可以到這個網址:https://releases.hashicorp.com/

其實工作時用到的Provider就幾個,直接下載好放在plugin目錄即可。


歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...

多讀書,多分享;多寫作,多整理。