Katakanlah saya punya beberapa kode Chef seperti:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
Di mana /bin/somecommand
belum ada karena diinstal oleh somepackage
. Ini akan gagal pada waktu kompilasi resep karena alasan itu, tetapi jelas akan bekerja pada waktu konvergensi dengan menyediakan paket yang berhasil diinstal (dan jika tidak maka resep pasti gagal juga). Ini juga gagal jika paket diinstal menjadi resep sebelumnya di runlist karena mereka semua dikompilasi bersama dimuka. Bagaimana cara saya memasukkan hal-hal dalam resep Chef yang diinstal sendiri oleh resep atau daftar run itu?
myvar
tidak ada jawaban nyata, biasanya saya menghindari menggunakan evaluasi kode dari perintah eksternal pada waktu kompilasi kecuali sangat diperlukan untuk mendefinisikan sumber daya lainnya. Secara singkat, saya akan melakukanruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
persis seperti yang saya cari - terima kasih. Buat itu jawaban dan saya akan menerimanya!