如何在Terraform中将元素用于Azure可用区

我正在尝试使用Terraform Element Function设置Azure可用区(A.A.Z),但是两次出现以下错误。由于有3个A.A.Z.我想为此使用Element,因为它可以很好地工作,如果我能弄清楚语法或我要去哪里的话。 Element会一直循环通过我想要的相同数字集,因为我的模块可能会请求3个服务器或300个服务器。下面的代码是main.tf的错误:我两次遇到错误。

    zones = "${var.avzones}" ? "${element(["1","2","3"],"${count.index + 1}")}" : ""
Error: Incorrect attribute value type

  on ..\main.tf line 283,in resource "azurerm_virtual_machine" "vm":
  283:   zones                         = "${var.avzones}" ? "${element(["1","${count.index + 1}")}" : ""

Inappropriate value for attribute "zones": list of string required.

任何想法都将不胜感激-如果我找到答案,我会回来再发布-

干杯, -Sam Kachar

LLY941020 回答:如何在Terraform中将元素用于Azure可用区

错误消息告诉我们zones参数需要一个字符串列表,但是此处给出的表达式似乎返回单个字符串。

您的目标似乎是从列表中仅选择一个区域,在这种情况下,条件表达式的两个“分支”应分别返回一个单元素列表和一个空列表:

    zones = var.avzones ? [element(["1","2","3"],count.index + 1)] : []

以上内容假设指定零个区域是有效的。否则,您可能需要使用null而不是[]来使zones参数保持未指定状态并接受远程系统选择的默认值,或者您可能需要选择合适的默认值你自己。

,

我找到了答案。

请输入正确的信息,这就是错误消息的意思,将字符串列表传递给zones属性证明是真正的PITA。我尝试了语法的每一种变化。我试图列出功能。没有。最终起作用的是拆分功能。这是我的代码现在的样子:

zones = "${var.avzones}" ? split("","${element(["1","${count.index}")}") : null

在您提出的关于我发送null而不是“”的其他评论中,更有意义,这就是我选择这样做的原因。我还没有测试。到目前为止,我仅验证了区域。我不敢相信拆分的工作原理可能有点hacker,但它完成了工作。我确认它确实按照我的意愿构建了所有区域。每次1到3。如果不能解决空值问题,我将更新我的答案...但是暂时;任何在Azure可用区中挣扎并让Terraform识别值1到3的人都可以使用我上面发布的代码。可行!

本文链接:https://www.f2er.com/3169515.html

大家都在问