J'ai un fichier vagabond qui construit une VM locale. Je veux ajouter le fournisseur EC2 et avoir la possibilité de provisionner une VM locale ou une provision sur EC2. Puis-je créer des configs pour plusieurs fournisseurs dans le même fichier Vagrantfile et choisir d'une manière ou d'une autre à exécuter vagrant up
?Plusieurs fournisseurs dans un seul fichier vagabond?
Répondre
Vous pouvez utiliser un environnement multi-vm, où chaque VM peut être configurée avec un fournisseur différent et vous pouvez choisir sur la ligne de commande celle que vous voulez vagrant up <machine>
.
OK merci, je n'avais pas pensé à cela. – jbrown
Pour les futurs lecteurs: J'ai modifié la question pour les appeler «fournisseurs» plutôt que «fournisseurs». – Peeja
Notez simplement que vous ne pouvez pas avoir plusieurs fournisseurs en cours d'exécution en même temps. Dans ce cas, vous devez utiliser un environnement multi-machine. – mehmet
De the Vagrant docs:
méthodes de config.vm.provision multiples peuvent être utilisés pour définir plusieurs approvisionneurs. Ces fournisseurs seront exécutés dans l'ordre dans lequel ils sont définis.
.: par exemple d'abord installer la marionnette dans la machine et puis exécutez une marionnette manifeste:
$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"
la question concernait plusieurs 'fournisseurs' et non 'fournisseurs' – rravuri
La question a été posée à l'origine à propos des fournisseurs, puis éditée pour poser des questions sur les fournisseurs. – hekevintran
Pour exécuter VM vous pouvez exécuter localement: vagrant up --provider=virtualbox
et si vous voulez exécuter VM en utilisant un fournisseur différent, vous pouvez utiliser: vagrant up --provider=aws
Toutefois, n'oubliez pas que vous devez installer le plugin fournisseur approprié avant de l'utiliser.
boîte ajouter pour chaque fournisseur
> vagrant box add precise64 http://file.vagrantup.com/precise64.box
> vagrant box add precise64 http://file.vagrantup.com/precise64_vmware_fusion.box
et votre Vagrantfile devrait ressembler à
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
puis créer sur chaque fournisseur en utilisant les commandes suivantes
> vagrant up --provider=virtualbox
> vagrant up --provider=vmware_fusion
S'il vous plaît vérifier ce gist posted by @tknerr qui fonctionne avec tous les fournisseurs tels que virtualbox, AWS et géré en combinaison avec le plugin vagabond-omnibus. Voici le code de 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
Vous pouvez choisir quel fournisseur vous souhaitez exécuter par --provider
paramètre.
est le code rubis Ici Vagrantfile
qui peut exécuter différentes VM en fonction de quel fournisseur vous avez choisi:
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
donc par le fournisseur par défaut est VirtualBox, mais vous pouvez spécifier à partir de la ligne de commande, comme:
vagrant up --provider=aws
Oui, vous pouvez spécifier plusieurs machines en utilisant l'appel de méthode config.vm.define
, par exemple:
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
Voir: Defining multiple machines at Vagranup Docs et Providers
- 1. Plusieurs documents dans un seul fichier HTML
- 2. Lire un seul fichier avec plusieurs BufferedReaders
- 3. Plusieurs fournisseurs web api
- 4. Exécuter un script python dans le vagabond
- 5. Django-Socialauth - Comment associer plusieurs fournisseurs d'authentification à un seul compte d'utilisateur
- 6. écriture de plusieurs nœuds xml dans un seul fichier xml
- 7. AVAssetWriter: comment écrire plusieurs fois dans un seul fichier
- 8. Ajout de plusieurs servlets dans un seul fichier web.xml
- 9. Téléchargement ftp de plusieurs fichiers volumineux dans un seul fichier
- 10. Plusieurs clés publiques SSH dans un seul fichier
- 11. C++ fprintf sur plusieurs fonctions dans un seul fichier texte
- 12. Utilisation de plusieurs threads pour écrire dans un seul fichier
- 13. Télécharger un seul fichier avec plusieurs connexions dans Java?
- 14. plusieurs classes dans un seul fichier physique sur Android
- 15. charger plusieurs vidéos dans un seul fichier flash
- 16. écrire plusieurs fichiers audio dans un seul fichier en python
- 17. Comment faire plusieurs connexions SSH dans un seul fichier PHP
- 18. Gérer plusieurs « documents » XML dans un seul fichier avec Perl
- 19. Combinaison de plusieurs pages CSS dans un seul fichier
- 20. lire plusieurs fichier flv dans un seul objet swf
- 21. Cibler plusieurs API dans un seul fichier APK
- 22. Utilisation de plusieurs fournisseurs dans OAuth
- 23. ASP.Net forms authentication - plusieurs fournisseurs
- 24. tests sur plusieurs fournisseurs SGBD
- 25. Comment enregistrer plusieurs fournisseurs d'authentification dans Symfony2?
- 26. Angular2: Comment remplacer plusieurs fournisseurs dans TestComponentBuilder
- 27. Authentification WCF avec plusieurs fournisseurs
- 28. Animation dans un seul fichier
- 29. Plusieurs .gitignores dans un seul projet
- 30. Localisation dans un seul fichier .string (XCODE)
Il convient de noter que le terme « approvisionneur » ne va pas dans ce contexte. Il devrait être appelé "fournisseur" - mais je ne veux pas entrer dans une guerre d'édition ici – ChrisWue