উত্তর:
কমপক্ষে দুটি প্লাগইন যা সহায়তা করবে:
স্ক্রিপ্টটি সমস্ত vagrantকমান্ড (প্রায়) চালু আছে সেদিকে খেয়াল না রাখলে আপনি ভ্যাগ্রান্টফাইলে কেবল শেল আউট (বা যা কখনও রুবি যাদু ব্যবহার করতে পারেন) ব্যবহার করতে পারেন:
system('./myscript.sh')
Vagrant.configure('2') do |config|
# ...
end
Kernelমডিউলটিতে রয়েছে এখানে নথিভুক্ত । Kernelমডিউল মধ্যে অন্তর্ভুক্ত করা হয় Object, বর্গ, যাতে তার পদ্ধতি সব সুযোগ পাওয়া যায়।
(আমি সম্পূর্ণ বলেছি কারণ গৃহীত উত্তরটি ব্যবহারকারী ভিজাগর আপ ব্যবহার করছে কিনা তা যাচাই করে না Therefore সুতরাং, প্রতিটি কমান্ডে স্ক্রিপ্টটি কার্যকর করা হয়, যা ওপি চায় না))
এটির একটি সহজ সমাধান রয়েছে।
ARGV[0]কমান্ডের প্রথম আর্গুমেন্ট প্রবেশ করে হতে পারে up, down, status, ইত্যাদি .. কেবলমাত্র মান পরীক্ষা ARGV[0]আপনার Vagrantfile হবে।
এর মতো কিছু কাজ করবে:
system("
if [ #{ARGV[0]} = 'up' ]; then
echo 'You are doing vagrant up and can execute your script'
./myscript.sh
fi
")
Vagrant.configure('2') do |config|
# ...
end
এটি আপনার ভ্যাগ্র্যান্টফাইলের শীর্ষের কাছে রাখুন:
module LocalCommand
class Config < Vagrant.plugin("2", :config)
attr_accessor :command
end
class Plugin < Vagrant.plugin("2")
name "local_shell"
config(:local_shell, :provisioner) do
Config
end
provisioner(:local_shell) do
Provisioner
end
end
class Provisioner < Vagrant.plugin("2", :provisioner)
def provision
result = system "#{config.command}"
end
end
end
তারপরে আপনার ভ্যাগ্রান্টফাইলে কেবল এইভাবে প্রার্থনা করুন:
config.vm.provision "list-files", type: "local_shell", command: "ls"
এবং কমান্ড লাইনের মাধ্যমে এটি:
vagrant provision --provision-with list-files
এটি হ্যাকের মতো যা এটি প্লাগ-ইনয়ের মতো লাগে তবে সত্যই তা হয় না (এটি আপনি কখন করবেন তা দেখায় না vagrant plugin list)। আমি এটি এইভাবে করার প্রস্তাব দিই না এটি ছাড়া এটিতে কোনও প্লাগইন ইনস্টল করার প্রয়োজন না হওয়ার সুবিধা রয়েছে, সুতরাং আপনার ভ্যাগ্রান্টফাইলে যে কোনও মেশিনে কাজ করবে যা সর্বশেষতম কনফিগারেশন সংস্করণটিকে সমর্থন করে (এটি লেখার মতো সংস্করণ 2)। যদিও এটি আশ্বাসজনকভাবে বহনযোগ্য বলে মনে হচ্ছে, আপনি যে বাস্তব আদেশটি জারি করছেন তার পুরো ক্রস-প্ল্যাটফর্মের সমস্যাটিও রয়েছে। আপনি যদি আপনার ভ্যাগ্রান্টফাইলে বহনযোগ্য হতে চান তবে আপনাকে বিবেচনা করা দরকার তবে এটি আপনাকে শুরু করা উচিত।
@ তমতিলাইয়ের উত্তরের ভিত্তিতে তবে 2019 এর জন্য আপডেট করা হয়েছে, ভ্যাগ্রান্ট-ট্রিগারগুলি ভ্যাগ্রান্টে একীভূত হয়েছে। সুতরাং আপনি এখন এর মতো কিছু করতে পারেন:
node.trigger.before [:up, :provision] do |trigger|
trigger.info = "Running ./myscript.sh locally..."
trigger.run = {path: "./myscript.sh"}
end
এই ব্লকটি ভিতরে যায় config.vm.define। আরও ডকুমেন্টেশন: https://www.vagrantup.com/docs/triggers/
config.vm.defineপ্রয়োজন নেই; সেগুলি Vagrant.configure("2") do |config| ... endপাশাপাশি রাখা যেতে পারে । চূড়ান্ত নোট হিসাবে, উইন্ডোজ হোস্টগুলিতে, ভ্যাগ্রান্ট আনন্দের সাথে পাওয়ার .ps1এক্সটেনশানযুক্ত পাওয়ারশেল স্ক্রিপ্টগুলি সম্পাদন করবে ।
@ তমতিলাই ব্যবহারের বিষয়ে যা বলেছেন তার সাথে সামঞ্জস্য
system('./myscript.sh')
আমি এটি এক সময়ের কমান্ডগুলির জন্য বেশ সহায়ক হিসাবে পেয়েছি যেমন ভ্যাগ্রান্ট কমান্ডগুলি ইনস্টল করতে বা এমন কিছু বিধানকারী যা সিস্টেমে ইনস্টল না করা হতে পারে installing আমি vagrantস্বতঃ-মন্তব্য করার জন্য একটি সেড যুক্ত করে কমান্ডগুলি যখনই প্রার্থনা করি ততবারই এটি পুনরায় চালানো এড়াতে চাই Vagrantfile।
উদাহরণ স্বরূপ:
system('vagrant plugin install vagrant-fabric && (pip install fabric jinja2 || sudo pip install fabric jinja2) && sed -i -e "s/^system/#system/g" Vagrantfile')
এবং আমি আমার Vagrantfile এর প্রথম লাইনটি তৈরি করি। এই পদ্ধতি (ছাড়া প্রথম চেষ্টা করবে এটি প্রথম ভবঘুরে-ফ্যাব্রিক প্লাগইন, ফ্যাব্রিক এবং Jinja ইনস্টল করবে sudoজন্য virtualenvsএবং sudoযদি ব্যর্থ হয় যে) এবং তারপর লাইন মন্তব্য নিজেই।
if [[ $(vagrant plugin list | grep -c vagrant-host-shell) == "0" ]] then vagrant plugin install vagrant-host-shell fi
vagrant statusআগে চালনা করলে কী হবে vagrant up...