我有一个如下所示的属性文件:
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']
)所以我想知道如何正确地执行每个角色。
答案 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"
}
}
}