2012-01-20 17 views
23

Zajmuję się tym, co zajmie przeniesienie moich środowisk programistycznych do Vagrant i mam problem z uzyskaniem obsługi procesu udostępniania VM u szefa kuchni. Nigdy wcześniej nie używałam szefa kuchni, a doktorzy Vagrant w tym obszarze celowo słabi (poza zasięgiem), więc mogłem użyć ręki.Provisioning Vagrant w/Chef

Chciałbym zrobić to jako przenośne, jak to możliwe, więc myślałem, że to ma sens, aby załadować książki kucharskie z adresu URL, więc to, co usiłuję w moim 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” Sądzę, że jest jakieś pytanie, że po prostu coś nie rozumiem, ale nie znalazłem źródła dokumentacji, które wydaje się pasować do tego kontekstu Vagrant.

Dzięki.

+0

W przypadku ktoś próbował to ostatnio, repo git zmieniła się na wiadomość, aby pobrać indywidualne repo więc ten wzór pobierając opscode głównego kucharskie oddział już nie działa. –

Odpowiedz

20

Sposób, w jaki pokazujesz powyżej, z pewnością będzie dobrze działać.

Jeśli jednak zamierzasz używać Chef solo, polecam osadzanie książek kucharskich bezpośrednio w repozytorium, które przechodzi do kontroli wersji. Dzięki temu plik Vagrantfile jest dopasowywany do odpowiednich wersji książek kucharskich. Tak więc za 2 lata, kiedy sprawdzicie kod od dzisiaj, książki kucharskie powinny nadal technicznie działać.

Aby przejść na tę trasę, utwórz katalog, na przykład cookbooks, który zawiera książki kucharskie. Następnie skonfiguruj Vagrant tak:

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

Niestety, nie ma zbyt wiele dokumentacji na temat Vagrant w połączeniu z Chef. Polecam przejrzeć korzystanie z librarian do zarządzania książkami kucharskimi. I zazwyczaj mają blok podobny do tego w moim Vagrantfile:

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

    # ... 
end 

utworzyć nowy folder w katalogu głównym mojego projektu o nazwie chef i dodaj następujące wiersze do mojego .gitignore:

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

W chef katalogu, można uruchomić librarian-chef init i rozpocząć dodawanie kucharskie do utworzonej Cheffile w taki sposób, byś z 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" 

Otrzymujesz korzyści z możliwości określania repozytoriów git, ścieżek plików i wersji do pakowania, co jest niezwykle pomocne, gdy korzystasz z książek kucharskich z wielu źródeł. Po uruchomieniu librarian-chef install bibliotekarz pobierze wszystkie określone książki kucharskie i zapisze je w katalogu cookbooks, w odniesieniu do lokalizacji Twojego Cheffile.

+0

Inną opcją dla bibliotekarza-szefa kuchni jest Berkshelf. berkshelf.com. Mniejsza przewaga Berkshelf to wsparcie dla rozwijania książek kucharskich i wykorzystywania ich do zarządzania nimi. Wydaje się, że nie jest to zalecany/obsługiwany przypadek użycia dla bibliotekarza-szefa kuchni. – Mikezx6r

+0

ta konfiguracja działa idealnie, dzięki! – Vamsi

0

Możesz również użyć Berkshelf do zarządzania książkami kucharskimi. Berkshelf naprawdę ułatwia zarządzanie książkami kucharskimi.

Wszystko, co musisz zrobić, to zainstalować berkshelf gem i uruchomić berks init, aby wygenerować pustą plik Berks.

Istnieje kilka różnych sposobów dodawania książek kucharskich do pliku berks, aby rozwiązać zależności.

Przykład:

Aby rozwiązać kucharskie z użytku w supermarkecie:

source 'http://chefsupermarket.com' 

cookbook 'mycookbook', '~> 1.3.6' 

Aby rozwiązać z użycia git:

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

można również przechowywać książki kucharskie w lokalnym katalogu i rozwiązać je za pomocą berksfile using:

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

Wolę duże monolityczne repozytorium ze wszystkimi moimi książkami kucharskimi. Więc nie używam Librarian ani Berkshelf, tylko Vagrant i Chef. Używam Chefa do tworzenia VM-ów za pomocą VirtualBox, ale także do "upieczania" kontenerów Docker.

Nie widzę żadnych problemów z przenośnością w tym podejściu. Dla rozwoju lokalnego wszystkie moje rzeczy Chef są w jednym miejscu ~/chef. Mam folder ~/chef/vagrant, który ma wszystkie moje pliki Vagrant.

Moje Vagrantfile s zawsze będą miały coś podobnego do poniższego.

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