使用角色JSON覆盖Chef多级属性文件

时间:2017-05-11 01:56:20

标签: json ruby chef

我有一个如下所示的属性文件:

default['ftp_provision']['vsftpd']['pasv_ip']                = "192.168.0.10"

其中第一个属性是cookbook名称,第二个是程序,第三个是我想要更改的选项,在模板.erb文件中实现为:

pasv_ip=<%node['ftp_provision']['vsftpd']['pasv_ip']%>

这正如预期的那样正常工作。 但是,我想添加一个角色来根据多个节点的需要更改这些属性。我正在使用knife role create ftp_node1执行以下操作:

"default_attributes": {
"ftp_provision" => {"ftp_provision" => "vsftpd" => "pasv_ip" => "192.168.0.10"}
 },

我不断收到语法错误。我能够看到的所有示例都引用了从Ruby DSL制作JSON文件,只有一层深度的属性(例如default['key']['value'])所以我想知道如何正确地执行每个角色。

1 个答案:

答案 0 :(得分:0)

你需要为此使用实际的JSON,并且不确定你对一个深度的意思。这将创建一个深度为3或4级的哈希值,具体取决于您的计算方式。我没有看到进一步使用属性的问题,并且通过default['really']['freakin']['long']['strings']['of'] = attributes

看到了很多野菜

我看了一下大厨的例子,他们在那里使用ruby的哈希格式而不是json,而且创建哈希的方法让rubocop发出尖叫声并说它已被弃用了。我当然可以看到这个例子会误导你。

在构建json时使用linter,这是一个https://jsonlint.com/

我认为这可能适合你:

{
    "ftp_provision": {
        "vsftpd": {
            "pasv_ip": "192.168.0.10"
        }
    }
}