【问题标题】:Chef template render nested objectChef 模板渲染嵌套对象
【发布时间】:2018-07-25 06:49:29
【问题描述】:

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

collection: <%= @collection.to_hash.to_yaml %>

collection 是一个 json 对象

collection = { "name": "col1", "nested": { "nKey": 1 } }

预期结果是

collection:
  name: col1
  nested:
    nKey: 1

得到结果

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

其次,有什么方法可以从 to_yaml 函数中删除类型(!ruby/hash:Mash)和---

【问题讨论】:

  • 我不确定您的用例。我认为最好的办法是使用带有 to_yaml 输出的文件资源作为内容(而不是模板)。至于 Mash 注释,您必须运行嵌套的 to_hash 转换,您的数据可能来自节点对象,而不是 json。 --- 可以被 gsub'ed(?)
  • 感谢您的回复,我有厨师服务器的一个角色。然后基于该角色,我想渲染一个模板。除嵌套对象外,一切正常。这是我的整个用例。正如我在代码示例中展示的那样,它不是创建嵌套属性,而是创建直接属性。

标签: chef-infra chef-template


【解决方案1】:

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

【讨论】:

  • 对不起,它不适合我。我尝试了collection: &lt;%= @collection.to_json %&gt;collection: &lt;%= @collection.to_json.to_yaml %&gt; 这两个选项。 to_josn 只提供 json 但我需要 YAML 文件。所以它只创建一个字符串行 collection: --- '{ "name": "col1", "nested": { "nKey": 1 } }' %&gt; 这在 yaml 文件中没有用:-( 谢谢
  • 这在 YAML 文件中很好。正如我所说,它很丑但有效。 YAML 是 JSON 的超集。
猜你喜欢
  • 1970-01-01
  • 2017-09-19
  • 2014-03-15
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多