2013-06-12 9 views
7

私は、ローカルVMを構築する迷惑メールファイルを持っています。私はEC2プロバイダを追加し、ローカルVMをプロビジョニングするかEC2にプロビジョニングするかを選択します。複数のプロバイダが1つの迷惑メールファイルに含まれていますか?

同じVagrantfile内の複数のプロバイダの設定を作成し、vagrant upを実行したときに実行する設定を何らかの方法で設定できますか?

+1

この場合、「プロビジョナ」という用語は間違っています。それは「プロバイダー」と呼ばれるべきですが、ここで編集戦争に入ることは望ましくありません。 – ChrisWue

答えて

7

multi-vm環境を使用できます。すべてのVMを別のプロバイダでプロビジョニングでき、コマンドラインでどちらを選択するかはvagrant up <machine>です。

+0

私はそれを考えなかったので、大丈夫です。 – jbrown

+2

将来の読者のために、私は質問を編集して、「プロビジョナー」ではなく「プロバイダー」と呼んでいます。 – Peeja

+0

複数のプロバイダを同時に実行させることはできません。その場合、マルチマシン環境を使用する必要があります。 – mehmet

0

the Vagrant docsから:

複数config.vm.provision方法は、複数のプロビジョナを定義するために使用することができます。これらのプロビジョナーは、定義された順序で実行されます。

例えば: まずマシンで人形をインストールしてから現れるいくつかの人形を実行します。

 

    $script = " 
    wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb 
    sudo dpkg -i puppetlabs-release-precise.deb 
    sudo apt-get update 
    sudo aptitude -yy install puppet 
    " 


    config.vm.provision "shell", inline: $script 

    config.vm.provision "puppet" do |puppet| 
     puppet.manifests_path = "manifest/puppet" 
     puppet.manifest_file = "init.pp" 
    end 

    config.vm.provision "shell", inline: "echo Second shell provisioner" 

+2

質問は、複数の「プロバイダ」ではなく「プロビジョナ」である – rravuri

+1

この質問は当初はプロビジョニストについて尋ねられた後、プロバイダについて質問するために編集されました。 – hekevintran

1

をローカルで実行可能なVMを実行するには: vagrant up --provider=virtualbox 、あなたはVMを実行したい場合別のプロバイダを使用すると、次のように使用できます。 vagrant up --provider=aws

ただし、使用する前に適切なプロバイダプラグインをインストールする必要があります。

4

各プロバイダ

> vagrant box add precise64 http://file.vagrantup.com/precise64.box 
> vagrant box add precise64 http://file.vagrantup.com/precise64_vmware_fusion.box 

ためのボックスを追加し、Vagrantfileが

Vagrant.configure(2) do |config| 
    config.vm.box="precise64" 

    config.vm.provider "virtualbox" do |v| 
    v.customize ["modifyvm", :id, "--memory", "2048"] 
    end 

    config.vm.provider "vmware_fusion" do |v| 
    v.vmx["memsize"] = "2048" 
    end 
end 

ようになるはずですし、次のコマンド

> vagrant up --provider=virtualbox 
> vagrant up --provider=vmware_fusion 
0

を使用して、各プロバイダに作成働くこのgist posted by @tknerrをご確認くださいバーチャルボックス、AWSなどのすべてのプロバイダと組み合わせ、コンビネーションで管理vagrant-omnibusプラグインとのアトオンここでVagrantfileからのコードは次のとおりです。

