如何在 Puppet DSL 中将散列值转换为字符串?
How do I turn a hash to a string in Puppet DSL?
我有 hash
个散列,我需要将其嵌入到 exec
资源命令中。我的想法是将 hash
序列化为 string
并将其插入到 exec call
中。 exec
调用将通过 ruby -e 'ruby code here'
.
执行 ruby 代码
使用 irb,我知道 hash.to_s
创建了 hash
的单行可解析版本。或者我可以使用 json。我怀疑你可以在 puppet 中调用 to_s
,但我不确定。
Puppet 的标准库有 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
您始终可以执行与人偶模块内联的 ruby 代码:
$my_string = inline_template('<%= @my_hash.to_s %>')
显然不要过度使用它很重要,但是当一个非常简单的 ruby 函数就可以实现您需要的功能时,它特别有用。
我有 hash
个散列,我需要将其嵌入到 exec
资源命令中。我的想法是将 hash
序列化为 string
并将其插入到 exec call
中。 exec
调用将通过 ruby -e 'ruby code here'
.
使用 irb,我知道 hash.to_s
创建了 hash
的单行可解析版本。或者我可以使用 json。我怀疑你可以在 puppet 中调用 to_s
,但我不确定。
Puppet 的标准库有 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
您始终可以执行与人偶模块内联的 ruby 代码:
$my_string = inline_template('<%= @my_hash.to_s %>')
显然不要过度使用它很重要,但是当一个非常简单的 ruby 函数就可以实现您需要的功能时,它特别有用。