Chef infra Chef模板渲染嵌套对象

Chef infra Chef模板渲染嵌套对象,chef-infra,chef-template,Chef Infra,Chef Template,我试图在chef模板中渲染yaml对象,它工作正常,但正如我们所知,在yaml空间中也很重要,因此它正在创建新属性 collection: <%= @collection.to_hash.to_yaml %> 预期结果是 collection: name: col1 nested: nKey: 1 取得成果 collection: --- name: col1 nested: !ruby/hash:Mash #nested is not part of col

我试图在chef模板中渲染yaml对象,它工作正常,但正如我们所知,在yaml空间中也很重要,因此它正在创建新属性

collection: <%= @collection.to_hash.to_yaml %>
预期结果是

collection:
  name: col1
  nested:
    nKey: 1
取得成果

collection: ---
  name: col1
nested: !ruby/hash:Mash #nested is not part of collection.
  nKey: 1

第二,有没有办法删除类型(
!ruby/hash:Mash
)和
--
from to_yaml函数?

您通常希望使用
to_json
,因为所有的json都是有效的yaml。这有点难看,但通常效果更好:)

我不确定您的用例。我认为最好的方法是使用文件资源,将输出作为内容(而不是模板)。至于Mash注释,您必须运行嵌套到_散列的转换,您的数据可能来自节点对象,而不是json<代码>--可能是gsub'ed(?)谢谢您的回复,我有一个来自chef server的角色。然后基于这个角色,我想呈现一个模板。除了嵌套对象外,其他一切都正常工作。这是我的全部用例。它不是生成嵌套属性,而是生成我在代码示例中显示的直接属性。很抱歉,它不适合我。我尝试了两个选项
collection:
collection:
。to_josn只提供json,但我需要YAML文件。所以它只创建了一个字符串行,它是
集合:--'{“name”:“col1”,“nested”:{“nKey”:1}}}>
,这在yaml文件中不有用:-(谢谢你这在yaml文件中很好。正如我所说的,它很难看,但可以工作。yaml是JSON的超集。
collection: ---
  name: col1
nested: !ruby/hash:Mash #nested is not part of collection.
  nKey: 1