加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:59:49 所属栏目:MsSql教程 来源:网络整理
导读:我想检查是否有奴隶数据库.如果有一个,并且它包含数据,那么我想为每个从属执行一个动作. 我有以下代码: slaves = data_bag('slaves')if slaves.length 0 for slave in slaves ...xyz.. endend 这有效,除非数据库尚不存在.如何检查数据库是否存在?或者我这样
我想检查是否有奴隶数据库.如果有一个,并且它包含数据,那么我想为每个从属执行一个动作.

我有以下代码:

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读