terraform提供程序版本的输入变量

terraform提供程序版本的输入变量,terraform,Terraform,在CI/CD上下文中,我想使用TF\u VAR\uu在terraform配置之外定义提供者版本 我试图使用输入变量在versions.tf(terraform 0.12)中设置helm provider的版本,但这似乎是不允许的: Error: Invalid provider_requirements syntax on versions.tf line 3, in terraform: 3: helm = "${var.helm_version}"

在CI/CD上下文中,我想使用
TF\u VAR\uu
在terraform配置之外定义提供者版本

我试图使用输入变量在
versions.tf
(terraform 0.12)中设置helm provider的版本,但这似乎是不允许的:

Error: Invalid provider_requirements syntax

  on versions.tf line 3, in terraform:
   3:     helm = "${var.helm_version}"

provider_requirements entries must be strings or objects.


Error: Variables not allowed

  on versions.tf line 3, in terraform:
   3:     helm = "${var.helm_version}"

Variables may not be used here.
我如何配置它


如果不可能,我如何在配置之外管理terraform provider版本?

无法完成。我希望能做到
terraforminit
解析并下载提供程序,此时您将无法访问变量

每个地形块可以包含许多与地形相关的设置 地形的行为。在地形块内,只有常量值 可以使用;参数不能引用命名对象,例如 资源、输入变量等,并且可能不使用任何地形 语言内置函数


正如@thekbb所说,至少在
0.12.20
中,在
terraforminit
期间不可能访问版本变量。但是,我在下面介绍了在您的配置之外管理提供程序的变通方法

您可以将
alias
与提供程序配置一起使用来实现这一点。假设您想要
1.3.0
版本的
helm
。您可以使用下面的别名静态地定义它,而不是将其作为var传递

provider "helm" {
  alias = "helm-stable"
  version = "1.3.0" (the version you pass via TF_VAR_helm_version)
  kubernetes {
    host     = "https://104.196.242.174"
    username = "ClusterMaster"
    password = "MindTheGap"

    client_certificate     = file("~/.kube/client-cert.pem")
    client_key             = file("~/.kube/client-key.pem")
    cluster_ca_certificate = file("~/.kube/cluster-ca-cert.pem")
  }
}
然后,在
资源
数据
提供程序中,您可以指向特定的提供程序,如下所示:

data "some_ds" "example" {
  name = "dummy"
  provider = helm.helm-stable
}
有关更多详细信息,请参阅以下链接:


您是否尝试过在要求的提供商块中执行此操作?还没有,但我认为这不是0.13版中的最佳方式该死,我认为在阅读文档后,不可能实现您的目标。