【发布时间】:2020-11-16 07:46:36
【问题描述】:
我需要调用一个配方并传递给它特定的属性数据,比如:
include_recipe [nginx::passenger['my_attributeA' => 'foobar' , 'my_attributeB' => 'foofii']
即在我的包装器中,我必须将数据传递给一个被调用的说明书。
谢谢
【问题讨论】:
标签: attributes chef-infra recipe
我需要调用一个配方并传递给它特定的属性数据,比如:
include_recipe [nginx::passenger['my_attributeA' => 'foobar' , 'my_attributeB' => 'foofii']
即在我的包装器中,我必须将数据传递给一个被调用的说明书。
谢谢
【问题讨论】:
标签: attributes chef-infra recipe
属性赋值不需要传递参数;相反,您需要在包含所需配方之前重载该属性。
在包含其他依赖说明书之前,在依赖说明书中设置的属性将为merged。
如果属性优先级相同,则合并该数据。如果数组中的属性值优先级不同,则替换该数据。对于所有其他值类型(如字符串、整数等),该数据将被替换。
【讨论】:
chef 中的节点属性是全局变量,您应该通过在属性文件中设置它们来做到这一点:
my_cookbook/attributes/default.rb:
default['my_attributeA'] = 'foobar'
default['my_attributeB'] = 'foofii'
my_cookbook/recipe/default.rb:
include_recipe "nginx::passenger"
my_cookbook/metadata.rb:
name "my_coobook"
version "1.2.3"
depends "nginx"
注意,通常你会在你的包装器中设置节点属性,如 default['nginx']['some_nginx_cookbook_attribute'] 来控制 nginx 食谱,你可能不会设置像 default['my_attributeA'] 这样任意的东西。
【讨论】: