gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:00 25 4
gpt4 key购买 nike

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

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

我只能找到在某些纯 Ruby 条件下使用 only_if 的示例(例如,如果某个文件存在,如果节点在其运行列表中有某个元素,等等),但我想做的是将条件链接到另一个 Chef 资源的结果。我知道用户资源只是运行 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

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

关于ruby - Chef Recipe - 仅当用户资源执行 manage_home 时如何运行资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com