我需要在hash
资源命令中嵌入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
?我可以编写一个自定义木偶函数来完成它,但如果有的话,我更喜欢已经内置的解决方案。
更新 我正在考虑定义一个木偶功能。我之前从未写过,所以我不确定语法。这是我的第一次尝试:
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
答案 0 :(得分:7)
您始终可以使用puppet模块内联执行ruby代码:
$my_string = inline_template('<%= @my_hash.to_s %>')
显然重要的是不要过度使用它,但是当一个非常简单的ruby函数可以实现你需要的东西时它特别有用。