Cómo aprovisionar una máquina virtual vagabunda con Chef y un archivo .rb lleno de instrucciones

Cómo aprovisionar una máquina virtual vagabunda con Chef y un archivo .rb lleno de instrucciones

Probablemente me equivoqué en todo el concepto: tengo una máquina virtual Vagrant en funcionamiento con Ubuntu 12.04, además quiero instalar algunos paquetes y archivos de configuración. Los tengo configurados en Chef, en la ruta cookbooks/my_project/recipes tengo un archivo vagrant-dev.rb con todas las instrucciones. Ahora mi configuración de Vagrant en Vagrantfile debe ser el problema aquí:

config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "cookbooks/my_project/recipes"
    chef.add_recipe "vagrant-dev.rb"
end

y cuando cargo la VM me sale

FATAL: Chef::Exceptions::CookbookNotFound: Cookbook vagrant-dev.rb not found.

Lo intenté sin el .rb al final. Supongo que es un asunto completamente diferente y no lo estoy usando de la manera correcta. Pero después de buscar no pude encontrar nada que explicara cómo hacerlo correctamente.

Respuesta1

Al usar chef, todas las recetas.debeestar en libros de cocina. Parece que ya lo tienes en un libro de cocina y simplemente lo estás llamando mal, pero lo cubriré todo para que puedas volver a comprobarlo.

Los libros de cocina son literalmente solo una colección de archivos rb de recetas, algunos metadatos y, opcionalmente, algunos otros archivos (como plantillas o bolsas de datos). Por lo tanto, no puede incluir el archivo .rb directamente, debe hacer referencia a su libro de recetas y luego al nombre del archivo (sin .rb) para ejecutarlo.

La estructura de un libro de cocina simple debería verse así:

SomeCookbook
    readme.md # needed for the long_description in metadata to work
    metadata.rb # contains the actual information for the cookbook
    recipes # Holds all the cookbook's recipies
        default.rb # This is the default recipe, run if one isn't specified
        otherRecipe.rb
    templates # Templates that can be called by the cookbook
        default
            some-erb-style-template.erb

El nombre del directorio principal no importa y el directorio de plantillas es opcional.

metadata.rb

name             "SomeCookbook"
maintainer       "Me"
maintainer_email "[email protected]"
license          "None"
description      "Does something cool"
long_description IO.read(File.join(File.dirname(__FILE__), 'readme.md'))
version          "0.0.1"

supports "centos"

Siga la estructura anterior y asegúrese de colocar su receta en la carpeta de recetas.
Luego agregue esto a su archivo vagabundo:

chef.add_recipe "SomeCookbook::vagrant-dev"

Espero que lo anterior aclare un poco las cosas.

información relacionada