ให้เราบอกว่าฉันมีรหัสเชฟเช่น:
require 'mixlib/shellout'
yum_package 'somepackage'
myvar = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
ในกรณีที่ยังไม่มีเพราะมันถูกติดตั้งโดย/bin/somecommand
somepackage
สิ่งนี้จะล้มเหลวในเวลารวบรวมสูตรด้วยเหตุผลดังกล่าว แต่จะทำงานได้อย่างชัดเจนในเวลาที่ลู่เข้าให้การติดตั้งแพ็คเกจสำเร็จแล้ว สิ่งนี้จะล้มเหลวเช่นกันหากมีการติดตั้งแพคเกจเป็นสูตรก่อนหน้าในรายการเรียกใช้เนื่องจากมีการรวบรวมทั้งหมดล่วงหน้า ฉันจะรวมสิ่งต่าง ๆ ในสูตรเชฟที่สูตรหรือ runlist ติดตั้งเองได้อย่างไร
myvar
ฉันจะหลีกเลี่ยงการใช้การประเมินโค้ดจากคำสั่งภายนอกในเวลารวบรวมโดยไม่ต้องมีความเข้าใจอย่างถ่องแท้เกี่ยวกับการใช้งานเว้นแต่จะจำเป็นต้องกำหนดทรัพยากรอื่น ๆ โดยสังเขปฉันจะทำruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
node.run_state
เป็นสิ่งที่ฉันกำลังมองหา - ขอบคุณ ตอบคำถามนั้นแล้วฉันจะยอมรับมัน!