Façon idiomatique d'invoquer le chef-solo?

8

Quelle est la manière idiomatique d'invoquer le chef-solo? La plupart des sites le font:

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

Mais c'est long. Il y a quelques façons plus courtes de le faire auxquelles je peux penser:

  1. Une tâche de râteau ( rake chef-solo).
  2. Un petit script shell ( run-chef-solo).
  3. Un alias (peut remplacer le nom, comme chef-solo).

Quelle est la manière idiomatique de procéder? Comment les autres utilisateurs du chef invoquent-ils le chef?

Kerkeslager
la source

Réponses:

8

Par défaut, chef-sololit sa configuration /etc/chef/solo.rb. Les paramètres de ligne de commande correspondent aux valeurs de configuration qui peuvent être définies dans ce fichier. Cela se fait à l'aide de la bibliothèque 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'option est la valeur du fichier de configuration.

Le fichier de configuration réel /etc/chef/solo.rbressemblerait à:

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"

Notez également que le fichier JSON peut également être une URL distante.

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

Vous pouvez également utiliser Ohai en tant que bibliothèque dans le fichier de configuration pour détecter la plate-forme ou d'autres attributs afin de spécifier le fichier JSON à utiliser.

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"

Et puis vous auriez des fichiers JSON spécifiques à la "plateforme", par exemple. Ou vous pouvez utiliser o[:hostname], o[:domain]ou o[:fqdn]d'utiliser des fichiers JSON basé sur le nom d' hôte, domaine ou FQDN. Mais une fois que vous commencez à disposer de l'échafaudage de serveurs pour prendre en charge ce type de configuration dynamique, vous pouvez envisager d'exécuter un serveur Chef :-).

jtimberman
la source
1

@jtimberman a déjà écrit une excellente réponse. Voici ma façon personnelle d'invoquer le chef-solo. Cela permet de faire fonctionner les bases et vous devrez probablement ajouter plus d'attributs /etc/chef/node.jsonet explorer certaines des options décrites dans l'autre réponse.

# 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

Soit copiez sur vos livres de recettes dans /var/chef-solo/cookbooksou tar.gz sur un serveur Web et utilisez le recipe_urlparamètre. L'exécution chef-solosur le nœud est tout ce qui est nécessaire pour l'invoquer.

Si possible, j'essaie de tout garder solo.rbcar j'aime bien pouvoir diriger chef solo sans avoir à me rappeler d'arguments supplémentaires.

Tim Potter
la source