如何在Puppet DSL中将哈希值转换为字符串?
我有一个哈希哈希,我需要嵌入在exec
资源命令中。 我的想法是将hash
序列化为string
并将其插入到exec call
。 exec
调用将通过ruby -e 'ruby code here'
执行ruby代码。
使用irb,我知道hash.to_s
创建了一个单行解析版本的hash
。 或者我可以使用json。 我怀疑你可以在木偶中召唤to_s
,但我不确定。
Puppet的stdlib有parseyaml
和parsejson
来反序列化,但是有没有办法将序列化为可解析的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函数可以实现你需要的东西时它特别有用。