Idiomatische Art, Chef-Solo aufzurufen?

8

Was ist die idiomatische Art, Chef-Solo aufzurufen? Die meisten Websites tun dies:

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

Aber das ist lang. Es gibt einige kürzere Möglichkeiten, die ich mir vorstellen kann:

  1. Eine Rechenaufgabe ( rake chef-solo).
  2. Ein kleines Shell-Skript ( run-chef-solo).
  3. Ein Alias ​​(kann den Namen wie überschreiben chef-solo).

Was ist der idiomatische Weg, dies zu tun? Wie rufen andere Kochbenutzer den Koch auf?

kerkeslager
quelle

Antworten:

8

chef-soloLiest standardmäßig die Konfiguration von /etc/chef/solo.rb. Die Befehlszeilenparameter entsprechen den Konfigurationswerten, die in dieser Datei festgelegt werden können. Dies erfolgt über die mixlib-config-Bibliothek.

  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

Die 'Option' ist der Wert der Konfigurationsdatei.

Die eigentliche Konfigurationsdatei /etc/chef/solo.rbwürde folgendermaßen aussehen:

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"

Beachten Sie auch, dass die JSON-Datei auch eine Remote-URL sein kann.

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

Sie können Ohai auch als Bibliothek in der Konfigurationsdatei verwenden, um die Plattform oder andere Attribute zu erkennen und anzugeben, welche JSON-Datei verwendet werden soll.

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"

Und dann hätten Sie zum Beispiel "plattformspezifische" JSON-Dateien. Oder Sie könnten verwenden o[:hostname], o[:domain]oder o[:fqdn]JSON - Dateien auf dem Hostnamen, Domäne oder fqdn basieren. Sobald Sie jedoch über das Gerüst von Servern verfügen, um diese Art der dynamischen Konfiguration zu unterstützen, sollten Sie einen Chef-Server ausführen :-).

jtimberman
quelle
1

@jtimberman hat bereits eine tolle Antwort geschrieben. Hier ist meine persönliche Art, Chef-Solo anzurufen. Dadurch funktionieren die Grundlagen, und Sie müssen wahrscheinlich weitere Attribute hinzufügen /etc/chef/node.jsonund einige der in der anderen Antwort beschriebenen Optionen untersuchen.

# 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

Kopieren Sie Ihre Kochbücher entweder in /var/chef-solo/cookbookseinen Webserver oder tar.gz sie auf einen Webserver und verwenden Sie den recipe_urlParameter. Das Ausführen chef-soloauf dem Knoten ist alles, was zum Aufrufen erforderlich ist.

Wenn möglich, versuche ich, alles beizubehalten, solo.rbda ich es sehr mag, Chef-Solo zu führen, ohne mich an zusätzliche Argumente erinnern zu müssen.

Tim Potter
quelle