我是$geocode_stats = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?address=$placename&sensor=false");
的新手,刚开始使用chef
和machine
资源。
在做大量阅读的同时,我找到了一个术语LWRP
。这是什么意思?
答案 0 :(得分:10)
如果您编写自己的纯ruby代码,在LWRP中修改系统,那么您希望使用converge_by包装该代码。它做了两件事,它保护包装的代码,使其在为什么运行模式下不运行。它会自动将资源标记为在运行时更新。
为了使您正在编写的资源具有幂等性(并且不会在每次运行时报告为更新),您通常应该将converge_by包装在对幂等性的检查中。
类似于:
use_inline_resources
action :doit do
unless File.exist("/tmp/doit")
converge_by("creating /tmp/doit") do
FileUtils.touch("/tmp/doit")
end
end
end
当然,核心厨师资源已经为您完成了大部分工作,因此对于该示例,其更好地编写如下:
use_inline_resources
action :doit do
file "/tmp/doit"
end
这表明你的第一选择应该是用其他资源组成动作,第二种选择通常是编写自己的converge_by代码。
答案 1 :(得分:2)
融合意味着“bring the system state in line with a defined policy”。您将在代码块周围看到converge_by
,这些代码块将实际执行操作以安排您的系统。
why-run
使用它来识别和跳过实际修改系统状态的操作。