Если переменная заключена в двойные кавычки и содержит \n
$test="hello\nworld"
file { '/tmp/hello':
content => $test
}
затем создается новая строка:
/tmp/hello
hello
world
Проблема
Что делать, если ввод не заключен в двойные кавычки из-за ввода hiera или результата regsubst:
$test2=hiera("hiera::input")
file { '/tmp/hello':
content => $test2
}
приводит к:
hello\nworld
Попытка решить проблему
Предполагалось, что двойное цитирование переменной содержимого решит проблему. Ни то, ни другое:
file { '/tmp/hello':
content => "$test2"
}
ни:
file { '/tmp/hello':
content => "\"$test2\""
}
решает вопрос. Последнее приводит к:
"hello\nworld"
Вторая попытка
После прочтения была предпринята еще одна попытка этот ответ на StackOverflow.
hiera.yaml
---
bla: haha\nblabla
файл манифеста
$test=hiera('bla')
$quoted = regsubst($test, '(.*)', '"\1"')
file { '/tmp/hello':
content => $quoted
}
приводит к:
"haha\nblabla"
Мы используем бэкэнд YAML от Hiera, но я уверен, что то же самое возможно для JSON и других.
Вы можете просто отформатировать строку в YAML так, как хотите, и Puppet с радостью ее примет.
Например:
---
hiera::input: |
my string
with newlines
preserved
Обратите внимание на |
после hiera::input
ключевое имя. Он сообщает синтаксическому анализатору YAML, что следующее значение следует рассматривать как блок, сохраняя символы новой строки и любые другие отступы.
См. Разделы 2.3 и 8.1.2 спецификации YAML для получения подробной информации.