【问题标题】:Reference map in locals in terraform fileterraform 文件中本地人的参考地图
【发布时间】:2018-08-04 05:39:48
【问题描述】:

在 tvfars 文件中我有这个:

locals {
    common = {
        "my key" = "value"
    }
}

因为我想在该文件的多个位置使用地图。我阅读了有关变量的 terraform 文档,但找不到正确的语法。我尝试了以下方法(var1 和 2 都被声明为映射):

  1. var1 = "${local.common}"
    var2 = "${local.common}"
    

    我明白了

    variable "var1" should be type map, got string
    
  2. var1 = locals.common
    var2 = locals.common
    

    我明白了

    invalid value "myfile.auto.tfvars" for flag -var-file-default: Error parsing myfile.auto.tfvars: At 18:15: Unknown token: 18:15 IDENT locals.common
    
  3. var1 = {"${local.common}"}
    var2 = {"${local.common}"}
    

    失败且没有错误消息,但打印 terraform 帮助和 terraform 退出。

如果我多次复制/粘贴地图,我确认一切正常:

var1 = {
     "my key" = "value"
}
var2 = {
     "my key" = "value"
}

有人知道正确的语法吗?

【问题讨论】:

    标签: terraform


    【解决方案1】:

    local 块、插值和不是常量的表达式不能在terraform.tfvars 文件中使用。

    更多讨论请见github-issue

    解决方法是在terraform.tfvars 中只定义一次变量,并在 terraform 模块文件中将重复的变量设为本地。

    示例:

    变量.tf

    variable var1 { type = "map" }

    terraform.tfvars

    var1= { "key1" = "value1", "key2" = "value2" }

    module.tf

     locals {  
        var2="${var.var1}"  
     }  
    
     output show_var2 {
        value = "${local.var2}"
     }
    

    【讨论】:

    • 这表明我不能在 tfvars 中使用局部变量,但是一旦修复,缺失的部分就是 map 的语法。你有没有机会扩大你的答案以包括那个?我认为您只需要确定 tfvars 文件的内容和将在其中声明映射的 variables.tf。
    • 我怀疑这会起作用,因为 var2 也是一个映射,但您正在为其分配一个字符串。另外,在 variable.tf 中声明 common 并在 tfvars 中给它一个值,并将 module.tf 中的 var1 和 var2 定义为 ${var.common} 不是更简单吗?
    • @Oliver 不确定“var2 是映射 .... 分配字符串”是什么意思? var1 可以分配给 var2 。也就是说,地图变量可以分配给本地块中的另一个变量。如果你想要一个额外的common 是的,但它更多地与个人喜好和风格有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2011-11-06
    • 2016-02-11
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多