Как избежать выражения Logstash sprintf в шаблоне Terraform?

Я пытаюсь создать шаблон конфигурации logstash, который использует выражение sprintf, используя файл шаблона Terraform.

Пример:

filter {
  json { source => "message" }
  geoip {
    source => "[user][rparam][ip]"
  }
  useragent {
    source => "[user][rparam][ua]"
  }
  date {
    match => [ "[@metadata][kafka][timestamp]", "UNIX_MS" ]
  }
  mutate { add_field => { "[@metadata][id]" => "%{[id]}" } }
  mutate { add_field => { "[@metadata][eid]" => "%{[eid]}" } }
  mutate { remove_field => [ "message", "id", "eid", "@version", "tags" ] }
  if "[user]" {
    mutate { remove_field => [ "[user][rparam][ip]" ] }
  }
}

К сожалению, используемые символы процента «%» также являются частью языка шаблонов Terraform, поэтому Terraform возвращает мне следующее сообщение об ошибке:

* data.template_file.logstash-output: data.template_file.logstash-output: failed to render : <template_file>:6,24-25: Invalid character; This character is not used within the language., and 1 other diagnostic(s)

Как это можно правильно избежать? Документация Terraform не дает никаких подсказок и только указывает, как экранировать интерполяционное выражение переменной ($)


person sebbulon    schedule 18.03.2019    source источник


Ответы (1)


Символ процента можно заменить двойным %%. Приведенный выше файл шаблона можно написать так, и в результате выражение Logstash sprintf будет правильно обработано:

filter {
  json { source => "message" }
  geoip {
    source => "[user][rparam][ip]"
  }
  useragent {
    source => "[user][rparam][ua]"
  }
  date {
    match => [ "[@metadata][kafka][timestamp]", "UNIX_MS" ]
  }
  mutate { add_field => { "[@metadata][id]" => "%%{[id]}" } }
  mutate { add_field => { "[@metadata][eid]" => "%%{[eid]}" } }
  mutate { remove_field => [ "message", "id", "eid", "@version", "tags" ] }
  if "[user]" {
    mutate { remove_field => [ "[user][rparam][ip]" ] }
  }
}
person sebbulon    schedule 18.03.2019