Como verificar se existe uma base de dados do chef?

5

Eu quero verificar se existe um banco de dados de escravos. Se houver um e contiver dados, quero executar uma ação para cada escravo.

Eu tenho o seguinte código:

slaves = data_bag('slaves')

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

Isso funciona, exceto quando o banco de dados ainda não existe. Como posso verificar se o banco de dados existe ainda? Ou estou fazendo isso completamente errado?

    
por galgalesh 16.04.2015 / 12:02

1 resposta

6

Quando você tenta acessar um banco de dados que ainda não existe, o Chef irá levantar uma exceção, dependendo do tipo de Chef Client que você está executando.

Por exemplo, no Chef Solo, você levantará uma exceção chamada Chef::Exceptions::InvalidDataBagPath , enquanto que com o Chef Client (contra um Chef Server, uma exceção Net::HTTPServerException será gerada, pois o objeto não é encontrado em uma chamada API para o servidor.

Assim, você pode colocar a configuração em um bloco Ruby, assim:

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..

No entanto, isso retorna uma matriz vazia, já que você a está usando para a comparação .length .

Se o objetivo é que, se houver qualquer escravos, então iterar sobre eles, eu faria algo assim:

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

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

Isso retorna um nil no caso do pacote de dados não existir, em vez de um Array, que seria o retorno correto no caso do pacote de dados existir, mas está vazio e só executará o xyz etapas, se não nil .

(Eu também alterei o for slave in slaves para o mais idiomático Ruby .each iterator.)

Você pode ver o código do carregador de saco de dados aqui se interessado.

    
por 16.04.2015 / 15:09

Tags