如何检查厨师数据库是否存在?

前端之家收集整理的这篇文章主要介绍了如何检查厨师数据库是否存在?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想检查是否有奴隶数据库.如果有一个,并且它包含数据,那么我想为每个从属执行一个动作.

我有以下代码

slaves = data_bag('slaves')

if slaves.length > 0
   for slave in slaves
      ...xyz..
   end
end

这有效,除非数据库尚不存在.如何检查数据库是否存在?或者我这样做完全错了?

解决方法

当您尝试访问尚不存在的数据库时,Chef将引发异常,具体取决于您运行的Chef Client的类型.

例如,在Chef Solo中,您将引发一个名为Chef :: Exceptions :: InvalidDataBagPath的异常,而使用Chef Client(针对Chef服务器,将引发Net :: HTTPServerException异常,因为在API调用中找不到该对象到服务器.

所以你可以将设置包装在Ruby块中,如下所示:

slaves =  begin
            data_bag('slaves')
          rescue Net::HTTPServerException,Chef::Exceptions::InvalidDataBagPath
            [] # empty array for length comparison
          end

if slaves.length > 0
  for slave in slaves
    ...xyz..

但是,这将返回一个空数组,因为您将其用于.length比较.

如果目标是如果有任何奴隶,然后迭代它们,我会做这样的事情:

slaves =  begin
            data_bag('slaves')
          rescue Net::HTTPServerException,Chef::Exceptions::InvalidDataBagPath
            nil
          end

if slaves
  slaves.each do |slave|
    ...xyz..

如果数据包不存在,则返回nil而不是Array,如果数据包存在,它将是正确的返回,但是为空,并且仅在不为nil时才执行xyz步骤.

(我还将奴隶奴隶改为更惯用的Ruby .each迭代器.)

如果感兴趣,您可以查看数据包装载程序代码here.

猜你在找的MsSQL相关文章