Если переменная дважды заключается в кавычки, и она содержит a \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 для подробная информация.