如何使用多个版本的Terraform提供者
这让我们从helm2平滑地过渡到helm3,同时使新部署立即使用helm3,从而减少了技术债务的累积。
当然,您对于大多数提供商都可以采用相同的方法。
我们是如何解决这个问题的
因此,想法是下载特定版本的提供程序(在我这里是helm 0.10.6),并将其移动到Terraform默认使用的文件系统镜像之一。关键部分是重命名我们的插件二进制文件。在zip中,我们可以找到terraform-provider-helm_v0.10.6
,但我们将其重命名为terraform-provider-helm2_v0.10.6
。
PLUGIN_PATH=/usr/share/terraform/plugins/registry.terraform.io/hashicorp/helm2/0.10.6/linux_amd64
mkdir -p $PLUGIN_PATH
curl -sLo_ 'https://releases.hashicorp.com/terraform-provider-helm/0.10.6/terraform-provider-helm_0.10.6_linux_amd64.zip'
unzip -p _ 'terraform-provider-helm*' > ${PLUGIN_PATH}/terraform-provider-helm2_v0.10.6
rm _
chmod 755 ${PLUGIN_PATH}/terraform-provider-helm2_v0.10.6
当我们声明两个提供商插件时
我们可以使用来自文件系统镜像的hashicorp/helm2
插件,并让terraform直接下载最新的hashicorp/helm
提供商,它使用helm3
terraform {
required_providers {
helm2 = {
source = "hashicorp/helm2"
}
helm = {
source = "hashicorp/helm"
version = ">= 2.0.0"
}
}
}
# you will find the doc here https:
provider "helm2" {
install_tiller = false
namespace = "kube-system"
kubernetes {
...
}
}
# you will find the doc at latest version https:
provider "helm" {
kubernetes {
...
}
}
在初始化terraform时,你会发现
- Finding latest version of hashicorp/helm...
- Finding latest version of hashicorp/helm2...
- Installing hashicorp/helm v2.0.2...
- Installed hashicorp/helm v2.0.2 (signed by HashiCorp)
- Installing hashicorp/helm2 v0.10.6...
- Installed hashicorp/helm2 v0.10.6 (unauthenticated)
使用方法
从这一点来看,它非常简单。默认情况下,helm资源将选择我们更新的helm提供程序v2.0.2。旧资源(helm_repository
和helm_releases
在我们的情况下)必须显式地使用provider = helm2
。完成迁移后,您可以删除它以使用默认的helm提供程序。