什么是' converge_by'

时间:2016-02-06 07:09:22

标签: chef

我是$geocode_stats = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?address=$placename&sensor=false"); 的新手,刚开始使用chefmachine资源。

在做大量阅读的同时,我找到了一个术语LWRP。这是什么意思?

2 个答案:

答案 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使用它来识别和跳过实际修改系统状态的操作。