কীভাবে এমন জিনিসগুলি শেফ করবেন যেগুলি এখনও নেই


9

আমাদের বলুন যে আমার কাছে কিছু শেফ কোড রয়েছে:

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

/bin/somecommandএটি ইনস্টল করা হওয়ার কারণে এখনও কোথায় নেই somepackage। এটি সেই কারণে রেসিপিটি সংকলনের সময় ব্যর্থ হবে, তবে অবশ্যই প্যাকেজটি সফলভাবে ইনস্টল করা সরবরাহ করার জন্য কনভার্জিন সময়ে কাজ করবে (এবং যদি তা না হয় তবে অবশ্যই রেসিপিটি ব্যর্থ হয়েছে)। প্যাকেজটি ইনস্টল করা থাকলে রানলিস্টের পূর্ববর্তী রেসিপি হিসাবে এটি ব্যর্থ হয় যেহেতু তারা সকলেই একসাথে সামনে কম্পাইল করা হয়েছে। আমি কীভাবে কোনও শেফ রেসিপিতে জিনিসগুলি অন্তর্ভুক্ত করব যা সেই রেসিপি বা রানলিস্ট নিজেই ইনস্টল করে?


এই ধরণের জিনিস সিএফইঙ্গাইন
গাইউস

1
ব্যবহারের উপর কোন অন্তর্দৃষ্টি ছাড়াই myvarসত্যিকারের উত্তর নেই, সাধারণত আমি অন্যান্য সংস্থাগুলি সংজ্ঞায়িত করার প্রয়োজন না হলে সংকলন সময়ে বাহ্যিক কমান্ডগুলি থেকে কোড মূল্যায়ন ব্যবহার করা এড়িয়ে চলি। সংক্ষেপে, আমি একটি করবruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
টেনসাইবাই

@ টেনসিবাই 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সংস্থান ব্যবহার করতে পারেন বা আপনার নিজস্ব কাস্টম সংস্থান লিখতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.