Chef 食谱 - 如何 运行 仅当用户资源 manage_home 时才使用资源

Chef recipe - how to run a resource only if user resource did manage_home

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

我的第二个资源是 bash 资源。目前脚本 运行 在每个 chef-client 运行 上都有,这有点不必要。我希望脚本 运行 仅当 运行 调用用户资源时调用 manage_home (例如 运行 如果用户的主目录已更改且文件已更改,则脚本搬过来,否则什么都不做)。

我只能找到在某些纯 Ruby 条件下使用 only_if 的示例(例如,如果某个文件存在,如果节点在其 运行 列表等),但我想做的是将条件链接到另一个厨师资源的结果。我知道用户资源只是 运行s usermod(或 useradd),它似乎没有给出主目录是否被移动的任何指示。那么这可能吗?

资源能够在任何状态更改时notify其他资源。

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

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

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

构成 "state change" 的内容在资源内部受到控制,但如果资源采取任何操作,通常应该触发它(这在资源中设置了一个名为 updated_by_last_action 的标志).这可能不完全符合您的 manage_home 要求,但总比您的 bash 运行ning 要好。

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