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

时间:2015-02-25 20:34:13

标签: ruby puppet

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

使用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

1 个答案:

答案 0 :(得分:7)

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

$my_string = inline_template('<%= @my_hash.to_s %>')

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