Por defecto, chef-solo
lee su configuración desde /etc/chef/solo.rb
. Los parámetros de la línea de comandos corresponden a los valores de configuración que se pueden establecer en este archivo. Esto se hace usando la 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
La 'opción' es el valor del archivo de configuración.
El archivo de configuración real /etc/chef/solo.rb
se vería así:
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"
También tenga en cuenta que el archivo JSON también puede ser una URL remota.
json_attribs "http://www.example.com/node.json"
También puede usar Ohai como biblioteca dentro del archivo de configuración, para detectar la plataforma u otros atributos para especificar qué archivo JSON usar.
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"
Y luego tendría archivos JSON específicos de "plataforma", por ejemplo. O puede usar o[:hostname]
, o[:domain]
o o[:fqdn]
usar archivos JSON basados en el nombre de host, dominio o fqdn. Pero una vez que comience a tener el andamiaje de servidores para admitir este tipo de configuración dinámica, puede considerar ejecutar un Servidor Chef :-).