2012-01-20 29 views
23

Tôi đang đào sâu vào những gì cần thiết để di chuyển môi trường phát triển của mình sang Vagrant và tôi đang gặp một số vấn đề trong quá trình cung cấp máy ảo với đầu bếp. Tôi chưa bao giờ sử dụng đầu bếp trước đây và các tài liệu Vagrant trong khu vực này cố ý yếu (ngoài phạm vi) để tôi có thể sử dụng một bàn tay.Provisioning Vagrant w/Chef

tôi muốn thực hiện điều này xách tay càng tốt, vì vậy tôi nghĩ rằng nó có ý nghĩa để tải sách dạy nấu ăn từ một URL vì vậy đây là những gì tôi đang cố gắng trong Vagrantfile tôi:

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' Tôi nghĩ rằng có bất kỳ câu hỏi mà tôi chỉ đơn giản là hiểu lầm một cái gì đó, nhưng tôi đã không tìm thấy một nguồn tài liệu có vẻ như nó phù hợp với bối cảnh Vagrant này.

Cảm ơn.

+0

Trong trường hợp bất kỳ ai đã thử điều này gần đây, repo git đã thay đổi thành thư để tải xuống các bản repos riêng lẻ để mẫu tải xuống chi tiết sách dạy nấu opscode chính này không còn hoạt động nữa. –

Trả lời

20

Cách bạn hiển thị ở trên chắc chắn sẽ hoạt động tốt.

Tuy nhiên, nếu bạn định sử dụng Chef solo, tôi khuyên bạn nên nhúng sách dạy nấu ăn trực tiếp vào trong kho lưu trữ để kiểm soát phiên bản. Điều này làm cho nó để tại mỗi điểm trong thời gian khi bạn cam kết, Vagrantfile là phù hợp với các phiên bản thích hợp của sách dạy nấu ăn. Vì vậy, trong 2 năm khi bạn kiểm tra mã từ ngày hôm nay, các sách dạy nấu ăn vẫn nên hoạt động về mặt kỹ thuật.

Nếu bạn muốn đi tuyến đường này, hãy tạo một thư mục, chẳng hạn như cookbooks, chứa sách dạy nấu ăn. Sau đó, định cấu hình Vagrant như sau:

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

Thật không may, không có nhiều tài liệu về Vagrant kết hợp với Đầu bếp. Tôi khuyên bạn nên xem xét sử dụng librarian để quản lý sách dạy nấu ăn cho bạn. Tôi thường có một khối tương tự như sau trong Vagrantfile tôi:

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

    # ... 
end 

tôi có thể tạo một thư mục mới trong thư mục gốc của dự án của tôi được gọi là chef và thêm dòng sau vào tôi .gitignore:

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

Trong chef thư mục, bạn có thể chạy librarian-chef init và bắt đầu thêm sách nấu ăn vào số Cheffile được tạo theo cách bạn muốn với 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" 

Bạn nhận được lợi ích khi có thể chỉ định kho lưu trữ git, đường dẫn tệp và phiên bản cho gói rất hữu ích khi bạn sử dụng sách dạy nấu ăn từ nhiều nguồn. Khi bạn chạy librarian-chef install thủ thư sẽ tìm nạp tất cả sách dạy nấu cụ thể và lưu trữ chúng trong thư mục cookbooks, liên quan đến vị trí của Cheffile của bạn.

+0

Một tùy chọn khác cho thủ thư-đầu bếp là Berkshelf. berkshelf.com. Lợi thế nhỏ của Berkshelf là hỗ trợ phát triển sách dạy nấu ăn và sử dụng nó để quản lý chúng. Đây không phải là trường hợp sử dụng được đề nghị/hỗ trợ cho đầu bếp thủ thư. – Mikezx6r

+0

thiết lập này hoạt động hoàn hảo, cảm ơn! – Vamsi

0

Bạn cũng có thể sử dụng Berkshelf để quản lý sách dạy nấu ăn cho bạn. Berkshelf thực sự làm cho việc quản lý sách dạy nấu ăn trở nên dễ dàng.

Tất cả những gì bạn cần làm là cài đặt đá quý berkshelf và chạy berks init để tạo một Berksfile trống.

Có một vài cách khác nhau để thêm sách dạy nấu ăn vào berksfile để giải quyết các phụ thuộc.

Ví dụ:

Để giải quyết sách dạy nấu ăn từ việc sử dụng siêu thị:

source 'http://chefsupermarket.com' 

cookbook 'mycookbook', '~> 1.3.6' 

Để giải quyết từ git sử dụng:

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

bạn cũng có thể giữ sách dạy nấu ăn trong thư mục địa phương của bạn và giải quyết chúng bằng cách sử berksfile sử dụng:

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

Tôi thích một kho lưu trữ lớn hơn với tất cả sách dạy nấu ăn của tôi. Vì vậy, tôi không sử dụng Librarian hoặc Berkshelf, chỉ Vagrant và Chef. Tôi sử dụng Chef để tạo VM sử dụng VirtualBox mà còn để "bake" container Docker.

Tôi không thấy bất kỳ vấn đề về tính di động nào với phương pháp này. Đối với phát triển địa phương, tất cả các công cụ đầu bếp của tôi là ở một nơi ~/chef. Tôi có một thư mục ~/chef/vagrant có tất cả các tệp Vagrant của tôi.

My Vagrantfile s sẽ luôn có thứ gì đó tương tự như sau.

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 
Các vấn đề liên quan