Modo idiomatico per invocare lo chef-solo?


8

Qual è il modo idiomatico di invocare lo chef-solo? La maggior parte dei siti lo fa:

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

Ma è lungo. Ci sono alcuni modi più brevi per farlo che mi viene in mente:

  1. Un'attività rake ( rake chef-solo).
  2. Una piccola shell script ( run-chef-solo).
  3. Un alias (può sovrascrivere il nome, come chef-solo).

Qual è il modo idiomatico per farlo? In che modo gli altri utenti degli chef invocano lo chef?

Risposte:


8

Per impostazione predefinita, chef-sololegge la sua configurazione da /etc/chef/solo.rb. I parametri della riga di comando corrispondono ai valori di configurazione che possono essere impostati in questo file. Questo viene fatto usando la libreria 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

L '"opzione" è il valore del file di configurazione.

Il file di configurazione attuale /etc/chef/solo.rbsarebbe simile a:

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"

Si noti inoltre che il file JSON può essere anche un URL remoto.

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

È possibile utilizzare Ohai anche come libreria all'interno del file di configurazione, per rilevare la piattaforma o altri attributi per specificare quale file JSON utilizzare.

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 poi avresti, ad esempio, file JSON specifici della "piattaforma". Oppure si potrebbe usare o[:hostname], o[:domain]o o[:fqdn]per utilizzare i file JSON in base al nome host, dominio o fqdn. Ma una volta che inizi ad avere l'impalcatura dei server per supportare questo tipo di configurazione dinamica, potresti guardare a eseguire un Chef Server :-).


1

@jtimberman ha già scritto un'ottima risposta. Ecco il mio modo personale di invocare lo chef-solo. Questo farà funzionare le basi e probabilmente dovrai aggiungere più attributi /etc/chef/node.jsoned esplorare alcune delle opzioni descritte nell'altra risposta.

# 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

Copia i tuoi libri di cucina in /var/chef-solo/cookbookso tar.gz su un server web e usa il recipe_urlparametro. L'esecuzione chef-solosul nodo è tutto ciò che serve per invocarlo.

Se possibile, provo a tenere tutto dentro solo.rbperché mi piace poter gestire lo chef-solo senza dover ricordare argomenti aggiuntivi.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.