💬

[Terraform小ネタ] 文字列をifしたい

2021/09/05に公開

タイトルの通りです。文字列でifできます。

以下の記事の実装後にifを使ったのですが
https://zenn.dev/shogomuranushi/articles/faf1344cf4886a

以下のループの中で、特定のケースで is_recovery の通知をしたくないケースが出てきました。しかし、ループでいい感じに共通化してしまったので何とか「特定の条件の時は」ができないか調べました。

hcl
%{ for app in var.apps ~}
{{#is_match "service" "${app}"}}
  {{#is_alert}} @pagerduty-${app} {{/is_alert}}
  {{#is_recovery}} @pagerduty-${app} {{/is_recovery}}
{{/is_match}}
%{ endfor ~}

ありました。 var.is_recoverytrue だったら {{#is_recovery}} @pagerduty-${app} {{/is_recovery}} を挿入。 true 以外だったら 何も入れない という表現をしています。

% で区切っているのがミソみたいです。

hcl
%{ for app in var.apps ~}
{{#is_match "service" "${app}"}}
  {{#is_alert}} @pagerduty-${app} {{/is_alert}}
  %{ if var.is_recovery == true }{{#is_recovery}} @pagerduty-${app} {{/is_recovery}}%{ else }%{ endif }
{{/is_match}}
%{ endfor ~}

特定の変数がnullの場合は以下のように書くことも可能です(以下公式サンプル)

"Hello, %{ if var.name != "" }${var.name}%{ else }unnamed%{ endif }!"

https://www.terraform.io/docs/language/expressions/strings.html

以上、文字列でifする方法でした。

Discussion