Terraform外掛Provider管理,搜尋、定義、下載
我最新最全的文章都在 南瓜慢說 www.pkslow.com ,歡迎大家來喝茶!
簡介
最近工作中用到了Terraform,權當學習記錄一下,希望能幫助到其它人。
Terraform系列文章如下:
Terraform入門教程,示例展示管理Docker和Kubernetes資源
Terraform外掛Provider管理,搜尋、定義、下載
Terraform模組Module管理,聚合資源的抽取與複用
Provider即外掛
Provider可理解為外掛,Terraform是支援多雲基礎設施編排的,但光terraform
其實一個Provider就一個程式,它是一個獨立的程序,terrafrom會跟Provider通訊,以完成所有功能。
搜尋Provider
Provider分為四種:
- Official:官方提供的;
- Verified:官方認證的;
- Community: 社群提供的;
- Custom: 自定義的;
我們可以到( https://registry.terraform.io/browse/providers
而且每個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
目錄即可。
歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...
多讀書,多分享;多寫作,多整理。