2012-03-12 39 views
14

Tôi đang sử dụng bếp trưởng để kiểm tra sách dạy nấu ăn của mình tại địa phương, nhưng tôi muốn chỉ có thể chạy sách dạy nấu mà tôi đang thử nghiệm. Hiện tại, có vẻ như đầu bếp solo sẽ chạy tất cả sách dạy nấu ăn trong thư mục sách dạy nấu ăn được quy định trong solo.rb. Tôi đã chỉ định danh sách chạy trong tệp thuộc tính json và chỉ định vị trí của tệp json trong solo.rb, nhưng điều đó dường như không giúp ích gì. Nó ít nhất là phân tích các thuộc tính cho tất cả các sách dạy nấu ăn khác, bởi vì tôi có một trong đó không làm việc cho cấu hình địa phương của tôi và nó không chạy toàn bộ.Chỉ định sách dạy nấu nào để chạy với Chef Solo

Giải pháp tốt nhất mà tôi đã tìm thấy cho đến nay là di chuyển (các) sách dạy nấu ăn mà tôi cần để thử nghiệm vào một thư mục khác và chỉ định điều đó trong solo.rb. Có cách nào tốt hơn để làm điều đó không?

Trả lời

27

Cập nhật: đầu bếp-solo không còn là công cụ "riêng biệt" từ đầu bếp-khách hàng. Từ documentation:

chef-solo is a command that executes chef-client in a way that does not require the Chef server in order to converge cookbooks. chef-solo uses chef-client’s Chef local mode, and does not support the following functionality present in chef-client/server configurations

Sự thay đổi này đã được thực hiện trong Chef version 12.11, đáp ứng đầy đủ community RFC. Điều này đã được phát hành vào ngày 8 tháng 6 năm 2016. Hành vi cũ, được mô tả dưới đây (mặc dù từ 4 năm trước vào thời điểm này), có sẵn với đối số --legacy-mode đến chef-solo.

Đối với các mới nhất và cập nhật thông tin về Chef Solo, vui lòng đọc the official documentation

câu trả lời ban đầu của tôi là dưới đây:

Chef (solo hoặc khách hàng) không "chạy" tất cả các sách dạy nấu ăn .

tải tất cả các file của sách dạy nấu ăn của Ruby trong các thư mục sau đây, theo thứ tự này:...

  • thư viện/rb
  • các nhà cung cấp/* RB
  • nguồn/* * RB
  • thuộc tính/rb *.
  • định nghĩa/*. RB

Sau đó, nó tải tất cả các công thức có trong danh sách chạy mở rộng của nút.Với chef-solo, điều này xuất phát từ tệp JSON được cung cấp với -j hoặc có thể được thực hiện trong tệp thuộc tính - tuy nhiên, tệp sau không được dùng nữa và không được khuyến nghị.

Bất kỳ công thức nào được bao gồm bởi những công thức trong danh sách chạy mở rộng qua include_recipe cũng được tải. Đầu bếp tải công thức nấu ăn bằng cách đánh giá chúng như mã Ruby. Khi nó gặp mã ruby ​​mà nó nhận ra là một tài nguyên, hoặc một định nghĩa, nó thêm tài nguyên vào Bộ sưu tập tài nguyên, một mã băm được lập chỉ mục theo thứ tự số của tất cả các tài nguyên. Các định nghĩa là đặc biệt, trong đầu bếp đó thêm các tài nguyên mà chúng chứa, không phải bản thân định nghĩa, vào Bộ sưu tập tài nguyên. Tài nguyên của công thức nấu ăn bao gồm thông qua include_recipe được chèn vào vị trí, sau đó Chef tiếp tục trong công thức bao gồm.

Khi đầu bếp đã xử lý tất cả các công thức nấu ăn cho tất cả các tài nguyên của mình, bộ sưu tập tài nguyên sẽ thực hiện hành động được chỉ định trên mỗi đơn hàng theo thứ tự đã được thêm vào bộ sưu tập.

Tôi khuyên bạn nên đọc tài liệu về quy trình này. Nó áp dụng cho Chef Solo; chỉ là phần mà sách dạy nấu ăn được tải xuống từ máy chủ bị bỏ qua.

Để đảm bảo rằng chỉ những công thức nấu ăn mà bạn muốn kiểm tra được kiểm tra, bao gồm chúng trong danh sách thực thi của nút thông qua một tập tin JSON. Nó trông giống như thế này:

{ "run_list": ["recipe[mything]", "recipe[anotherthing]"] } 

Danh sách này chạy chỉ là một mảng, và các mặt hàng có thể recipe[cookbookname] hoặc role[somerole]. Bạn có thể đọc thêm về cách sử dụng Vai trò với Đầu bếp Solo trên tài liệu Chef Solo.

Nếu bạn có hệ thống những thay đổi được thực hiện khi Chef đang tải các thành phần sách dạy nấu ăn (các tập tin ruby ​​trong mỗi sách dạy nấu ăn), sau đó "Bạn đang làm nó sai" (tm) và nên refactor những điều cần được thực hiện trong một nguồn tài nguyên được gọi là từ một công thức.

+0

tất cả các liên kết bị phá vỡ – freedev

5

Đáng buồn thay, tôi không nghĩ là có. Đầu bếp chạy trong chế độ hai lần: đầu tiên, nó phân tích và xây dựng một mô hình sách dạy nấu ăn của bạn (giai đoạn "biên dịch"), và sau đó nó chỉ chạy những sách dạy nấu mà bạn chỉ định trong danh sách chạy. Tôi tin rằng nó thực hiện điều này để đảm bảo nó nắm bắt được sự phụ thuộc giữa sách dạy nấu ăn trong giai đoạn biên dịch. Giai đoạn biên dịch phải nhất quán hoặc nếu không thì nó sẽ bị lỗi.

Để thực sự hiểu điều này, hãy xem tài nguyên ruby block. Bất kỳ ruby ​​nào đang trôi nổi xung quanh trong công thức nấu ăn của bạn sẽ được đánh giá tại biên dịch thời gian; bất kỳ ruby ​​nào bạn muốn chạy tại thời điểm đánh giá phải được đặt trong một tài nguyên khối ruby. Một khi bạn mò mẫm, bản chất của việc đánh giá hai vượt qua trở nên rõ ràng.

Tôi nghĩ rằng các tùy chọn duy nhất của bạn là mang theo từng sách dạy nấu ăn, như bạn đang làm hoặc để sửa các thuộc tính của bạn.

13

Cũng đáng chú ý là khi kiểm tra bạn có thể dễ dàng ghi đè Danh sách chạy

chef-solo --override-runlist "role["somerole"],recipe[mycookbook::recipe]" 
+0

Nếu sách dạy nấu ăn của bạn được định nghĩa trong '/ etc.chef-solo.rb' bạn có thể viết tắt theo cách này quá '$ sudo chef-solo -o nginx :: start' – JREAM

+0

lệnh này cho tôi fo Lỗi llowing: Không có sách dạy nấu ăn như vậy. Tên sách nấu ăn là ok và tên công thức cũng được. – Lechucico

Các vấn đề liên quan