Forma idiomática para invocar chef-solo?

9

Qual é a maneira idiomática de invocar chef-solo? A maioria dos sites faz isso:

chef-solo -c ~/solo.rb -j ~/node.json -r http://www.example.com/chef-solo.tar.gz

Mas isso é longo. Existem algumas maneiras mais curtas de fazer isso que eu posso pensar:

  1. Uma tarefa de rake ( rake chef-solo ).
  2. Um pequeno script de shell ( run-chef-solo ).
  3. Um alias (pode substituir o nome, como chef-solo ).

Qual é a maneira idiomática de fazer isso? Como outros usuários do chef estão chamando o chef?

    
por kerkeslager 25.03.2010 / 17:27

3 respostas

8

Por padrão, chef-solo lê sua configuração em /etc/chef/solo.rb . Os parâmetros da linha de comandos correspondem aos valores de configuração que podem ser definidos neste arquivo. Isso é feito usando a biblioteca mixlib-config.

  option :config_file, 
    :short => "-c CONFIG",
    :long  => "--config CONFIG",
    :default => "/etc/chef/solo.rb",
    :description => "The configuration file to use"

  option :json_attribs,
    :short => "-j JSON_ATTRIBS",
    :long => "--json-attributes JSON_ATTRIBS",
    :description => "Load attributes from a JSON file or URL",
    :proc => nil

  option :recipe_url,
      :short => "-r RECIPE_URL",
      :long => "--recipe-url RECIPE_URL",
      :description => "Pull down a remote gzipped tarball of recipes and untar it to the cookbook ca
che.",
      :proc => nil

A 'opção' é o valor do arquivo de configuração.

O arquivo de configuração atual, /etc/chef/solo.rb , seria semelhante:

file_cache_path "/tmp/chef-solo"
cookbook_path   "/tmp/chef-solo/cookbooks"
role_path       "/tmp/chef-solo/roles"
json_attribs    "/tmp/chef-solo/node.json"
recipe_url      "http://www.example.com/chef-solo.tar.gz"

Observe também que o arquivo JSON também pode ser um URL remoto.

json_attribs    "http://www.example.com/node.json"

Você também pode usar o Ohai como uma biblioteca dentro do arquivo de configuração, para detectar a plataforma ou outros atributos para especificar o arquivo JSON a ser usado.

require 'rubygems'
require 'ohai'
o = Ohai::System.new
o.all_plugins
file_cache_path "/tmp/chef-solo"
cookbook_path   "/tmp/chef-solo/cookbooks"
role_path       "/tmp/chef-solo/roles"
json_attribs    "/tmp/chef-solo/#{o[:platform]}.json"
recipe_url      "http://www.example.com/chef-solo.tar.gz"

E, em seguida, você teria arquivos JSON específicos de "plataforma", por exemplo. Ou você pode usar o[:hostname] , o[:domain] ou o[:fqdn] para usar arquivos JSON com base no nome do host, domínio ou fqdn. Mas uma vez que você comece a ter o scaffolding de servidores para suportar este tipo de configuração dinâmica, você pode procurar rodar um Servidor Chef: -).

    
por 16.04.2010 / 16:30
1

@jtimberman já escreveu uma ótima resposta. Aqui está minha maneira pessoal de invocar chef-solo. Isso faz com que o básico funcione e você provavelmente precisará adicionar mais atributos a /etc/chef/node.json e explorar algumas das opções descritas na outra resposta.

# cat > /etc/chef/solo.rb << EOF
cookbook_path    "/var/chef-solo/cookbooks"
json_attribs     "/etc/chef/node.json"
EOF

# cat > /etc/chef/node.json << EOF
{
  "run_list": ["recipe[foo]", "recipe[bar]"]
}
EOF

Copie seus livros de culinária para /var/chef-solo/cookbooks ou tar.gz em um servidor da Web e use o parâmetro recipe_url . A execução de chef-solo no nó é tudo o que é necessário para invocá-lo.

Se possível, tento manter tudo em solo.rb , já que gosto de executar chef-solo sem precisar lembrar de argumentos extras.

    
por 15.03.2012 / 02:55
0

Observe que o chef-solo está obsoleto agora em favor do modo local chef-client -z:

link

    
por 27.01.2016 / 00:26

Tags