2012-01-20 16 views
23

Sto scavando in quello che servirà per migrare i miei ambienti di sviluppo in Vagrant e sto avendo qualche problema a gestire il processo di provisioning VM con lo chef. Non ho mai usato lo chef prima e i documenti Vagrant in quest'area sono intenzionalmente deboli (fuori dal campo di applicazione), quindi ho potuto usare una mano.Provisioning Vagrant w/Chef

Mi piacerebbe fare questo il più portabile possibile, così ho pensato che avesse senso per caricare libri di cucina da un URL quindi questo è quello che sto cercando nel mio 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' Penso che ci sia qualche domanda che sto semplicemente fraintendendo qualcosa, ma non ho trovato una fonte di documentazione che sembra adattarsi a questo contesto Vagrant.

Grazie.

+0

Nel caso in cui qualcuno ha provato questo ultimamente, il repo git è cambiato a un messaggio per scaricare le singole repos così questo modello di scaricare l'Opscode maestro libri di cucina ramo non funziona più. –

risposta

20

Il modo in cui si mostra sopra funzionerà sicuramente bene.

Tuttavia, se hai intenzione di utilizzare Chef solo, ti consiglio di incorporare i libri di cucina direttamente nel repository che entra nel controllo della versione. Ciò consente di allineare Vagrantfile con le versioni corrette dei libri di cucina in qualsiasi momento del tempo in cui commetti. Quindi, in 2 anni quando si controlla il codice da oggi, i libri di cucina dovrebbero ancora funzionare tecnicamente.

Se si desidera percorrere questa rotta, creare una directory, ad esempio cookbooks, che contiene i ricettari. Quindi configura Vagrant in questo modo:

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

Sfortunatamente, non c'è molta documentazione su Vagrant in combinazione con Chef. Ti consiglio di dare un'occhiata all'utilizzo di librarian per gestire i tuoi libri di cucina per te. Io in genere hanno un blocco simile a questo nel mio Vagrantfile:

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

    # ... 
end 

ho creare una nuova directory nella radice del mio progetto chiamato chef e aggiungere le seguenti righe alla mia .gitignore:

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

Nel chef directory, è possibile eseguire librarian-chef init e iniziare ad aggiungere libri di cucina al creato Cheffile in un modo si farebbe 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" 

Ottieni i vantaggi di poter specificare repository, percorsi di file e versioni di bundle che sono estremamente utili quando si utilizzano libri di cucina da più fonti. Quando esegui il librer librarian-chef install, recuperi tutti i libri di cucina specificati e li memorizza nella directory cookbooks, in relazione alla posizione di Cheffile.

+0

Un'altra opzione per lo chef-bibliotecario è Berkshelf. berkshelf.com. Il minore vantaggio di Berkshelf è il supporto per lo sviluppo di libri di cucina e il suo utilizzo per gestirli. Questo non sembra essere un caso d'uso consigliato/supportato per il bibliotecario-chef. – Mikezx6r

+0

questa installazione funziona perfettamente, grazie! – Vamsi

0

Puoi anche utilizzare Berkself per gestire i tuoi libri di cucina per te. Berkshelf rende davvero facile la gestione dei libri di cucina.

Tutto quello che devi fare è installare la gem di berkshelf e lanciare berks init per generare un Berksfile vuoto.

Ci sono un paio di modi diversi per aggiungere libri di cucina al file berks per risolvere le dipendenze.

Esempio:

Per risolvere libri di cucina da un uso supermercato:

source 'http://chefsupermarket.com' 

cookbook 'mycookbook', '~> 1.3.6' 

Per risolvere dall'uso git:

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

si può anche tenere libri di cucina nella directory locale e risolvere utilizzando berksfile usando:

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

Preferisco un grande archivio monolitico con tutti i miei libri di cucina. Quindi non uso Bibliotecario o Berkshelf, solo Vagrant e Chef. Uso Chef per creare VM utilizzando VirtualBox ma anche per "cuocere" i contenitori Docker.

Non vedo alcun problema di portabilità con questo approccio. Per lo sviluppo locale tutte le mie cose da Chef sono nello stesso posto ~/chef. Ho una cartella ~/chef/vagrant che contiene tutti i miei file Vagrant.

Il mio Vagrantfile s avrà sempre qualcosa di simile al seguente.

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 
Problemi correlati