Instalando algo da fonte usando o chef, eu deveria estar fazendo algumas verificações

2

Estou instalando algo da fonte usando o chef e o recurso de script. Devo estar fazendo uma verificação do executável resultante etc. como parte disso?

por exemplo. O que eu tenho atualmente é:

remote_file "/tmp/foo.tar.gz" do
  source "foo.tar.gz"
  mode "0644"
end

script "install_foo" do
  interpreter "bash"
  user "root"
  cwd "/tmp"
  code <<-EOH
  tar -zxf foo.tar.gz
  cd foo
  make
  cp foo /usr/local/bin
  EOH
end
    
por DEfusion 05.08.2011 / 12:58

3 respostas

0

Este script sairá com 1 if foo não existe e, portanto, não pode ser copiado. Se chef manejar corretamente scripts que não saem com sucesso (código de saída 0 ), você não precisaria de outra verificação, mas se isso não ocorresse, eu recomendaria strongmente a criação de um.

Não posso verificar o comportamento de chef neste momento, mas é fácil testar isso: coloque um exit 1 como a última linha do seu script e veja o que acontece.

De qualquer forma, como a verificação de um arquivo existente não é difícil, por que não fazê-lo simplesmente, apenas para estar no lado seguro?

    
por 05.08.2011 / 13:42
0

Você definitivamente deve usar um metaparameter not_if ou only_if para o recurso de script, caso contrário, o Chef executará o script sempre que for executado no nó. Dependendo do software que você está compilando, isso pode ser tão simples quanto a existência do arquivo, ou que é um tamanho diferente de zero, ou tão complexo quanto verificar se o comando copiado em / usr / local / bin produz alguma string em particular .

Por exemplo, se você quiser ver se o arquivo simplesmente existe e assumir o melhor:

script "install_foo" do
  # .. other stuff you wrote!
  not_if "test -x /usr/local/bin/foo"
end

Você provavelmente deve ter certeza de que o arquivo é executável, já que você o coloca em / usr / local / bin.

file "/usr/local/bin/foo" do
  mode 0755
end

Se você quiser verificar se o comando tem alguma saída específica, você pode fazer algo como:

script "install_foo" do
  # .. other stuff you wrote!
  not_if "test -x /usr/local/bin/foo && /usr/local/bin/foo | grep -x 'foo is awesome'"
end

(assumindo que executar o foo teria essa saída, é claro).

Os metapâmetros not_if (e only_if) podem receber uma string ou um bloco Ruby. Se for uma string, então serão comandos shell executados no sistema. Se for um bloco Ruby (do .. end ou {}), então ele será executado como Ruby.

Meta-parâmetros são documentados no wiki do Chef sob a página "recursos" .

    
por 25.09.2011 / 08:11
0

Eu prefiro usar os utilitários Chef :: Mixin :: ShellOut como neste post link

Eu rodaria o comando com o parâmetro right para verificar seu número de versão (-v na maioria dos casos [?]), desta forma você está checando duas coisas:

  1. a compilação não apenas funcionou, mas criou um binário que é executado
  2. você tem a versão que espera ter

porque ter um arquivo não é suficiente para assumir que o binário é executado e que é a versão que você espera

    
por 13.12.2015 / 15:39