2012-01-20 23 views
23

Estoy investigando qué se necesitará para migrar mis entornos de desarrollo a Vagrant y tengo problemas para manejar el proceso de provisión de VM con el chef. Nunca he usado el chef antes y los documentos Vagrant en esta área intencionalmente débiles (fuera del alcance) para poder usar una mano.Provisioning Vagrant w/Chef

me gustaría hacer esto tan portátil como sea posible, así que pensé que tenía sentido para cargar libros de cocina desde una URL así que esto es lo que trato en mi Vagrantfile:

config.vm.provision :chef_solo do |chef| 
    chef.recipe_url = 'https://github.com/opscode/cookbooks/tarball/master' 
    chef.add_recipe 'nginx' 
    chef.add_recipe 'mysql' 
    chef.add_role 'web' 

    # You may also specify custom JSON attributes: 
    # chef.json = { :mysql_password => '' } 
end 

I don' Creo que hay alguna duda de que simplemente estoy malinterpretando algo, pero no he encontrado una fuente de documentación que parezca encajar en este contexto de Vagabundo.

Gracias.

+0

En caso de que alguien ha intentado esto últimamente, el repositorio git ha cambiado a un mensaje para descargar los repositorios individuales por lo que este patrón de descarga del maestro Opscode libros de cocina sucursal ya no funciona. –

Respuesta

20

La forma en que muestra arriba sin duda funcionará bien.

Sin embargo, si va a utilizar Chef solo, recomiendo incrustar los libros de cocina directamente dentro del repositorio que va al control de versiones. Esto hace que en cada momento en el que se cometa, el archivo Vagrantfile esté alineado con las versiones adecuadas de los libros de cocina. Entonces en 2 años, cuando revises el código de hoy, los libros de cocina deberían funcionar técnicamente.

Si desea seguir esta ruta, cree un directorio, como cookbooks, que contiene los libros de cocina. Luego configure Vagrant de la siguiente manera:

config.vm.provision :chef_solo do |chef| 
    chef.cookbooks_path = "cookbooks" 
    chef.add_recipe 'nginx' 
    chef.add_recipe 'mysql' 
    chef.add_role 'web' 

    # You may also specify custom JSON attributes: 
    # chef.json = { :mysql_password => '' } 
end 
16

Desafortunadamente, no hay mucha documentación sobre Vagrant en combinación con Chef. Recomiendo echar un vistazo al uso de librarian para administrar sus libros de cocina por usted. Me suelen tener un bloque similar a esto en mi Vagrantfile:

config.vm.provision :chef_solo do |chef| 
    chef.cookbooks_path = "chef/cookbooks" 
    chef.roles_path  = "chef/roles" 

    # ... 
end 

puedo crear un nuevo directorio en la raíz de mi proyecto llamado chef y añadir las siguientes líneas a mi .gitignore:

# Ignore librarian bundled cookbooks and cache 
/chef/cookbooks 
/chef/tmp 

En el chef directorio, puede ejecutar librarian-chef init y empezar a añadir libros de cocina a la Cheffile creado en una forma que lo haría con un Gemfile:

cookbook "apt", 
    :git => "git://github.com/fnichol/chef-apt.git", 
    :ref => "cacher-client-solo-support" 

cookbook "imagemagick", "0.2.2" 

cookbook "mongodb", 
    :git => "git://github.com/edelight/chef-cookbooks.git", 
    :ref => "0.11.0" 

Obtiene los beneficios de poder especificar repositorios git, rutas de archivos y versiones para agrupar, lo cual es extremadamente útil cuando usa libros de cocina de varias fuentes. Cuando ejecuta librarian-chef install, el bibliotecario buscará todos los libros de cocina especificados y los almacenará en el directorio cookbooks, en relación con la ubicación de su Cheffile.

+0

Otra opción para bibliotecario-chef es Berkshelf. berkshelf.com. La pequeña ventaja de Berkshelf es el apoyo para desarrollar libros de cocina y usarlo para administrarlos. Esto no parece ser un caso de uso recomendado/compatible para bibliotecario-chef. – Mikezx6r

+0

esta configuración funciona perfectamente, ¡gracias! – Vamsi

0

También puede usar Berkshelf para administrar sus libros de cocina por usted. Berkshelf realmente hace que manejar libros de cocina sea fácil.

Todo lo que necesita hacer es instalar gema berkshelf, y ejecutar berks init para generar un archivo Berksfile vacío.

Hay dos maneras diferentes de agregar libros de cocina al archivo berks para resolver dependencias.

Ejemplo:

Para resolver los libros de cocina de uso supermercado:

source 'http://chefsupermarket.com' 

cookbook 'mycookbook', '~> 1.3.6' 

Para resolver del uso git:

cookbook "mycookbook", git: "https://github.com/cookbooks/mycookbook.git" 

también puede mantener libros de cocina en su directorio local y resolverlos utilizando berksfile usando:

cookbook 'mycookbook', path: '/path_to_my/chef/cookbook' 
0

Prefiero un gran repositorio monolítico con todos mis libros de cocina. Entonces no uso Bibliotecario o Berkshelf, solo Vagrant y Chef. Utilizo Chef para crear máquinas virtuales usando VirtualBox pero también para "hornear" contenedores Docker.

No veo ningún problema de portabilidad con este enfoque. Para el desarrollo local, todas mis cosas Chef están en un solo lugar ~/chef. Tengo una carpeta ~/chef/vagrant que tiene todos mis archivos Vagrant.

Mi Vagrantfile s siempre tendrá algo similar a lo siguiente.

config.vm.provision 'chef_zero' do |chef| 
    chef.environment = 'some_environment' 
    chef.cookbooks_path = '~/chef/cookbooks' 
    chef.roles_path = '~/chef/roles' 
    chef.data_bags_path = '~/chef/data_bags' 
    chef.encrypted_data_bag_secret_key_path = '~/chef/chef_key' 
    chef.environments_path = '.' 
    chef.nodes_path = '~/chef/nodes' 
    chef.add_recipe 'motd' 
    chef.add_recipe '..' 
    chef.version = '12.14.89' 
    # chef.log_level = 'debug' 
    end 
Cuestiones relacionadas