Recommend switch from ~/.terraformrc to 3rd-party plugin dir
* Switch tutorials from using ~/.terraformrc to using the 3rd-party plugin directory so 3rd-party plugins can be pinned * Continue to show using terraform-provider-ct v0.2.2. Updating to a newer version is only safe once all managed clusters are v1.12.2 or higher
This commit is contained in:
parent
64b4c10418
commit
42c523e6a2
|
@ -16,6 +16,9 @@ Notable changes between versions.
|
||||||
* Enable CoreDNS `loop` and `loadbalance` plugins ([#340](https://github.com/poseidon/typhoon/pull/340))
|
* Enable CoreDNS `loop` and `loadbalance` plugins ([#340](https://github.com/poseidon/typhoon/pull/340))
|
||||||
* Fix pod-checkpointer log noise and checkpointable pods detection ([#346](https://github.com/poseidon/typhoon/pull/346))
|
* Fix pod-checkpointer log noise and checkpointable pods detection ([#346](https://github.com/poseidon/typhoon/pull/346))
|
||||||
* Use kubernetes-incubator/bootkube v0.14.0
|
* Use kubernetes-incubator/bootkube v0.14.0
|
||||||
|
* [Recommend](https://typhoon.psdn.io/topics/maintenance/#terraform-plugins-directory) switching from `~/.terraformrc` to the Terraform [third-party plugins](https://www.terraform.io/docs/configuration/providers.html#third-party-plugins) directory `~/.terraform.d/plugins/`.
|
||||||
|
* Allows pinning `terraform-provider-ct` and `terraform-provider-matchbox` versions
|
||||||
|
* Improves safety of later plugin version migrations
|
||||||
|
|
||||||
#### Azure
|
#### Azure
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ Module versioning ensures `terraform get --update` only fetches the desired vers
|
||||||
|
|
||||||
Maintain Terraform configs for "live" infrastructure in a versioned repository. Seek to organize configs to reflect resources that should be managed together in a `terraform apply` invocation.
|
Maintain Terraform configs for "live" infrastructure in a versioned repository. Seek to organize configs to reflect resources that should be managed together in a `terraform apply` invocation.
|
||||||
|
|
||||||
You may choose to organize resources all together, by team, by project, or some other scheme. Here's an example that manages four clusters together:
|
You may choose to organize resources all together, by team, by project, or some other scheme. Here's an example that manages clusters together:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
.git/
|
.git/
|
||||||
|
|
|
@ -21,20 +21,12 @@ $ terraform version
|
||||||
Terraform v0.11.7
|
Terraform v0.11.7
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system.
|
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system to `~/.terraform.d/plugins/`, noting the final name.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
sudo mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct /usr/local/bin/
|
mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct ~/.terraform.d/plugins/terraform-provider-ct_v0.2.1
|
||||||
```
|
|
||||||
|
|
||||||
Add the plugin to your `~/.terraformrc`.
|
|
||||||
|
|
||||||
```
|
|
||||||
providers {
|
|
||||||
ct = "/usr/local/bin/terraform-provider-ct"
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
||||||
|
@ -64,6 +56,10 @@ provider "aws" {
|
||||||
shared_credentials_file = "/home/user/.config/aws/credentials"
|
shared_credentials_file = "/home/user/.config/aws/credentials"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
provider "ct" {
|
||||||
|
version = "0.2.1"
|
||||||
|
}
|
||||||
|
|
||||||
provider "local" {
|
provider "local" {
|
||||||
version = "~> 1.0"
|
version = "~> 1.0"
|
||||||
alias = "default"
|
alias = "default"
|
||||||
|
|
|
@ -24,20 +24,12 @@ $ terraform version
|
||||||
Terraform v0.11.7
|
Terraform v0.11.7
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system.
|
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system to `~/.terraform.d/plugins/`, noting the final name.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
sudo mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct /usr/local/bin/
|
mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct ~/.terraform.d/plugins/terraform-provider-ct_v0.2.1
|
||||||
```
|
|
||||||
|
|
||||||
Add the plugin to your `~/.terraformrc`.
|
|
||||||
|
|
||||||
```
|
|
||||||
providers {
|
|
||||||
ct = "/usr/local/bin/terraform-provider-ct"
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
||||||
|
@ -62,6 +54,10 @@ provider "azurerm" {
|
||||||
alias = "default"
|
alias = "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
provider "ct" {
|
||||||
|
version = "0.2.1"
|
||||||
|
}
|
||||||
|
|
||||||
provider "local" {
|
provider "local" {
|
||||||
version = "~> 1.0"
|
version = "~> 1.0"
|
||||||
alias = "default"
|
alias = "default"
|
||||||
|
|
|
@ -113,28 +113,20 @@ $ terraform version
|
||||||
Terraform v0.11.7
|
Terraform v0.11.7
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the [terraform-provider-matchbox](https://github.com/coreos/terraform-provider-matchbox) plugin binary for your system.
|
Add the [terraform-provider-matchbox](https://github.com/coreos/terraform-provider-matchbox) plugin binary for your system to `~/.terraform.d/plugins/`, noting the final name.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
wget https://github.com/coreos/terraform-provider-matchbox/releases/download/v0.2.2/terraform-provider-matchbox-v0.2.2-linux-amd64.tar.gz
|
wget https://github.com/coreos/terraform-provider-matchbox/releases/download/v0.2.2/terraform-provider-matchbox-v0.2.2-linux-amd64.tar.gz
|
||||||
tar xzf terraform-provider-matchbox-v0.2.2-linux-amd64.tar.gz
|
tar xzf terraform-provider-matchbox-v0.2.2-linux-amd64.tar.gz
|
||||||
sudo mv terraform-provider-matchbox-v0.2.2-linux-amd64/terraform-provider-matchbox /usr/local/bin/
|
mv terraform-provider-matchbox-v0.2.2-linux-amd64/terraform-provider-matchbox ~/.terraform.d/plugins/terraform-provider-matchbox_v0.2.2
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system.
|
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system to `~/.terraform.d/plugins/`, noting the final name.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
sudo mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct /usr/local/bin/
|
mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct ~/.terraform.d/plugins/terraform-provider-ct_v0.2.1
|
||||||
```
|
|
||||||
|
|
||||||
Add the plugin to your `~/.terraformrc`.
|
|
||||||
|
|
||||||
```
|
|
||||||
providers {
|
|
||||||
matchbox = "/usr/local/bin/terraform-provider-matchbox"
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
||||||
|
@ -149,12 +141,17 @@ Configure the Matchbox provider to use your Matchbox API endpoint and client cer
|
||||||
|
|
||||||
```tf
|
```tf
|
||||||
provider "matchbox" {
|
provider "matchbox" {
|
||||||
|
version = "0.2.2"
|
||||||
endpoint = "matchbox.example.com:8081"
|
endpoint = "matchbox.example.com:8081"
|
||||||
client_cert = "${file("~/.config/matchbox/client.crt")}"
|
client_cert = "${file("~/.config/matchbox/client.crt")}"
|
||||||
client_key = "${file("~/.config/matchbox/client.key")}"
|
client_key = "${file("~/.config/matchbox/client.key")}"
|
||||||
ca = "${file("~/.config/matchbox/ca.crt")}"
|
ca = "${file("~/.config/matchbox/ca.crt")}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
provider "ct" {
|
||||||
|
version = "0.2.1"
|
||||||
|
}
|
||||||
|
|
||||||
provider "local" {
|
provider "local" {
|
||||||
version = "~> 1.0"
|
version = "~> 1.0"
|
||||||
alias = "default"
|
alias = "default"
|
||||||
|
|
|
@ -21,20 +21,12 @@ $ terraform version
|
||||||
Terraform v0.11.7
|
Terraform v0.11.7
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system.
|
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system to `~/.terraform.d/plugins/`, noting the final name.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
sudo mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct /usr/local/bin/
|
mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct ~/.terraform.d/plugins/terraform-provider-ct_v0.2.1
|
||||||
```
|
|
||||||
|
|
||||||
Add the plugin to your `~/.terraformrc`.
|
|
||||||
|
|
||||||
```
|
|
||||||
providers {
|
|
||||||
ct = "/usr/local/bin/terraform-provider-ct"
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
||||||
|
@ -63,6 +55,10 @@ provider "digitalocean" {
|
||||||
alias = "default"
|
alias = "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
provider "ct" {
|
||||||
|
version = "0.2.1"
|
||||||
|
}
|
||||||
|
|
||||||
provider "local" {
|
provider "local" {
|
||||||
version = "~> 1.0"
|
version = "~> 1.0"
|
||||||
alias = "default"
|
alias = "default"
|
||||||
|
|
|
@ -21,20 +21,12 @@ $ terraform version
|
||||||
Terraform v0.11.7
|
Terraform v0.11.7
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system.
|
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system to `~/.terraform.d/plugins/`, noting the final name.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
sudo mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct /usr/local/bin/
|
mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct ~/.terraform.d/plugins/terraform-provider-ct_v0.2.1
|
||||||
```
|
|
||||||
|
|
||||||
Add the plugin to your `~/.terraformrc`.
|
|
||||||
|
|
||||||
```
|
|
||||||
providers {
|
|
||||||
ct = "/usr/local/bin/terraform-provider-ct"
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
Read [concepts](/architecture/concepts/) to learn about Terraform, modules, and organizing resources. Change to your infrastructure repository (e.g. `infra`).
|
||||||
|
@ -65,6 +57,10 @@ provider "google" {
|
||||||
region = "us-central1"
|
region = "us-central1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
provider "ct" {
|
||||||
|
version = "0.2.1"
|
||||||
|
}
|
||||||
|
|
||||||
provider "local" {
|
provider "local" {
|
||||||
version = "~> 1.0"
|
version = "~> 1.0"
|
||||||
alias = "default"
|
alias = "default"
|
||||||
|
|
|
@ -126,3 +126,70 @@ Typhoon supports multi-controller clusters, so it is possible to upgrade a clust
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
Typhoon does not support or document node replacement as an upgrade strategy. It limits Typhoon's ability to make infrastructure and architectural changes between tagged releases.
|
Typhoon does not support or document node replacement as an upgrade strategy. It limits Typhoon's ability to make infrastructure and architectural changes between tagged releases.
|
||||||
|
|
||||||
|
### Terraform Plugins Directory
|
||||||
|
|
||||||
|
Use the Terraform 3rd-party [plugin directory](https://www.terraform.io/docs/configuration/providers.html#third-party-plugins) `~/.terraform.d/plugins` to keep versioned copies of the `terraform-provider-ct` and `terraform-provider-matchbox` plugins. The plugin directory replaces the `~/.terraformrc` file to allow 3rd party plugins to be defined and versioned independently (rather than globally).
|
||||||
|
|
||||||
|
```
|
||||||
|
# ~/.terraformrc (DEPRECATED)
|
||||||
|
providers {
|
||||||
|
ct = "/usr/local/bin/terraform-provider-ct"
|
||||||
|
matchbox = "/usr/local/bin/terraform-provider-matchbox"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Migrate to using the Terraform plugin directory. Move `~/.terraformrc` to a backup location.
|
||||||
|
|
||||||
|
```
|
||||||
|
mv ~/.terraformrc ~/.terraform-backup
|
||||||
|
```
|
||||||
|
|
||||||
|
Add the [terraform-provider-ct](https://github.com/coreos/terraform-provider-ct) plugin binary for your system to `~/.terraform.d/plugins/`. Download the **same version** of `terraform-provider-ct` you were using with `~/.terraformrc`, updating only be done as a followup and is **only** safe for v1.12.2+ clusters!
|
||||||
|
|
||||||
|
```sh
|
||||||
|
wget https://github.com/coreos/terraform-provider-ct/releases/download/v0.2.1/terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
|
tar xzf terraform-provider-ct-v0.2.1-linux-amd64.tar.gz
|
||||||
|
mv terraform-provider-ct-v0.2.1-linux-amd64/terraform-provider-ct ~/.terraform.d/plugins/terraform-provider-ct_v0.2.1
|
||||||
|
```
|
||||||
|
|
||||||
|
If you use bare-metal, add the [terraform-provider-matchbox](https://github.com/coreos/terraform-provider-matchbox) plugin binary for your system to `~/.terraform.d/plugins/`, noting the versioned name.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
wget https://github.com/coreos/terraform-provider-matchbox/releases/download/v0.2.2/terraform-provider-matchbox-v0.2.2-linux-amd64.tar.gz
|
||||||
|
tar xzf terraform-provider-matchbox-v0.2.2-linux-amd64.tar.gz
|
||||||
|
mv terraform-provider-matchbox-v0.2.2-linux-amd64/terraform-provider-matchbox ~/.terraform.d/plugins/terraform-provider-matchbox_v0.2.2
|
||||||
|
```
|
||||||
|
|
||||||
|
Binary names are versioned. This enables the ability to upgrade different plugins and have clusters pin different versions.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ tree ~/.terraform.d/
|
||||||
|
/home/user/.terraform.d/
|
||||||
|
└── plugins
|
||||||
|
├── terraform-provider-ct_v0.2.1
|
||||||
|
└── terraform-provider-matchbox_v0.2.2
|
||||||
|
```
|
||||||
|
|
||||||
|
In each Terraform working directory, set the version of each provider.
|
||||||
|
|
||||||
|
```
|
||||||
|
# providers.tf
|
||||||
|
|
||||||
|
provider "matchbox" {
|
||||||
|
version = "0.2.2"
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "ct" {
|
||||||
|
version = "0.2.1"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Run `terraform init` to ensure plugin version requirements are met. Verify `terraform plan` does not produce a diff, since the plugin versions should be the same as previously.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ terraform init
|
||||||
|
$ terraform plan
|
||||||
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue