【问题标题】:Azure Terraform: azurerm_lb_rule should be type list, got type stringAzure Terraform:azurerm_lb_rule 应该是类型列表,得到类型字符串
【发布时间】:2020-01-18 20:47:27
【问题描述】:

我正在尝试使用元素创建一个 azure lb 规则,这是错误消息和下面列出的代码。

我应该在 main.tf 文件或 variables.tf 文件中进行哪些更改才能使元素正常工作。但是,当我直接提供端口(已注释)时,代码执行时没有任何问题。

发生了 1 个错误:

  • azurerm_lb_rule.test:发生 1 个错误:

  • azurerm_lb_rule.test:在第 3 列第 1 行:元素:参数 1 应该是类型列表,类型字符串位于:

${element(var.lb_port["${element(keys(var.lb_port), count.index)}"], 2)}

main.tf

resource "azurerm_lb_rule" "test" {
  resource_group_name            = "${azurerm_resource_group.test.name}"
  loadbalancer_id                = "${azurerm_lb.lb.id}"
  name                           = "LBRule"
  protocol                       = "Tcp"
  #frontend_port                  = 3389
  #backend_port                   = 3389
 protocol                       = "${element(var.lb_port["${element(keys(var.lb_port), count.index)}"], 0)}"
 frontend_port                  = "${element(var.lb_port["${element(keys(var.lb_port), count.index)}"], 1)}"
 backend_port                   = "${element(var.lb_port["${element(keys(var.lb_port), count.index)}"], 2)}"
  frontend_ip_configuration_name = "${var.frontend_name}"
}

variables.tf

variable "lb_port" {
  description = "Protocols to be used for lb health probes and rules."
  default     = {"var1" = "tcp,3389,3389"}
}

【问题讨论】:

  • 尝试将其投射到列表中? ${tolist(element(var.lb_port["${element(keys(var.lb_port), count.index)}"], 2))}

标签: azure terraform terraform-provider-azure


【解决方案1】:

根据您的要求,您可以将变量lb_port 定义为映射类型,然后使用lookup 函数从给定键的映射中检索单个元素的值。

例如,

variable "lb_port" {
  description = "Protocols to be used for lb health probes and rules."
   default = {
    "protocol" = "TCP"
    "frontend_port" = "3389"
    "backend_port" = "3389"
  }
}
...

resource "azurerm_lb_rule" "test" {
  resource_group_name            = "${azurerm_resource_group.test.name}"
  loadbalancer_id                = "${azurerm_lb.lb.id}"
  name                = "LBRule"
  #protocol            = "Tcp"
  #frontend_port                  = 3389
  #backend_port                   = 3389
  protocol                       = "${lookup(var.lb_port, "protocol" )}"
  frontend_port                  = "${lookup(var.lb_port, "frontend_port" )}"
  backend_port                   = "${lookup(var.lb_port, "backend_port" )}"
  frontend_ip_configuration_name = "${var.frontend_name}"
  ...
}

更多示例参考here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 2019-11-14
    • 2021-05-16
    • 2021-10-07
    • 2022-07-21
    • 2018-11-18
    • 1970-01-01
    • 2019-10-22
    相关资源
    最近更新 更多