在厨师10中,我有许多设置自定义节点属性的angular色
"appname": "my_rails_app"
该属性然后用于在包装食谱中加载应用程序特定的variables。 例如,每个Rails应用程序都有不同的variables和variables数量。
app = Chef::EncryptedDataBagItem.load('deploy', node.appname)
在厨师11我的运行失败,因为'node.appname'没有设置,直到成功的厨师运行。 这意味着服务器的创build已经成为一个两步骤的过程 – 启动基础angular色,然后引导包装食谱。
我明白为什么这个行为改变了,但我很好奇如何解决这个问题,而不用重写我的食谱,仍然坚持干。
UPDATE
感谢这很有趣,但我不确定这是否有效。 例如,也取决于appname的通用部署食谱包含在my_rails_app配方中。 所以跑步看起来像
angular色 – 在哪里设置属性
"appname": "my_rails_app"
应用程序包装食谱 – 加载variables
include_recipe "deploy" app = Chef::EncryptedDataBagItem.load('deploy', node.appname)
部署食谱 – 加载SSH密钥
app = Chef::EncryptedDataBagItem.load('deploy', node.appname)
部署食谱杀死了厨师跑。
在cookbook属性文件中已经定义的默认属性可以在使用node.from_file运行的主厨客户端中再次node.from_file :
# set the attribute node.set[:appname] = "my_rails_app" # optionally reload node so attribute is available during this chef-client run node.from_file( run_context.resolve_attribute('your-railapp-cookbook', 'default') ) # and log it. Chef::Log.info( "appname [#{node[:appname]}]" )
这是从我关于使用属性的答案中抽出的部分:
如果你这样做,你可能需要考虑将节点保存回服务器,如果这是一个足够重要的检查点在你的过程中,保证额外的电话回到厨师服务器。