# 
# Vagrantfile for testing 
# 
Vagrant::configure("2") do |config| 

    # the Chef version to use 
    config.omnibus.chef_version = "11.4.4" 

    def configure_vbox_provider(config, name, ip, memory = 384) 
    config.vm.provider :virtualbox do |vbox, override| 
     # override box url 
     override.vm.box = "opscode_ubuntu-13.04_provisionerless" 
     override.vm.box_url = "https://opscode-vm.s3.amazonaws.com/vagrant/opscode_ubuntu-13.04_provisionerless.box" 
     # configure host-only network 
     override.vm.hostname = "#{name}.local" 
     override.vm.network :private_network, ip: ip 
     # enable cachier for local vbox vms 
     override.cache.auto_detect = true 

     # virtualbox specific configuration 
     vbox.customize ["modifyvm", :id, 
     "--memory", memory, 
     "--name", name 
     ] 
    end 
    end 

    def configure_aws_provider(config) 
    config.vm.provider :aws do |aws, override| 
     # use dummy box 
     override.vm.box = "aws_dummy_box" 
     override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box" 
     # override ssh user and private key 
     override.ssh.username = "ubuntu" 
     override.ssh.private_key_path = "#{ENV['HOME']}/.ssh/mccloud_rsa" 

     # aws specific settings 
     aws.access_key_id = "XXXX" 
     aws.secret_access_key = "XXXXX" 
     aws.ami = "ami-524e4726" 
     aws.region = "eu-west-1" 
     aws.availability_zone = "eu-west-1c" 
     aws.instance_type = "m1.small" 
     aws.security_groups = [ "mccloud", "http" ] 
     aws.keypair_name = "mccloud-key-tlc" 
    end 
    end 

    def configure_managed_provider(config, server) 
    config.vm.provider :managed do |managed, override| 
     # use dummy box 
     override.vm.box = "managed_dummy_box" 
     override.vm.box_url = "https://github.com/tknerr/vagrant-managed-servers/raw/master/dummy.box" 

     # link with this server 
     managed.server = server 
    end 
    end 

# 
# define a separate VMs for the 3 providers (vbox, aws, managed) 
# because with Vagrant 1.2.2 you can run a VM with only one provider at once 
# 
[:aws, :vbox, :esx].each do |provider| 
    # 
    # Sample VM per provider 
    # 
    config.vm.define :"sample-app-#{provider}" do | sample_app_config | 

    case provider 
    when :vbox 
     configure_vbox_provider(sample_app_config, "sample-app", "33.33.40.10") 
    when :aws 
     configure_aws_provider(sample_app_config) 
    when :esx  
     configure_managed_provider(sample_app_config, "33.33.77.10") 
    end 

    sample_app_config.vm.provision :chef_solo do |chef| 
     chef.cookbooks_path = [ './cookbooks/sample-app-0.1.0' ] 
     chef.add_recipe "sample-app" 
     chef.json = { 
     :sample_app => { 
      :words_of_wisdom => "Vagrant on #{provider} Rocks!" 
     } 
     } 
    end 
    end 
end 

end 
0

あなたは--providerパラメータで実行したいプロバイダを選択することができます。ここで

は、あなたが選択しているプロバイダによって異なるVMを実行することができますVagrantfileでRubyのコードは次のとおりです。

require 'getoptlong' 

# Parse CLI arguments. 
opts = GetoptLong.new(
    [ '--provider',  GetoptLong::OPTIONAL_ARGUMENT ], 
) 

provider='virtualbox' 
begin 
    opts.each do |opt, arg| 
    case opt 
     when '--provider' 
     provider=arg 
    end # case 
    end # each 
    rescue 
end 

# Vagrantfile API/syntax version. 
Vagrant.configure(2) do |config| 

    config.vm.hostname = "vagrant" 
    config.vm.define "default-#{provider}" 

    config.vm.provider "virtualbox" do |vbox, override| 
    vbox.customize ['modifyvm', :id, '--natdnshostresolver1', 'on'] 
    vbox.name = "test.local" 
    override.vm.box = "ubuntu/wily64" 
    override.vm.network "private_network", ip: "192.168.22.22" 
    end 

    config.vm.provider :aws do |aws, override| 
    aws.ami = "ami-7747d01e" 
    aws.instance_type = "m3.medium" 
    override.vm.box = "dummy" 
    override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box" 
    override.ssh.username = "ubuntu" 
    end 

end 

ので、デフォルトのプロバイダでVirtualBoxのですが、同じように、コマンドラインから指定することができます。

vagrant up --provider=aws 
0

はい、あなたは例えば、config.vm.defineメソッド呼び出しを使用して複数のマシンを指定することができます。

Vagrant.configure("2") do |config| 
    config.vm.provision "shell", inline: "echo Hello" 

    config.vm.define "web" do |web| 
    web.vm.box = "apache" 
    end 

    config.vm.define "db" do |db| 
    db.vm.box = "mysql" 
    end 
end 

参照:Defining multiple machines at Vagranup DocsおよびProviders

関連する問題