Как использовать элемент для зон доступности Azure в Terraform - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь установить зону доступности Azure (AAZ) с помощью функции элемента Terraform, но дважды получаю следующую ошибку. Поскольку есть 3 AAZ, я бы хотел использовать 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", "2", "3"], "${count.index + 1}")}" : ""

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

Любые идеи будут с благодарностью - если я найду ответ, я вернусь и напишу -

Приветствия, -Сэм Качар

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Я нашел ответ.

Мартин, вы правы, это то, о чем говорилось в сообщении об ошибке, и получение списка строк в свойстве zone оказалось настоящей PITA. Я перепробовал все варианты синтаксиса. Я попробовал функцию tolist. Ничего. То, что в конечном итоге сработало, было функцией Split. Вот как теперь выглядит мой код:

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

Мартин: другой комментарий, который ты сделал о том, что я посылаю ноль вместо "", имеет больше смысла, и именно это я и решил сделать. Я еще не проверял это. Я только до сих пор проверил зоны. Я не мог поверить, когда разделение сработало, это может быть немного хакерским, но он сделал свою работу. Я подтвердил, что он действительно построил все зоны так, как я хочу. С 1 по 3 каждый раз. Если ноль не сработает, я обновлю свой ответ ... но сейчас;любой, кто борется с Зонами доступности Azure и заставляет Terraform распознавать значения 1-3, использует код, который я разместил выше. Это работает!

0 голосов
/ 04 ноября 2019

Сообщение об ошибке говорит нам, что аргумент zones ожидает список строк, но приведенное здесь выражение, кажется, возвращает одну строку.

Похоже, ваша цель состоит в том, чтобы выбрать только однузона из списка, и в этом случае два «плеча» условного выражения должны возвращать одноэлементный список и пустой список соответственно:

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

Вышеприведенное предполагает, что оно действительно для нуляуказанные зоны. Если нет, вам может потребоваться использовать null вместо [], чтобы оставить аргумент zones неопределенным и принять значение по умолчанию, выбранное удаленной системой, или вам может потребоваться выбрать подходящее значение по умолчанию самостоятельно.

...