【问题标题】:How to create one variable from another variable in terraform variable.tf file?如何从 terraform variable.tf 文件中的另一个变量创建一个变量?
【发布时间】:2020-11-09 15:31:03
【问题描述】:

例如,在 variable.tf 文件中,我们有如下代码

variable "variable1" {
    type    = string
    default = "ABC"
}

variable "variable2" {
    type    = string
    default = "DEF"
}

variable "variable3" {
    type    = string
    default = "$var.variable1-$var.variable2"
}

预期输出:

变量3 = ABC-DEF

【问题讨论】:

    标签: variables terraform devops terraform-provider-azure


    【解决方案1】:

    您可以改用local

    locals {
      variable3 = var.variable1+"-"+var.variable2
    }
    

    然后调用它而不是使用var. 使用local. 像这样!

    resource "exemple" "exemple" {
    
       exemple = local.variable3
    
    }
    

    参考:https://www.terraform.io/docs/configuration/locals.html

    【讨论】:

      【解决方案2】:

      是的,我同意@Montassar,您可以使用local 块从现有资源或变量创建新表达式。但它应该像这样组合变量:

      locals {
        variable3 = "${var.variable1}-${var.variable2}"
      }
      

      它看起来像这样:

      【讨论】:

      • 是的,谢谢@Charles,您对输出格式的看法是正确的。或者我们也可以使用 HCL2 格式的 variable3 = var.variable1+"-"+var.variable2 。我编辑了答案谢谢
      • 嗨@MontassarBouagina 我尝试了您的解决方案,它引发以下错误:尚未声明名为“variable3”的输入变量。可以使用变量“variable3”{} 块声明此变量。
      • @Venki 请在我的回答中查看解决方案,它是正确的,并且会为您工作!
      • @Venki 我认为您正在使用检查您是否在代码中的任何位置使用 var.variable3 您应该使用 local.variable3 更改它
      • @Venki 不,我不这么认为,您不需要在本地进行验证,因为它将取决于 2 个其他变量,所以只需验证您的 2 个变量,就可以了
      【解决方案3】:

      据我所知,default 无法实现您想要的。

      但是,您可以创建 variable3 而只是不为其分配默认值,然后在您的调用集中 variable3 = var.variable1-var.variable2

      不确定这是否能解决您的问题,但据我所知,您想要的方式是行不通的。

      另外我建议升级到 v0.12。

      【讨论】:

      • 嗨@Berimbolinho,我尝试了上述解决方案,但对我也不起作用。
      【解决方案4】:

      你不能这样做。 Docs 明确表示:

      默认参数需要一个文字值并且不能引用配置中的其他对象。

      但您可以将locals 用于variable3

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-08
        • 1970-01-01
        • 2023-01-20
        • 1970-01-01
        • 2021-09-18
        • 2019-07-31
        相关资源
        最近更新 更多