如何在Puppet DSL中将哈希值转换为字符串?

我有一个哈希哈希,我需要嵌入在exec资源命令中。 我的想法是将hash序列化为string并将其插入到exec callexec调用将通过ruby -e 'ruby code here'执行ruby代码。

使用irb,我知道hash.to_s创建了一个单行解析版本的hash 。 或者我可以使用json。 我怀疑你可以在木偶中召唤to_s ,但我不确定。

Puppet的stdlib有parseyamlparsejson来反序列化,但是有没有办法将序列化为可解析的string ? 我可以编写一个自定义木偶函数来完成它,但如果有的话,我更喜欢已经内置的解决方案。

更新我正在考虑定义一个木偶function。 我之前从未写过,所以我不确定语法。 这是我的第一次尝试:

 Puppet::Parser::Functions.newfunction( :serialize_hash, :arity => 2, :doc => "Serialize a hash to any depth and optionally escape the double quotes.", :type => :rvalue) do |args| hash = args[0] escape_quotes = args[1] serialized = hash.to_s if (escape_quotes) serialized.sub!(/"/, "\\\"") end serialized end 

您始终可以使用puppet模块内联执行ruby代码:

 $my_string = inline_template('<%= @my_hash.to_s %>') 

显然重要的是不要过度使用它,但是当一个非常简单的ruby函数可以实现你需要的东西时它特别有用。