Список карт, необходимых для спецификаций правил loabdbalancer

У меня есть файл terraform tfvars.json, как показано ниже:

{
  "loadbalancer_rule": {
    "patterns_default_loadbalancer_rule": {
      "backend_address_pool_id": null,
      "lb_rule_specs" : {
        
          "name" : "test2",
          "protocol": "tcp",
          "frontend_port": "8080",
          "backend_port": "8081",
          "frontend_ip_configuration_name": "projectname-lb-nic"
      
      },
      "load_distribution": "",
      "loadbalancer_id": null,
      "probe_id": "",
      "resource_group_name": null
    }
  }
}

Файл main.tf выглядит следующим образом:

variable "loadbalancer_rule" {
  description = "Map of loadbalancer-rule objects"
  type        = any
  default     = null
}

module "loadbalancer_rule" {
  for_each            = coalesce(var.loadbalancer_rule, {})
  source              = "../loadbalancer-rule/azurerm"
  version             = "7.0.0-2-1.0"

  backend_address_pool_id = try(each.value.backend_address_pool_id, null)
  lb_rule_specs = try(each.value.lb_rule_specs, null)
  load_distribution = try(each.value.load_distribution, "")
  loadbalancer_id = try(each.value.loadbalancer_id, null)
  probe_id = try(each.value.probe_id, "")
  resource_group_name = var.environment_resource_groups
  
}

Сам модуль main.tf выглядит следующим образом:

resource "azurerm_lb_rule" "lb_rule" {
  count                          = length(var.lb_rule_specs)
  name                           = var.lb_rule_specs[count.index]["name"]
  resource_group_name            = var.resource_group_name
  loadbalancer_id                = var.loadbalancer_id
  frontend_ip_configuration_name = var.lb_rule_specs[count.index]["frontend_ip_configuration_name"]
  protocol                       = var.lb_rule_specs[count.index]["protocol"]
  frontend_port                  = var.lb_rule_specs[count.index]["frontend_port"]
  backend_port                   = var.lb_rule_specs[count.index]["backend_port"]
  probe_id                       = var.probe_id
  load_distribution              = var.load_distribution
  backend_address_pool_id        = var.backend_address_pool_id
}

И Variables.tf, как показано ниже:

variable "lb_rule_specs" {
  description = "Load balancer rules specifications"
  type        = list(map(string))
}

variable "resource_group_name" {
  description = "Name of the resource group"
  type        = string
}

variable "loadbalancer_id" {
  description = "ID of the load balancer"
  type        = string
}

variable "backend_address_pool_id" {
  description = "Backend address pool id for the load balancer"
  type        = string
}

variable "probe_id" {
  description = "ID of the loadbalancer probe"
  type        = string
  default     = ""
}

variable "load_distribution" {
  description = "Specifies the load balancing distribution type to be used by the Load Balancer. Possible values are: Default – The load balancer is configured to use a 5 tuple hash to map traffic to available servers. SourceIP – The load balancer is configured to use a 2 tuple hash to map traffic to available servers. SourceIPProtocol – The load balancer is configured to use a 3 tuple hash to map traffic to available servers. Also known as Session Persistence, where the options are called None, Client IP and Client IP and Protocol respectively."
  type        = string
  default     = ""
}

Я пытался снять брекеты {, но, честно говоря, не мог понять, в чем проблема. Если бы файл tfvars был в правильном формате .tf, все было бы немного лучше, с json я полностью запутался.

Я получаю сообщение об ошибке, как показано ниже:

│ Error: Invalid value for module argument
│
│   on loadbalancer_rule.tf line 13, in module "loadbalancer_rule":
│   13:   lb_rule_specs = try(each.value.lb_rule_specs, null)
│
│ The given value is not suitable for child module variable "lb_rule_specs"
│ defined at .terraform/modules/loadbalancer_rule/variables.tf:1,1-25: list
│ of map of string required.

Нужна помощь в устранении ошибки.

Большое спасибо, Марчин! Оно работало завораживающе. Я не могу проголосовать за ваш ответ, но принял его. Были какие-то внутренние проблемы, поэтому не смог ответить раньше,

hungrylearnerbenicewithme 03.04.2022 15:41
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
1
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш lb_rule_specs — это list(map(string)), но вы просто передаете map(string).

Предполагая, что все остальное работает, для устранения вашей ошибки это должно быть:

lb_rule_specs = [try(each.value.lb_rule_specs, null)]

Другие вопросы по теме