Chef recipe - 仅当用户资源执行manage_home时如何运行资源

时间:2015-02-03 16:46:57

标签: ruby chef cookbook recipe

我的食谱中有两个资源。第一个是user资源,用于设置用户uid / gid / home目录等。它使用supports :manage_home => true

我的第二个资源是bash资源。目前,该脚本在每个厨师 - 客户端运行时运行,这有点不必要。我希望脚本仅在运行用户资源时调用manage_home时运行(例如,如果用户的主目录已更改且文件被移动,则运行脚本,否则不执行任何操作)。

我只能找到使用only_if和一些纯Ruby条件的例子(例如,如果某个文件存在,如果某个节点在其运行列表中有某个元素,等等),那么我想做的事情要求将条件与另一个厨师资源的结果联系起来。我知道用户资源只运行usermod(或useradd),这似乎没有给出主目录是否被移动的任何指示。这甚至可能吗?

2 个答案:

答案 0 :(得分:3)

资源可以在任何状态变化时notify其他资源。

user "whatever" do
  action :modify
  notifies :run, "bash[modify user]", :immediately
end

您可以将资源的默认操作更改为:nothing,然后资源将仅在通知上运行。

bash "modify user" do
  command "ls"
  action :nothing
end

什么构成了状态变化"在资源内部进行控制,但如果资源采取任何操作(通过名为updated_by_last_action的资源中设置了标志),通常应该触发它。这可能不完全符合您的manage_home要求,但它比您bash一直在运行的要好。

答案 1 :(得分:0)

@马特 顺便说一下,这里只有在执行用户资源时才执行bash资源。如果使用资源是最新的,那么bash资源将无法正确执行。然后如何反转。那是bash资源只在用户资源不执行时执行??我们必须为此提供条件吗?