Выражение Terraform

Я работаю над этим модулем terraform azure_rm nsg (группа сетевой безопасности), и я стараюсь сделать его максимально управляемым и универсальным. все работает, как ожидалось, но не работает один флаг.

Файл Main.tf

`resource "azurerm_network_security_rule" "Inbound" {
  count                      = length(var.inbound_port_ranges)
  name                       = "sg-rule-${count.index}"
  direction                  = "Inbound"
  access                     = "Allow"
  priority                   = element(var.priority, count.index) 
  source_address_prefix      = "*"
  source_port_range          = "*"
  destination_address_prefix = "*"
  destination_port_range     = element(var.inbound_port_ranges, count.index) 
  protocol                   = "TCP"
  resource_group_name         = azurerm_network_security_group.this.resource_group_name
  network_security_group_name = azurerm_network_security_group.this.name
}

`

Файл Variables.tf:

`variable "resource_group_name" {
  default = "test"
}
variable "priority" {
  default = ["100", "101"]
}
variable "inbound_port_ranges" {
  default = ["8000", "8001"]
}
variable "outbound_port_ranges" {
  default = ["9000", "9001"]
}
`

Мне удалось прочитать список в переменных для 'destination_port_range', но не для переменной приоритета, и он продолжал выдавать ошибку с ошибкой ниже, и я не уверен, почему?

`Error: Incorrect attribute value type

  on main.tf line 20, in resource "azurerm_network_security_rule" "Inbound":
  20:   priority                   = "element(var.priority, ${count.index})"
    |----------------
    | count.index is 1

Inappropriate value for attribute "priority": a number is required.
`

Было бы очень полезно и очень признательно, если бы кто-нибудь мог указать мне в правильном направлении, чтобы решить эту проблему. Все, что я хочу, - это читать значения из списка с индексом, чтобы я мог использовать одно и то же входящее правило для создания нескольких правил.

Заранее спасибо.


person kick07    schedule 20.12.2020    source источник
comment
отредактировал и добавил правильное решение для справки ...   -  person kick07    schedule 20.12.2020


Ответы (1)


Ваш priority - это список строк. Кроме того, это будет буквальная строка "element(var.priority, <number>)", а не фактическое число.

Это должен быть список чисел:

variable "priority" {
  default = [100, 101]
}

а потом:

priority                   = element(var.priority, count.index)

У вас будет такая же проблема с destination_port_range, насколько я могу судить.

person Marcin    schedule 20.12.2020
comment
Вы совершенно правы, @Marcin, все получилось неплохо. И, к сожалению, destination_port_range не выдает никаких ошибок, но у него есть такая же проблема, и я смог исправить ее с помощью вашего предложения. Большое спасибо. - person kick07; 20.12.2020
comment
@Arun Нет проблем. Если ответ окажется полезным, мы будем благодарны за его принятие. - person Marcin; 20.12.2020
comment
действительно принял ваш ответ. - person kick07; 20.12.2020