gpt4 book ai didi

chef-infra - Chef Recipe 中的属性优先级

转载 作者:行者123 更新时间:2023-12-04 14:01:04 36 4
gpt4 key购买 nike

我正在尝试通过从 How to Write Reusable Chef Cookbooks, Gangnam Style 中汲取灵感来实现包装食谱.我希望在没有管理器应用程序的情况下在我的节点上安装 tomcat 7。我用以下内容创建了一个包装食谱 attributes/default.rb文件:

default["tomcat"]["base_version"] = 7
default["tomcat"]["deploy_manager_apps"] = false
tomcat/attributes/default.rb 中提供的默认属性是:
default["tomcat"]["base_version"] = 6
#other attributes
default["tomcat"]["deploy_manager_apps"] = true
default["tomcat"]["user"] = "tomcat#{node["tomcat"]["base_version"]}

我希望在所有属性中覆盖这些值。但是,诸如 ["tomcat"]["user"] 之类的属性没有被覆盖。上面还有值 tomcat6node["tomcat"]["user"] .

我是否必须覆盖所有引用 ["tomcat"]["base_version"]}" 的属性? ?如果我的 attributes/default.rb在 tomcat 食谱之前加载 default.rb这本来可以正常工作。

我正在使用 Berkshelf、Vagrant 和 Chef solo 进行开发。在 metadata.rb在我的食谱中,我提到了 depends "tomcat" .

我的定制食谱位于 https://github.com/vaibhavguptaIITD/hcentive-ops/tree/master/hc-tomcat和 tomcat 社区食谱位于 https://github.com/opscode-cookbooks/tomcat .

最佳答案

这是由于在 Chef 运行期间如何/何时评估 ruby​​ 代码。在典型的 Chef 运行中,首先按照 run_list 规定的依赖关系顺序评估属性文件,如下所述:Chef 11 In-Depth: Attributes Changes .

Chef 检测到对 tomcat 的依赖食谱并首先加载/评估它的属性。所以default["tomcat"]["user"] = "tomcat#{node["tomcat"]["base_version"]}设置为 tomcat6因为当时node["tomcat"]["base_version"]的值是 6。

稍后,Chef 会评估您的包装食谱并正确设置 node["tomcat"]["base_version"]归因于 7,但是 node["tomcat"]["user"]永远不会被重新评估。

所以你需要设置 node["tomcat"]["user"] 的值如果您想更改它的值,请在您的包装食谱中。

关于chef-infra - Chef Recipe 中的属性优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000102/

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