Instale gem 'mysql' para uso em 'chef-client'?

1

Estou tentando implantar um aplicativo rails usando o chef, para que o livro de receitas mysql crie um banco de dados, ele precisa da mysql gem. A mysql gem é instalada em todo o sistema usando um pacote do Ubuntu, mas isso não é utilizável por chef-client , que é executado a partir de /opt/chef/embedded .

Eu tentei adicionar isto:

chef_gem 'mysql' do
    action :nothing
end.run_action(:install)

Mas isso requer que o pacote libmysqlclient-dev Ubuntu seja instalado. Portanto, também adicionei isso antes do anterior:

package 'libmysqlclient-dev' do
    action :nothing
end.run_action(:install)

Mas isso é feito antes que a receita apt atualize os repositórios apt e, portanto, a instalação de libmysqlclient-dev falhe.

Esses 'hacks' parecem feios e não consigo encontrar uma maneira de executar o apt-get update no momento certo.

Alguém poderia me ajudar a encontrar o caminho certo (o mais parecido com um chef) para resolver meu problema (o problema real é criar o banco de dados usando o application cookbook)?

Atualizar

Consegui corrigir o problema com esta receita como um hack feio ... Ainda estou à procura de uma solução melhor:

execute "apt-get update" do
  ignore_failure true
  action :nothing
end.run_action(:run)

node.set['build_essential']['compiletime'] = true
include_recipe "build-essential"

%w{build-essential mysql-client libmysqlclient-dev}.each do |p|
  package p do
    action :nothing
  end.run_action(:install)
end

chef_gem 'mysql' do
  action :nothing
end.run_action(:install)
    
por Tader 08.08.2012 / 09:42

2 respostas

5

A receita de mysql::ruby permite instalar pacotes via node["mysql"]["client"]["packages"] :

Portanto, inclua-o na sua lista de execução:

run_list(
  #...
  "recipe[mysql::ruby]",
  #...
)

e especifique suas dependências nos atributos:

# this is needed for debian based systems
node["mysql"]["client"]["packages"] = ["build-essential","mysql-client","libmysqlclient-dev"]
    
por 03.10.2012 / 21:47
0

Não existe realmente um link entre o sistema de gerenciamento de pacotes Debian e o gem, então a resposta é provavelmente esta:

package "libmysqlclient-dev" do
  action :install
end

gem_package "mysql" do
  action :install
end

(O recurso chef_gem instala uma jóia, mas é apenas para instalar gemas para usar dentro de uma receita do Chef. Veja todos os detalhes sangrentos no página Recursos do Chef ).

Para manter o apt sob controle, recomendo usar o livro de receitas da Comunidade do apt Opscode e adicionar recipe[apt] ao início de a lista de execução para todos os nós.

    
por 08.08.2012 / 10:39

Tags