কীভাবে 'ভ্যাগ্রান্ট আপ' এর পরামিতিটি পাস করবেন এবং এটি ভ্যাগ্রান্টফাইলে থাকার সুযোগে পাবেন?


86

আমি শেফ কুকবুকের কাছে প্যারামিটারটি পাস করার উপায় খুঁজছি:

$ vagrant up some_parameter

এবং তারপরে some_parameterশেফ কুকবুকগুলির মধ্যে একটিতে ব্যবহার করুন ।

উত্তর:


113

আপনি যান্ত্রিক কোনও পরামিতি পাস করতে পারবেন না। একমাত্র উপায় হ'ল পরিবেশের ভেরিয়েবলগুলি ব্যবহার করা

MY_VAR='my value' vagrant up

এবং ENV['MY_VAR']রেসিপি ব্যবহার করুন ।


4
ধন্যবাদ! আমি gist.github.com/4435297 চেষ্টা করেছি এবং আমি ব্যবহারকারীর ইনপুট পেতে পারি, তবে কীভাবে শেফ কুকবুকের মধ্যে এটি পাস করতে হয় তার কোনও ধারণা নেই। এখন এটি ENV
Wojciech Bednarski

6
আপনি সেই এনএভি ভারে ভ্যাগ্রান্টফাইলে অ্যাক্সেস করতে পারেন এবং শেফ.জসন হ্যাশে রেখে দিতে পারেন ( ডকস.ভ্যাগ্রান্টপ
// ভি

হ্যাঁ, এটি আরও সুবিধাজনক।
ড্রাকো আটার


পাওয়ারশেলে আপনার এমন কিছু ব্যবহার করা উচিত $ Env: MY_VAR = 'আমার মান' | অসম্পূর্ণ
আলবার্তো আর।

70

আপনি গেটপটলং রুবি লাইব্রেরিও অন্তর্ভুক্ত করতে পারেন যা আপনাকে কমান্ড লাইন বিকল্পগুলি পার্স করতে দেয়।

জাগ্রত

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

দ্রষ্টব্য: একটি অবৈধ বিকল্পের বৈধতা ত্রুটি এড়াতে ভ্যাগ্র্যান্ট কমান্ডের আগে কাস্টম বিকল্পটি নির্দিষ্ট করা আছে তা নিশ্চিত করুন ।

এখানে গ্রন্থাগার সম্পর্কে আরও তথ্য ।


4
আমি পোস্ট করার পর থেকে আমি এটি সারাদিন ব্যবহার করছি। এটি খুব ভাল কাজ করে! তোমার সমস্যা কি ?
বেনিয়ামিন গৌথিয়ার

13
দেখে মনে হচ্ছে যে বিকল্পগুলি optsপ্রক্রিয়াজাত নয়vagrant --custom-option=option destroy -f vagrant: invalid option -- f
রেনাত জারিপভ

4
হ্যাঁ, এটি কাজ করে এবং ইমো প্রথম উত্তরের চেয়ে মার্জিত।
ডেভিডাভ

4
@ বেনজামিনগৌথির ডকস বলছে "খালি অপশন - (দুটি বিয়োগ চিহ্ন) অপশন প্রক্রিয়া শেষ করতে ব্যবহৃত হয়"। তাই vagrant --custom-option=option -- upযথেষ্ট হওয়া উচিত
CESCO

4
এটি ভ্যাগ্র্যান্ট 2 এর সাথে আর কাজ করে না। এটি নিজের পাশে কোনও পরামিতি গ্রহণ করে না।
জেনস বাইটিংগার

23

এআরজিভি থেকে ভেরিয়েবলগুলি পড়া এবং তারপরে কনফিগারেশন পর্যায়ে যাওয়ার আগে এগুলি থেকে এটি সরিয়ে ফেলা সম্ভব। এটিটি এআরজিভি সংশোধন করতে অদ্ভুত লাগে তবে কমান্ড-লাইন বিকল্পের জন্য আমি অন্য কোনও উপায় খুঁজে পাইনি।

জাগ্রত

# 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

 

Provation.sh

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অতিরিক্ত কাস্টম যুক্তি অপসারণের পরে সঠিক অ্যারে প্রদর্শন করা হচ্ছে ।
majkinetor

4
এখানেও, এটি কাজ করে না ... আমি একটি puts "#{ARGV}"লাইন রেখেছি vagrant/embedded/gems/gems/vagrant-1.7.2/lib/vagrant/plugin/v2/command.rbএবং এটি ভ্যাগ্রান্টফাইলে প্রাসঙ্গিক আর্গুমেন্টগুলি অপসারণের আগে সেই লাইনটি মুদ্রণ করে, এর অর্থ এই যে অপসারণটি বৃথা হয় যেহেতু এআরজিভি বৈধকরণকারীর কাছে প্রেরণ করা হয় যা কোনওর An invalid option was specifiedআগে আউটপুট দেয় অপারেশনগুলি এআরজিভিতে স্থান নিতে পারে।
বোগদানসোরলিয়া

8

@ বেনজমিন-গাথির এর গেটোপটলং দ্রবণটি খুব ঝরঝরে, রুবি এবং ভিজানর দৃষ্টান্তের সাথে ভালভাবে খাপ খায়।

তবে, যেমন ভবঘুরে আর্গুমেন্ট, এর শুদ্ধ হ্যান্ডলিং ঠিক করতে এক অতিরিক্ত লাইন দরকার 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 পরিষ্কারভাবে পরিচালনা করা হয়।

আশাকরি এটা সাহায্য করবে,


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