उन चीजों को कैसे महाराज करें जो अभी तक मौजूद नहीं हैं


9

हम कहते हैं कि मैं कुछ बावर्ची कोड की तरह है:

require 'mixlib/shellout'
yum_package 'somepackage'
myvar =  Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip

जहां /bin/somecommandअभी तक मौजूद नहीं है क्योंकि यह स्थापित है somepackage। यह उस कारण से नुस्खा संकलन समय पर विफल हो जाएगा, लेकिन स्पष्ट रूप से अभिसरण समय पर काम करेगा ताकि पैकेज को सफलतापूर्वक स्थापित किया जा सके (और यदि ऐसा नहीं होता है तो जाहिर है कि नुस्खा वैसे भी विफल हो गया है)। यह भी विफल रहता है यदि पैकेज स्थापित किया गया है तो रनलिस्ट में एक पिछला नुस्खा होगा क्योंकि वे सभी एक साथ अपफ्रंट में संकलित किए जाते हैं। मैं एक बावर्ची नुस्खा में चीजों को कैसे शामिल करूं जो कि नुस्खा या रनलिस्ट खुद को स्थापित करती है?


इस तरह की चीज CFEngine में कोई समस्या नहीं है
Gaius

1
बिना myvarकिसी वास्तविक उत्तर के उपयोग के बारे में जानकारी के बिना , आमतौर पर मैं बाह्य कमांड से कोड मूल्यांकन का उपयोग करने से बचता हूं जब तक कि अन्य संसाधनों को परिभाषित करने के लिए बहुत आवश्यक न हो। संक्षेप में, मैं एक ऐसा चाहते हैंruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
Tensibai

@ तेंसिबाई node.run_stateबिल्कुल वही थी जिसकी मुझे तलाश थी - धन्यवाद इसका उत्तर बनाओ और मैं इसे स्वीकार करूंगा!
गयुस

कि कल तक इंतजार करना होगा :) फोन पर एक सही जवाब लिखने के लिए बहुत मुश्किल है
तेनसीबाई

जवाबों:


4

मैं node.run_stateएक रन में एक क्षणिक चर को स्टोर करने के लिए जाता हूं और इसे परिभाषित करता हूं ruby_blockताकि यह अभिसरण समय पर होता है, कुछ इस तरह से है:

yum_package 'somepackage'

ruby_block 'set myvar' do
  block do
    node.run_state['my_var'] = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
  end
end

जहां तक ​​मुझे पता है कि 'मिक्सलिब / शेलआउट' की आवश्यकता नहीं है।


2

बारीकियों का सटीक उपयोग मामले पर निर्भर करता है। यदि मान केवल दूसरे संसाधन पर एक संपत्ति के रूप में उपयोग किया जाता है, तो आप lazyसहायक विधि का उपयोग करेंगे । यदि आपको आउटपुट की आवश्यकता नहीं है, तो आप executeसंसाधन का उपयोग करेंगे । कुछ और जटिल मामलों में आप एक ruby_blockसंसाधन का उपयोग कर सकते हैं या अपने स्वयं के कस्टम संसाधन लिख सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.