如果有人能向我解释为什么我在不久前创建的自定义 LWRP 存在特定问题,我将不胜感激。
使用 Chef 12.3.0,我的自定义 LWRP 属性以这种方式完美定义:
attribute 'name', 'kind_of' => String, 'name_attribute' => true
attribute 'older_than', 'kind_of' => Integer, 'default' => 60
attribute 'cron_month', 'kind_of' => String, 'default' => '*'
attribute 'cron_day', 'kind_of' => String, 'default' => '*'
attribute 'cron_minute', 'kind_of' => String, 'default' => '1'
attribute 'cron_hour', 'kind_of' => String, 'default' => '3'
attribute 'log_file', 'kind_of' => String, 'default' => '/var/log/curator.log'
....
对于 Chef 12.7.2,尝试以相同方式指定“属性”会导致以下错误:
Chef::Exceptions::ValidationFailed
----------------------------------
Property older_than must be one of: {"kind_of"=>Integer, "default"=>60}! You passed 7.
LWRP 属性(以前的属性)在像上一个示例那样定义时不起作用。看来必须使用符号而不是字符串。如果我将代码转换为以下格式,则可以正常工作:
property 'name', kind_of: String, name_attribute: true
property 'older_than', kind_of: Integer, default: 60
property 'cron_month', kind_of: String, default: '*'
property 'cron_day', kind_of: String, default: '*'
property 'cron_minute', kind_of: String, default: '1'
property 'cron_hour', kind_of: String, default: '3'
property 'log_file', kind_of: String, default: '/var/log/curator.log'
....
我似乎无法弄清楚为什么这是一个问题,也无法在 Chef 更改日志中找到任何表明不再支持这种定义属性/属性的方法的内容。根据我对 Ruby 的理解,虽然我远非专家,但字符串可以用来代替符号,反之亦然。这是否有一个简单的原因,或者这可能是 Chef 中的一个错误?