如何通过这种方式定义ruby Hash?
default['mgmt']['query'] = {
'default_interval' => {'diff' => 3600, 'snapshot' => 86400 * 7},
'tables' => {
'deb_packages' => default_interval,
'rpm_packages' => default_interval,
...
}
}
编辑:以上代码适用于Chef recipe attributes/default.rb
我正在寻找一种方法来在Hash中定义default_interval但是能够被其他字段引用,以便default_interval可以被其他Chef方法覆盖,例如环境json。
这就是我不选择简单定义全局default_interval var。
的原因目前,我使用以下定义来表示default_interval
default['mgmt']['query'] = {
'default_interval' => {'diff' => 3600, 'snapshot' => 86400 * 7},
'tables' => {
'deb_packages' => {} # default_interval,
'rpm_packages' => {} # default_interval,
...
}
}
空{}
可被其他厨师手段覆盖,例如环境json,以更改为{diff: 600, snapshot:86400}
有更酷的方式吗?
答案 0 :(得分:1)
这就是我不选择简单定义全局default_interval var。
的原因
不需要,您可以定义本地变量。
default['mgmt']['query'] = {
'default_interval' => (default_interval = {'diff' => 3600, 'snapshot' => 86400 * 7}),
'tables' => {
'deb_packages' => default_interval,
'rpm_packages' => default_interval,
}
}
这种风格在红宝石中并不常见,并且保证会引起一些人的注意,但它可以满足您的需求。
答案 1 :(得分:-1)
将node
声明为
node = Hash.new { |h, k| h[k] = {} }
并且您的代码将按原样执行,从而生成您需要的结构。后者在ruby btw中被命名为“hash”。
Hash#new
接受阻止的更多信息。