Vagrant 一个文件中有多个提供者?
我有一个构建本地虚拟机的流浪文件。我想添加EC2提供程序,并可以选择提供本地VM或EC2上的VM 我是否可以在同一个vagrant文件中为多个提供程序创建配置,并在执行vagrant up时以某种方式选择运行哪个提供程序?您可以使用一个环境,在该环境中,每个VM都可以配置不同的提供程序,并且您可以在命令行上选择要从哪个提供程序运行: 可以使用多个config.vm.provision方法定义多个provisioner。这些供应器将按照定义的顺序运行 例如: 首先在计算机中安装puppet,然后运行一些puppet清单: $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" $script=” wgethttp://apt.puppetlabs.com/puppetlabs-release-precise.deb sudo dpkg-i puppettelabs-release-precise.deb 更新源 sudo智能-yy安装木偶 " config.vm.provision“shell”,内联:$script config.vm.provision“puppet”do | puppet| puppet.manifests\u path=“manifest/puppet” puppet.manifest\u file=“init.pp” 结束 config.vm.provision“shell”,内联:“echo Second shell provisioner”Vagrant 一个文件中有多个提供者?,vagrant,vagrantfile,Vagrant,Vagrantfile,我有一个构建本地虚拟机的流浪文件。我想添加EC2提供程序,并可以选择提供本地VM或EC2上的VM 我是否可以在同一个vagrant文件中为多个提供程序创建配置,并在执行vagrant up时以某种方式选择运行哪个提供程序?您可以使用一个环境,在该环境中,每个VM都可以配置不同的提供程序,并且您可以在命令行上选择要从哪个提供程序运行: 可以使用多个config.vm.provision方法定义多个provisioner。这些供应器将按照定义的顺序运行 例如: 首先在计算机中安装puppet,然后运
要在本地运行VM,您可以运行:
vagrant up--provider=virtualbox
如果您想使用不同的提供程序运行VM,则可以使用:
vagrant up--provider=aws
但是,请记住,您必须先安装适当的提供程序插件,然后才能使用它。为每个提供程序添加框
> vagrant box add precise64 http://file.vagrantup.com/precise64.box
> vagrant box add precise64 http://file.vagrantup.com/precise64_vmware_fusion.box
你的流浪汉档案应该是这样的
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
请检查这一点,它与所有的供应商,如virtualbox,AWS和managed结合使用的vagrant综合插件。这是Vagrant文件中的代码:
#
# 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
您可以通过
--provider
参数选择要运行的提供程序
下面是Vagrantfile
中的ruby代码,它可以运行不同的VM,具体取决于您选择的提供程序:
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
是的,您可以使用
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
请参阅:和供未来读者参考:我编辑了这个问题,将它们称为“提供者”,而不是“供应者”。请注意,不能同时运行多个提供者。在这种情况下,您必须使用多机环境。问题是关于多个“提供程序”而不是“提供程序”。问题最初是关于提供程序的,然后经过编辑以询问提供程序。应注意,在这种情况下,“提供程序”一词是错误的。它应该被称为“提供者”——但我不想在这里卷入编辑大战