如何在 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 的标准库有 parseyamlparsejson 可以反序列化,但是有没有办法序列化为可解析的 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 函数就可以实现您需要的功能时,它特别有用。