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

Pau*_*och 1 ruby puppet

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

使用irb,我知道hash.to_s创建了一个可解析的单行版本hash.或者我可以使用json.我怀疑你可以打电话给to_s傀儡,但我不确定.

Puppet的stdlib有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
Run Code Online (Sandbox Code Playgroud)

Chr*_*man 7

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

$my_string = inline_template('<%= @my_hash.to_s %>')
Run Code Online (Sandbox Code Playgroud)

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