【问题标题】:Input variable for terraform provider versionterraform 提供程序版本的输入变量
【发布时间】:2020-11-26 03:11:31
【问题描述】:

在 CI/CD 上下文中,我想使用 TF_VAR_ environment variables 在我的 terraform 配置之外定义提供程序版本。

我正在尝试使用输入变量在versions.tf(terraform 0.12)中设置 helm 提供程序的版本,但似乎不允许:

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 提供程序版本?

【问题讨论】:

标签: terraform


【解决方案1】:

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

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

https://www.terraform.io/docs/configuration/terraform.html

【讨论】:

    【解决方案2】:

    正如@thekbb 所说,至少在0.12.20 期间,在terraform init 期间无法访问版本变量。但是,我有以下解决方法来管理您的配置之外的提供程序。

    您可以将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")
      }
    }
    

    然后,在您的 resourcedata 提供程序中,您可以指向特定的提供程序,如下所示::

    data "some_ds" "example" {
      name = "dummy"
      provider = helm.helm-stable
    }
    

    更多详情,请参考以下链接::

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 2021-03-29
      • 2020-08-28
      • 2021-05-03
      • 2021-09-24
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多