Hãy để chúng tôi nói rằng tôi có một số mã Chef như:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Trường hợp /bin/somecommand
chưa tồn tại bởi vì nó được cài đặt bởi somepackage
. Điều này sẽ thất bại tại thời gian biên dịch công thức vì lý do đó, nhưng rõ ràng sẽ hoạt động vào thời điểm hội tụ cung cấp gói cài đặt thành công (và nếu không thì rõ ràng công thức đã thất bại). Điều này cũng thất bại nếu gói được cài đặt là một công thức trước đó trong danh sách chạy vì tất cả chúng được biên dịch cùng nhau trả trước. Làm cách nào để bao gồm những thứ trong công thức Chef mà công thức hoặc danh sách đó tự cài đặt?
myvar
không có câu trả lời thực sự, thông thường tôi tránh sử dụng đánh giá mã từ các lệnh bên ngoài vào thời gian biên dịch trừ khi rất cần thiết để xác định các tài nguyên khác. Nói tóm lại, tôi sẽ làm mộtruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
chính xác là những gì tôi đang tìm kiếm - cảm ơn. Làm cho nó một câu trả lời và tôi sẽ chấp nhận nó!