Если вы используете Terraform 0.12.20 или более поздней версии, вы можете использовать новую функцию can
, чтобы кратко написать чек, подобный этому:
%{ for location in jsondecode(locations) }
location ${location.path} {
%{ if can(location.proxy_set_header) }
proxy_set_header ${location.proxy_set_header};
%{ endif }
}
%{ endfor }
can
Функция возвращает значение true, если данное выражение может вычисляться без ошибки.
В документации действительно рекомендуется использовать try
в большинстве случаев, но в этой конкретной ситуации ваша цель - показать вообще ничего, если этот атрибут отсутствует, и поэтому этот эквивалентный подход с try
, я думаю, сложнее понять для будущего читателя:
%{ for location in jsondecode(locations) }
location ${location.path} {
${ try("proxy_set_header ${location.proxy_set_header};", "") }
}
%{ endfor }
А также быть (субъективно) более непрозрачно для намерения, это игнорирует рекомендацию в документах try
использовать его только с поиском атрибутов и выражениями преобразования типов. Поэтому я думаю, что использование can
выше оправдано из-за его относительной ясности, но любой способ должен работать.