Если у вас есть Puppet> = 4.5.0, теперь можно напрямую преобразовывать различные типы данных в строки в манифестах (то есть в файлах pp).Функции преобразования задокументированы здесь .
Это будет делать то, что вы хотите:
file { '/tmp/README.md':
ensure => file,
content => String($os),
}
или лучше:
file { '/tmp/README.md':
ensure => file,
content => String($facts['os']),
}
На моем MacOS X, которая приводит к файлу с:
{'name' => 'Darwin', 'family' => 'Darwin', 'release' => {'major' => '14', 'minor' => '5', 'full' => '14.5.0'}}
Посмотрите всю эту документацию, потому что есть довольно много вариантов, которые могут быть вам полезны.
КонечноЕсли вам нужны ключи внутри факта $ os,
file { '/tmp/README.md':
ensure => file,
content => $facts['os']['family'],
}
Теперь, если у вас нет последней версии Puppet и у вас нет функций преобразования строк, используйте старый способ сделать этобудет через шаблоны и встроенный Ruby (ERB), например
$os_str = inline_template("<%= @os.to_s %>")
file { '/tmp/README.md':
ensure => file,
content => $os_str,
}
Это на самом деле приводит к хэш-форматированию, немного отличающемуся от формата, так как Ruby, а не Puppet, форматирует:
{"name"=>"Darwin", "family"=>"Darwin", "release"=>{"major"=>"14", "minor"=>"5", "full"=>"14.5.0"}}