Терраформирование соответствует нескольким условиям в одном условном

#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" }