退出时出现异常

问题描述:

我正在写一个厨师食谱,如下所示。我希望这个配方可以停止在这之后继续执行资源,但是不会例外。退出时出现异常

除了做退出(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而不是处理异常。这样它仍然会输出错误消息,但不会将其视为失败,因此会继续执行后续资源。

+0

我希望厨师客户只是停在这个资源(不是例外)而不是继续执行后续资源。 –

如果您想在特殊情况下中止厨师运行 - 就像当前的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代码在资源编译期间被评估和运行 - 这发生在收敛运行之前。

+0

不仅留下了红宝石块,还退出了厨师 - 客户端执行没有错误。 –