我有一个案例,我正在尝试在 Chef 中创建systemd_unit来创建服务。创建服务后(假设它不是最新的),我想启动它,然后只有当服务刚刚创建时,我才想调用 bash 脚本来对其执行一些初始化。
我从这个开始:
systemd_unit 'mysvc.service' do
content({
.
.
.
})
action [ :create ]
notifies :run, 'bash[mysvc.init]', :delayed
end
bash 'mysvc.init' do
code <<-CODE
.
.
.
CODE
action :nothing
end
systemd_unit 'mysvc.service' do
action [ :enable, :start ]
end
我在这里的期望是,如果 :create 在systemd_unit上运行,我的 bash 脚本将执行。由于 bash 脚本被标记为 :nothing,因此它不会运行任何其他时间。
不幸的是,这不是我得到的行为。实际发生的是,如果systemd_unit的 :create 或 [ :enable, :start] 块被执行,那么我的 bash 脚本就会运行。这不起作用,因为如果我已经初始化了服务中的数据,则尝试重新初始化将失败。
如何让我的 bash 脚本仅在新创建服务时运行?
这不是我们真正支持的事情。updated?
标志(在内部为通知提供支持)故意含糊不清,对于每个资源意味着不同的东西,但通常每当资源执行任何操作时,它都会计为已更新。这加剧了这样一个事实,即看起来我们在systemd_unit
的实现上搞砸了,并直接使用资源名称而不是名称属性:(我至少会得到一张票来解决这个问题,以备将来使用。