2012-11-01 27 views
7

Tôi có tài nguyên trong công thức nấu ăn mà tôi muốn là tùy chọn. Đó là, khi công thức chạy, nếu tài nguyên không thành công, tôi muốn mọi thứ khác tiếp tục. Tôi vẫn muốn biết có một sự thất bại với nguồn tài nguyên đó, nó chỉ là nó không phải là một nguồn lực quan trọng và không có gì phụ thuộc vào nó, vì vậy tôi muốn phần còn lại của chạy tiếp tục.Làm cách nào để bạn tạo tài nguyên đầu bếp tùy chọn?

Tôi đã từng làm việc với Puppet nơi bạn phải khai báo rõ ràng các phụ thuộc của bạn, và các tài nguyên chỉ bị bỏ qua khi chúng phụ thuộc thất bại thay vì một lỗi gây ra toàn bộ phần còn lại của tệp không chạy.

Không chắc tại sao điều này bị đóng không phải là câu hỏi thực (ngay cả sau khi đọc Câu hỏi thường gặp), nhưng tôi sẽ thêm một số mã ví dụ để minh họa những gì tôi đang yêu cầu, hy vọng người khác có thể bỏ phiếu để mở lại hoặc có thể trả lời.

Tôi đang sử dụng đầu bếp để thiết lập môi trường nhà phát triển và một phần trong đó chỉ là nhân bản một số repo git có sẵn. Không có gì phụ thuộc vào chúng, và đôi khi có một repo riêng mà một số dev không có quyền truy cập. Nếu nó không sao chép được, tôi muốn các tài nguyên khác tiếp tục chạy.

Vì vậy, các tài nguyên sau:

["foo", "bar", "baz"].each do |repo| 
    git repo do 
    repository "[email protected]/example/#{repo}" 
    reference "master" 
    action  :sync 
    depth  1 
    user  'dev' 
    group  'dev' 
    destination "#{node[:src_dir]}/#{repo}" 
    end 
end 

Nếu người dùng chạy này không được phép sao chép foo, tôi muốn foo thất bại, nhưng bar và baz vẫn sao chép. Làm thế nào là có thể?

+1

nhanh chóng và bẩn lựa chọn: ignore_failure đúng, only_if "http://github.com/repo curl" – agross

+1

ignore_failure là những gì tôi đang tìm kiếm. curl sẽ không thực sự làm việc vì nó là một repo tư nhân mà tôi đang cố gắng để có được, vì vậy tôi đang dựa vào các phím ssh cho nó để có thể truy cập. Ngoài ra, only_if sẽ chỉ bỏ qua tài nguyên mà không cho tôi biết bất cứ điều gì là sai, trong khi ignore_failure cho tôi một thông điệp tốt trong nhật ký: 'STDERR: ERROR: Repository không tìm thấy. ignore_failure được đặt, tiếp tục' – mmrobins

Trả lời

6

Bạn có thể đặt ignore_failure true

0

Một khả năng là làm cho lớp nhà cung cấp của riêng bạn mà lớp con Chef::Provider::Git và thay đổi hành vi bạn không thích trong lớp con. Bạn có thể sử dụng phương thức thuộc tính provider trong tài nguyên để đặt lớp nhà cung cấp cho tài nguyên đó - trong trường hợp này là đến lớp nhà cung cấp của bạn. Bạn có thể sẽ đặt lớp nhà cung cấp của bạn trong một tệp thư viện.

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