我的食谱中有两个资源。第一个是user
资源,用于设置用户uid / gid / home目录等。它使用supports :manage_home => true
。
我的第二个资源是bash
资源。目前,该脚本在每个厨师 - 客户端运行时运行,这有点不必要。我希望脚本仅在运行用户资源时调用manage_home
时运行(例如,如果用户的主目录已更改且文件被移动,则运行脚本,否则不执行任何操作)。
我只能找到使用only_if
和一些纯Ruby条件的例子(例如,如果某个文件存在,如果某个节点在其运行列表中有某个元素,等等),那么我想做的事情要求将条件与另一个厨师资源的结果联系起来。我知道用户资源只运行usermod
(或useradd
),这似乎没有给出主目录是否被移动的任何指示。这甚至可能吗?
答案 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资源只在用户资源不执行时执行??我们必须为此提供条件吗?