我有一个像[ recipe["git_deploy"], recipe["my_role_cookbook"] ]
这样的run_list
我在my_role_cookbook的default.rb配方中设置了git_deploy所需的属性。但是,git_deploy并没有获得这些属性。
如果我将git_deploy所需的属性放在my_role_cookbook / attributes / default.rb中,那么它可以工作。如果我把懒惰的评估放在git_deploy中 - 它也可以
如果我在my_rolecook_book/recipes/default.rb
更大的图片:我有三个环境,在my_role的角色文件中,我有这样的env_run_lists:
"production" => ["recipe[git_deploy]","recipe[my_role]"],
"staging" =>["recipe[git_deploy]","recipe[my_role]"],
"develop" => ["recipe[my_role]"]
修改
在两本烹饪书中使用debug_value
之后:
在git_deploy中使用延迟评估时(my_role_cookbook / recipe / default.rb中使用的node.override):
[2015-07-31T11:44:12+00:00] FATAL: [["set_unless_enabled?", false], ["default", :not_present], ["env_default", :not_present], ["role_default", :not_present], ["force_default", :not_present], ["normal", :not_present], ["override", :not_present], ["role_override", :not_present], ["env_override", :not_present], ["force_override", :not_present], ["automatic", :not_present]]
[2015-07-31T11:44:12+00:00] FATAL: [["set_unless_enabled?", false], ["default", :not_present], ["env_default", :not_present], ["role_default", :not_present], ["force_default", :not_present], ["normal", :not_present], ["override", "youtube-minion"], ["role_override", :not_present], ["env_override", :not_present], ["force_override", :not_present], ["automatic", :not_present]]
不使用延迟评估时(my_role_cookbook中只有node.override)
undefined method `[]' for nil:NilClass
[2015-07-31T11:45:53+00:00] FATAL: [["set_unless_enabled?", false], ["default", :not_present], ["env_default", :not_present], ["role_default", :not_present], ["force_default", :not_present], ["normal", :not_present], ["override", :not_present], ["role_override", :not_present], ["env_override", :not_present], ["force_override", :not_present], ["automatic", :not_present]]
答案 0 :(得分:0)
在运行任何配方之前,合并并评估attributes/*
内的所有文件。由于您已将git_deploy
放在首次列入运行列表中,因此它的配方会在您的运行列表之前运行。您必须使用属性文件才能在git deploy的配方之前注入属性,然后运行您的配方。或者将git_deploy作为食谱中的包含。
这是how attribute files work上有更多内容的链接。