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目錄即可。


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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM