Chef infra 当命令失败时,厨师会发出通知

Chef infra 当命令失败时,厨师会发出通知,chef-infra,chef-recipe,Chef Infra,Chef Recipe,pear7 info pear/mail安装程序包时返回0退出代码,不存在时返回1。我只想在第二种情况下通知第一个操作,这就是为什么我在命令的开头添加了负数 问题是第一个块总是被执行。如果仅在未安装软件包的情况下发送通知,如何实现结果 我不能仅在时使用,或者在保护时使用不使用,因为我必须运行其他命令来向同一作业发出通知。这不是通知的工作方式。如果资源被视为“已更新”,它们将触发。对于execute,如果命令运行,则视为已更新。返回代码根本不用于通知目的。尽管你说你不能,正确的答案可能是如果/只有

pear7 info pear/mail
安装程序包时返回0退出代码,不存在时返回1。我只想在第二种情况下通知第一个操作,这就是为什么我在命令的开头添加了负数

问题是第一个块总是被执行。如果仅在未安装软件包的情况下发送通知,如何实现结果


我不能仅在时使用
,或者在
保护时使用
不使用,因为我必须运行其他命令来向同一作业发出通知。

这不是通知的工作方式。如果资源被视为“已更新”,它们将触发。对于
execute
,如果命令运行,则视为已更新。返回代码根本不用于通知目的。尽管你说你不能,正确的答案可能是如果
/
只有当
守卫时才是,否则你将需要一些自定义资源,并使用
shell\u out()
手动排序。

这不是通知的工作方式。如果资源被视为“已更新”,它们将触发。对于
execute
,如果命令运行,则视为已更新。返回代码根本不用于通知目的。尽管你说你不能,正确的答案可能是如果/
只有当
守卫时才是,否则你将需要一些自定义资源,并使用
shell\u out()
手动排序。

以下是我的处理方法。不幸的是,我无法避开警卫

execute "pear7 install mail" do
    command "pear7 install mail"
    action :nothing
end

bash "Check if pear/mail was not installed" do
    command "! (pear7 info pear/mail > /dev/null 2>&1)"
    notifies :run,"execute[pear7 install mail]", :immediately
end

仅为冒号的命令表示“不做任何事情”。需要添加一个防护装置。

以下是我如何处理它的。不幸的是,我无法避开警卫

execute "pear7 install mail" do
    command "pear7 install mail"
    action :nothing
end

bash "Check if pear/mail was not installed" do
    command "! (pear7 info pear/mail > /dev/null 2>&1)"
    notifies :run,"execute[pear7 install mail]", :immediately
end

仅为冒号的命令表示“不做任何事情”。需要添加一个防护装置。

这与“pear7 info pear/mail”中的
相同。您不需要通知,只需在
execute
资源上设置防护。我将添加额外的检查,以启动安装。这就是为什么我选择使用通知程序而不是一个守卫。在一个资源上可以有多个守卫。如果您出于某种原因坚持使用时髦的通知链接,请在
block{}
中使用
ruby_block
资源,这样在编辑时会更快、更不容易出错:)我怎么能拥有多个充当或语句而不是and的守卫?这与
not_If“pear7 info pear/mail”
相同。您不需要通知,只需在
execute
资源上设置防护。我将添加额外的检查,以启动安装。这就是为什么我选择使用通知程序而不是一个守卫。在一个资源上可以有多个守卫。如果您出于某种原因坚持使用时髦的通知链接,请将
ruby_block
资源与
block{}
一起使用,这样在编辑时会更快、更不容易出错:)我如何拥有多个充当或语句而不是and的保护?