gpt4 book ai didi

ruby - Chef LW 资源属性默认值如何引用另一个属性?

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:02 24 4
gpt4 key购买 nike

我正在尝试将一个资源属性的默认值设置为另一个属性的值。

我正在为我正在构建的 tomcat 说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。

以下不符合我的预期:

attribute :name,         :kind_of => String, :required => true, :name_attribute => true
attribute :service_name, :kind_of => String, :default => :name

注意第二行末尾的“:default => :name”。当我在 Recipe 的新 block 中引用我的资源时

my_tomcat "install tomcat" do
name "foo_bar"
end

属性值被分配为

 name = "foo_bar"
service_name = "name"

这不是我所期望的。除非明确设置,否则我希望 service_name 为“foo_bar”。

我试过了

attribute :service_name, :kind_of => String, :default => new_resource.name
attribute :service_name, :kind_of => String, :default => @new_resource.name

但那些不能编译。

有没有办法做我想做的事?

最佳答案

因为那些是类级别的方法,你需要使用 lazy 属性:

attribute :service_name, kind_of: String, default: lazy { |r| r.name }

还值得注意的是:

attribute :name, kind_of: String, required: true, name_attribute: true

完全是多余的。这是默认...

关于ruby - Chef LW 资源属性默认值如何引用另一个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24025950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com