退出时出现异常
我正在写一个厨师食谱,如下所示。我希望这个配方可以停止在这之后继续执行资源,但是不会例外。退出时出现异常
除了做退出(0)?
ruby_block "verify #{current_container_name}" do
block do
require "docker"
begin
container = Docker::Container.get(current_container_name)
rescue Docker::Error::NotFoundError => exception
container = nil
end
if container.nil?
exit(0)
end
end
end
你可以在这个红宝石块中使用ignore_failure true
而不是处理异常。这样它仍然会输出错误消息,但不会将其视为失败,因此会继续执行后续资源。
如果您想在特殊情况下中止厨师运行 - 就像当前的Docker容器不可用 - 这是不可能的。解决方案是重新思考你的问题 - 你想要一些代码只有在满足特殊条件时才运行。
您可以通过离开配方(使用return true
),将配置步骤封装在条件子句中(如if my_container.nil? then ... end
)或使用节点属性来遍历条件来完成此操作。
假设你的食谱x依赖于三个食谱1,2和3.所以如果你想定义2和3只在1成功时运行,你可以写出将第一个配方导入节点属性(fe node.normal['recipe1'] = 'successful'
)。
在其他的食谱,你会再定义一个入口门,如:
return true if node['recipe1'] != 'succesful'
但要注意,如果你使用节点的属性,你需要使用ruby_block
-resource(主要是),因为bare-ruby代码在资源编译期间被评估和运行 - 这发生在收敛运行之前。
不仅留下了红宝石块,还退出了厨师 - 客户端执行没有错误。 –
我希望厨师客户只是停在这个资源(不是例外)而不是继续执行后续资源。 –