Преобразуйте \n к новой строке, хотя входная переменная единственная заключенный в кавычки в Марионетке

Если переменная дважды заключается в кавычки, и она содержит 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"
2
задан 5 May 2015 в 00:26
1 ответ

Мы используем бэкэнд YAML от Hiera, но я уверен, что то же самое возможно для JSON и других.

Вы можете просто отформатировать строку так, как хотите, в YAML, и Puppet с радостью примет это.

Например:

---
hiera::input: |
  my string
  with newlines
  preserved

Обратите внимание на | после имени клавиши hiera :: input . Он сообщает синтаксическому анализатору YAML, что следует рассматривать следующее значение как блок, сохраняя символы новой строки и любые другие отступы.

См. Разделы 2.3 и 8.1.2 спецификации YAML для подробная информация.

6
ответ дан 3 December 2019 в 09:16

Теги

Похожие вопросы