#if-statement #terraform #hcl
#если-заявление #терраформирование #hcl
Вопрос:
У меня есть 4 env, qa и dev используют один идентификатор, uat и prod используют другой. Я пытаюсь сделать, если еще, в основном, если env-разработчик или qa, используйте id1, в противном случае используйте id2. Это то, что я пытался:
locals{ endpoint_id = "${var.env == "dev" || "qa" ? "id1" : "id2"}" }
И вот что я получаю:
Error: Invalid operand │ │ on ssm-parameters.tf line 2, in locals: │ 2: endpoint_id = "${var.env == "dev" || "qa" ? "id1" : "id2"}" │ │ Unsuitable value for right operand: a bool is required.
Очевидно, я не могу сделать «ИЛИ» здесь. Как бы я поступил с этим? Спасибо.
Ответ №1:
Как насчёт:
locals{ endpoint_id = length(regexall("dev|qa", var.env)) gt; 0 ? "id1" : "id2" }
Это проверит , var.env
соответствует ли либо dev
или qa
, выводом будет список, если есть какое-то совпадение, список будет содержать по крайней мере один элемент и ноль в противном случае.
Комментарии:
1. Спасибо, это сработало!
Ответ №2:
Это должно быть логическое выражение с обеих сторон оператора or ||
. Я не знаю ни одного языка программирования, на котором ваш синтаксис был бы допустим. Это должно было бы выглядеть так:
locals{ endpoint_id = var.env == "dev" || var.env == "qa" ? "id1" : "id2" }
Это происходит потому, что логический оператор или применяется к логическому выражению слева от него, а не к строковому значению слева. Я добавил скобки здесь, чтобы помочь визуализировать это:
locals{ endpoint_id = (var.env == "dev") || (var.env == "qa") ? "id1" : "id2" }