Nombre del proveedor: chef_solo

El aprovisionador Vagrant Chef Solo le permite aprovisionar al huésped usando Cocinero, específicamente con Chef Solo.

Chef Solo es ideal para personas que ya tienen experiencia con Chef, ya tienen libros de cocina de Chef o están buscando aprender Chef. Específicamente, esta página de documentación no explicará cómo usar Chef o cómo escribir libros de cocina de Chef, ya que Chef es un sistema completo que está más allá del alcance de una sola página de documentación.

Advertencia: Si aún no está familiarizado con Chef y Vagrant, le recomiendo comenzar con el aprovisionador de shell. Sin embargo, si ya se siente cómodo con Vagrant, Vagrant es la mejor manera de aprender Chef.

Opciones

Esta sección enumera el conjunto completo de opciones disponibles para el aprovisionador Chef Solo. Más abajo de esta sección encontrará ejemplos más detallados de cómo utilizar el aprovisionador.

  • cookbooks_path (cadena o matriz): una lista de rutas a las que se almacenan los libros de cocina. Por defecto, esto es “libros de cocina”, esperando una carpeta de libros de cocina relativa a la ubicación de Vagrantfile.

  • data_bags_path (cadena o matriz): una ruta donde se almacenan las bolsas de datos. De forma predeterminada, no se establece ninguna ruta de bolsa de datos. Se requiere Chef 12 o superior para usar la opción de matriz. Chef 11 y versiones inferiores solo aceptan un valor de cadena.

  • environments_path (cadena): una ruta donde se encuentran las definiciones de entorno. De forma predeterminada, no se establece ninguna carpeta de entornos.

  • nodes_path (cadena o matriz): una lista de rutas donde se almacenan los objetos de nodo (en formato JSON). De forma predeterminada, no se establece ninguna ruta de nodo.

  • environment (cadena): el entorno del que desea que forme parte Chef. Esto requiere Chef 11.6.0 o posterior, y que environments_path Está establecido.

  • recipe_url (cadena): URL a un archivo de libros de cocina que Chef descargará y usará.

  • roles_path (cadena o matriz): una lista de rutas donde se definen los roles. De forma predeterminada, está vacío. Los directorios de roles múltiples solo son compatibles con Chef 11.8.0 y versiones posteriores.

  • synced_folder_type (cadena): el tipo de carpetas sincronizadas que se utilizarán al compartir los datos necesarios para que el aprovisionador funcione correctamente. De forma predeterminada, esto utilizará el tipo de carpeta sincronizada predeterminada. Por ejemplo, puede configurarlo en “nfs” para usar carpetas sincronizadas con NFS.

Además de todas las opciones enumeradas anteriormente, el aprovisionador Chef Solo admite las opciones comunes para todos los aprovisionadores Chef.

Especificación de una lista de ejecución

La forma más sencilla de comenzar con el aprovisionador Chef Solo es simplemente especificar un lista de ejecución. Esto se parece a:

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
    chef.add_recipe "apache"
  end
end

Esto hace que Vagrant ejecute Chef Solo con el libro de cocina “apache”. Los libros de cocina de forma predeterminada se buscan en el directorio “libros de cocina” en relación con la raíz de su proyecto. La estructura del directorio termina luciendo así:

$ tree
.
|-- Vagrantfile
|-- cookbooks
|   |-- apache
|       |-- recipes
|           |-- default.rb

El orden de las llamadas a add_recipe especificará el orden de la lista de ejecución. Recetas anteriores agregadas con add_recipe se ejecutan antes de que se agreguen recetas posteriores.

Ruta de libros de cocina personalizados

En lugar de utilizar el directorio predeterminado “libros de cocina”, también se puede establecer una ruta de libros de cocina personalizada a través de la cookbooks_path directiva de configuración:

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = "my_cookbooks"
  end
end

La ruta puede ser relativa o absoluta. Si es relativo, es relativo a la raíz del proyecto.

El valor de configuración también puede ser una matriz de rutas:

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = ["cookbooks", "my_cookbooks"]
  end
end

Roles

Vagrant también admite el aprovisionamiento con Roles de chef. Esto se hace especificando una ruta a una carpeta de roles donde se definen los roles y agregando roles a su lista de ejecución:

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
    chef.roles_path = "roles"
    chef.add_role("web")
  end
end

Al igual que la ruta de los libros de cocina, la ruta de los roles es relativa a la raíz del proyecto si se proporciona una ruta relativa.

El valor de configuración también puede ser una matriz de rutas en Chef 11.8.0 y versiones posteriores. En versiones anteriores de Chef, solo se usa la primera ruta.

Nota: El nombre del archivo de rol debe ser el mismo que el nombre del rol. Por ejemplo el web El rol debe estar en el roles_path como web.json o web.rb. Esto es requerido por el propio Chef y no es una limitación impuesta por Vagrant.

Bolsas de datos

Bolsas de datos también son compatibles con el aprovisionador Chef Solo. Esto se hace especificando una ruta a su directorio de bolsas de datos:

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
    chef.data_bags_path = "data_bags"
  end
end

Datos JSON personalizados

Se pueden pasar datos de configuración adicionales para los atributos de Chef a Chef Solo. Esto se hace configurando el json propiedad con un hash Ruby (objeto similar a un diccionario), que se convierte a JSON y se pasa a Chef:

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
    # ...

    chef.json = {
      "apache" => {
        "listen_address" => "0.0.0.0"
      }
    }
  end
end

Se pueden usar hashes, matrices, etc. con el objeto de configuración JSON. Básicamente, cualquier cosa que se pueda convertir limpiamente en JSON funciona.

Nombre de nodo personalizado

Puede especificar un nombre de nodo personalizado configurando el node_name propiedad. Esto es útil para libros de cocina que pueden depender de que se establezca en algún tipo de valor. Ejemplo:

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
    chef.node_name = "foo"
  end
end