আমি শেফ কুকবুকের কাছে প্যারামিটারটি পাস করার উপায় খুঁজছি:
$ vagrant up some_parameter
এবং তারপরে some_parameter
শেফ কুকবুকগুলির মধ্যে একটিতে ব্যবহার করুন ।
আমি শেফ কুকবুকের কাছে প্যারামিটারটি পাস করার উপায় খুঁজছি:
$ vagrant up some_parameter
এবং তারপরে some_parameter
শেফ কুকবুকগুলির মধ্যে একটিতে ব্যবহার করুন ।
উত্তর:
আপনি যান্ত্রিক কোনও পরামিতি পাস করতে পারবেন না। একমাত্র উপায় হ'ল পরিবেশের ভেরিয়েবলগুলি ব্যবহার করা
MY_VAR='my value' vagrant up
এবং ENV['MY_VAR']
রেসিপি ব্যবহার করুন ।
আপনি গেটপটলং রুবি লাইব্রেরিও অন্তর্ভুক্ত করতে পারেন যা আপনাকে কমান্ড লাইন বিকল্পগুলি পার্স করতে দেয়।
জাগ্রত
require 'getoptlong'
opts = GetoptLong.new(
[ '--custom-option', GetoptLong::OPTIONAL_ARGUMENT ]
)
customParameter=''
opts.each do |opt, arg|
case opt
when '--custom-option'
customParameter=arg
end
end
Vagrant.configure("2") do |config|
...
config.vm.provision :shell do |s|
s.args = "#{customParameter}"
end
end
তারপরে, আপনি চালাতে পারেন:
$ vagrant --custom-option=option up
$ vagrant --custom-option=option provision
দ্রষ্টব্য: একটি অবৈধ বিকল্পের বৈধতা ত্রুটি এড়াতে ভ্যাগ্র্যান্ট কমান্ডের আগে কাস্টম বিকল্পটি নির্দিষ্ট করা আছে তা নিশ্চিত করুন ।
এখানে গ্রন্থাগার সম্পর্কে আরও তথ্য ।
opts
প্রক্রিয়াজাত নয়vagrant --custom-option=option destroy -f
vagrant: invalid option -- f
vagrant --custom-option=option -- up
যথেষ্ট হওয়া উচিত
এআরজিভি থেকে ভেরিয়েবলগুলি পড়া এবং তারপরে কনফিগারেশন পর্যায়ে যাওয়ার আগে এগুলি থেকে এটি সরিয়ে ফেলা সম্ভব। এটিটি এআরজিভি সংশোধন করতে অদ্ভুত লাগে তবে কমান্ড-লাইন বিকল্পের জন্য আমি অন্য কোনও উপায় খুঁজে পাইনি।
# Parse options
options = {}
options[:port_guest] = ARGV[1] || 8080
options[:port_host] = ARGV[2] || 8080
options[:port_guest] = Integer(options[:port_guest])
options[:port_host] = Integer(options[:port_host])
ARGV.delete_at(1)
ARGV.delete_at(1)
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Create a forwarded port mapping for web server
config.vm.network :forwarded_port, guest: options[:port_guest], host: options[:port_host]
# Run shell provisioner
config.vm.provision :shell, :path => "provision.sh", :args => "-g" + options[:port_guest].to_s + " -h" + options[:port_host].to_s
port_guest=8080
port_host=8080
while getopts ":g:h:" opt; do
case "$opt" in
g)
port_guest="$OPTARG" ;;
h)
port_host="$OPTARG" ;;
esac
done
puts ARGV
অতিরিক্ত কাস্টম যুক্তি অপসারণের পরে সঠিক অ্যারে প্রদর্শন করা হচ্ছে ।
puts "#{ARGV}"
লাইন রেখেছি vagrant/embedded/gems/gems/vagrant-1.7.2/lib/vagrant/plugin/v2/command.rb
এবং এটি ভ্যাগ্রান্টফাইলে প্রাসঙ্গিক আর্গুমেন্টগুলি অপসারণের আগে সেই লাইনটি মুদ্রণ করে, এর অর্থ এই যে অপসারণটি বৃথা হয় যেহেতু এআরজিভি বৈধকরণকারীর কাছে প্রেরণ করা হয় যা কোনওর An invalid option was specified
আগে আউটপুট দেয় অপারেশনগুলি এআরজিভিতে স্থান নিতে পারে।
@ বেনজমিন-গাথির এর গেটোপটলং দ্রবণটি খুব ঝরঝরে, রুবি এবং ভিজানর দৃষ্টান্তের সাথে ভালভাবে খাপ খায়।
তবে, যেমন ভবঘুরে আর্গুমেন্ট, এর শুদ্ধ হ্যান্ডলিং ঠিক করতে এক অতিরিক্ত লাইন দরকার vagrant destroy -f
।
require 'getoptlong'
opts = GetoptLong.new(
[ '--custom-option', GetoptLong::OPTIONAL_ARGUMENT ]
)
customParameter=''
opts.ordering=(GetoptLong::REQUIRE_ORDER) ### this line.
opts.each do |opt, arg|
case opt
when '--custom-option'
customParameter=arg
end
end
যা কাস্টম বিকল্পগুলি প্রক্রিয়া করার সময় এই ব্লক কোডটিকে বিরতি দেয়। এখন,
vagrant --custom-option up --provision
বা
vagrant destroy -f
পরিষ্কারভাবে পরিচালনা করা হয়।
আশাকরি এটা সাহায্য করবে,
Vagrant.configure("2") do |config|
class Username
def to_s
print "Virtual machine needs you proxy user and password.\n"
print "Username: "
STDIN.gets.chomp
end
end
class Password
def to_s
begin
system 'stty -echo'
print "Password: "
pass = URI.escape(STDIN.gets.chomp)
ensure
system 'stty echo'
end
pass
end
end
config.vm.provision "shell", env: {"USERNAME" => Username.new, "PASSWORD" => Password.new}, inline: <<-SHELL
echo username: $USERNAME
echo password: $PASSWORD
SHELL
end
end