This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
технология_vagrant [2022/08/17 14:31] val |
технология_vagrant [2022/08/17 15:16] val |
||
---|---|---|---|
Line 111: | Line 111: | ||
config.vm.network "private_network", ip: "192.168." + X + ".201" | config.vm.network "private_network", ip: "192.168." + X + ".201" | ||
- | # config.vm.provider "virtualbox" do |vb| | + | config.vm.provider "virtualbox" do |vb| |
- | # vb.memory = "2048" | + | vb.memory = "2048" |
- | # vb.cpus = "2" | + | vb.cpus = "2" |
# file_to_disk = config.vm.hostname + '_disk2.vdi' | # file_to_disk = config.vm.hostname + '_disk2.vdi' | ||
Line 120: | Line 120: | ||
# end | # end | ||
# vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', file_to_disk] | # vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', file_to_disk] | ||
- | # end | + | |
+ | end | ||
| | ||
### /My config ### | ### /My config ### | ||
Line 227: | Line 228: | ||
===== Multi-Machine Vagrant Environments ===== | ===== Multi-Machine Vagrant Environments ===== | ||
- | ==== Внутри Vagrantfile ==== | + | * [[https://blog.scottlowe.org/2014/10/22/multi-machine-vagrant-with-yaml/|Multi-Machine Vagrant with YAML]] |
- | + | * [[https://stackoverflow.com/questions/16708917/how-do-i-include-variables-in-my-vagrantfile|How do I include variables in my VagrantFile?]] | |
- | * [[https://www.vagrantup.com/docs/multi-machine|Multi-Machine]] | + | |
<code> | <code> | ||
- | λ npp Vagrantfile | + | λ mkdir ~/nodes |
- | </code><code> | + | |
- | ... | + | |
- | Vagrant.configure("2") do |config| | + | |
- | ### My config ### | + | λ cd ~/nodes |
- | config.vm.define "node1" do |node1| | + | λ npp nodes.yaml & |
- | node1.vm.network "private_network", ip: "192.168.X.201" | + | |
- | end | + | |
- | + | ||
- | config.vm.define "node2" do |node2| | + | |
- | node2.vm.network "private_network", ip: "192.168.X.202" | + | |
- | end | + | |
- | + | ||
- | config.vm.define "node3" do |node3| | + | |
- | node3.vm.network "private_network", ip: "192.168.X.203" | + | |
- | end | + | |
- | + | ||
- | ### /My config ### | + | |
- | ... | + | |
- | </code> | + | |
- | + | ||
- | ==== С использованием структур данных ruby ==== | + | |
- | + | ||
- | * [[https://github.com/hashicorp/vagrant/issues/9200|Vagrant is assigning the same MAC to two different VMs?]] | + | |
- | + | ||
- | <code> | + | |
- | boxes = [ | + | |
- | { | + | |
- | :name => "node1", | + | |
- | :ip => "192.168.X.201", | + | |
- | :vbox_config => [ | + | |
- | { "--cpus" => "2" }, | + | |
- | { "--memory" => "2048" } | + | |
- | ], | + | |
- | }, | + | |
- | { | + | |
- | :name => "node2", | + | |
- | :ip => "192.168.X.202", | + | |
- | :vbox_config => [ | + | |
- | { "--cpus" => "2" }, | + | |
- | { "--memory" => "2048" } | + | |
- | ], | + | |
- | }, | + | |
- | { | + | |
- | :name => "node3", | + | |
- | :ip => "192.168.X.203", | + | |
- | :vbox_config => [ | + | |
- | { "--cpus" => "2" }, | + | |
- | { "--memory" => "2048" } | + | |
- | ], | + | |
- | } | + | |
- | ] | + | |
- | + | ||
- | Vagrant.configure("2") do |config| | + | |
- | + | ||
- | ### My config ### | + | |
- | boxes.each do |opts| | + | |
- | config.vm.define opts[:name] do |config| | + | |
- | config.vm.network "private_network", ip: opts[:ip] | + | |
- | config.vm.hostname = opts[:name] | + | |
- | + | ||
- | # config.vm.provider "virtualbox" do | vb | | + | |
- | # file_to_disk = opts[:name] + '_2.vdi' | + | |
- | # unless File.exist?(file_to_disk) | + | |
- | # vb.customize ['createhd', '--filename', file_to_disk, '--size', 4 * 1024] | + | |
- | # end | + | |
- | # vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', file_to_disk] | + | |
- | # end | + | |
- | + | ||
- | opts[:vbox_config].each do |hash| | + | |
- | hash.each do |key, value| | + | |
- | config.vm.provider :virtualbox do |vb| | + | |
- | vb.customize ["modifyvm", :id, key, value] | + | |
- | end | + | |
- | end | + | |
- | end | + | |
- | end | + | |
- | end | + | |
- | + | ||
- | ### /My config ### | + | |
- | + | ||
- | ... | + | |
- | + | ||
- | end | + | |
- | </code> | + | |
- | + | ||
- | ==== С использованием json ==== | + | |
- | + | ||
- | * [[Формат JSON]] | + | |
- | * [[https://blog.scottlowe.org/2016/01/18/multi-machine-vagrant-json/|Multi-Machine Vagrant Environments with JSON]] | + | |
- | + | ||
- | <code> | + | |
- | λ npp nodes.json & | + | |
</code><code> | </code><code> | ||
- | [ | + | - name: "node1" |
- | { | + | ip: "201" |
- | "name": "node1", | + | - name: "node2" |
- | "ip": "192.168.X.201", | + | ip: "202" |
- | "vbox_config": [ | + | - name: "node3" |
- | { "--cpus": "2" }, | + | ip: "203" |
- | { "--memory": "2048" } | + | |
- | ] | + | |
- | }, | + | |
- | { | + | |
- | "name": "node2", | + | |
- | "ip": "192.168.X.202", | + | |
- | "vbox_config": [ | + | |
- | { "--cpus": "2" }, | + | |
- | { "--memory": "2048" } | + | |
- | ] | + | |
- | }, | + | |
- | { | + | |
- | "name": "node3", | + | |
- | "ip": "192.168.X.203", | + | |
- | "vbox_config": [ | + | |
- | { "--cpus": "2" }, | + | |
- | { "--memory": "2048" } | + | |
- | ] | + | |
- | } | + | |
- | ] | + | |
</code><code> | </code><code> | ||
- | $ cat Vagrantfile | + | λ npp Vagrantfile |
</code><code> | </code><code> | ||
- | require 'json' | + | ... |
- | boxes = JSON.parse(File.read('./nodes.json')) | + | require 'yaml' |
+ | nodes = YAML.load_file("./nodes.yaml") | ||
Vagrant.configure("2") do |config| | Vagrant.configure("2") do |config| | ||
### My config ### | ### My config ### | ||
- | + | nodes.each do |opts| | |
- | boxes.each do |opts| | + | |
config.vm.define opts["name"] do |config| | config.vm.define opts["name"] do |config| | ||
- | + | config.vm.network "private_network", ip: "192.168." + X + "." + opts["ip"] | |
- | config.vm.network "private_network", ip: opts["ip"] | + | |
config.vm.hostname = opts["name"] | config.vm.hostname = opts["name"] | ||
+ | | ||
+ | config.vm.provider :virtualbox do |vb| | ||
+ | # vb.name = opts["name"] | ||
+ | vb.memory = "2048" | ||
+ | vb.cpus = "2" | ||
- | # config.vm.provider "virtualbox" do | vb | | + | # file_to_disk = opts["name"] + '_2.vdi' |
- | # file_to_disk = opts["name"] + '_2.vdi' | + | # unless File.exist?(file_to_disk) |
- | # unless File.exist?(file_to_disk) | + | # vb.customize ['createhd', '--filename', file_to_disk, '--size', 4 * 1024] |
- | # vb.customize ['createhd', '--filename', file_to_disk, '--size', 4 * 1024] | + | # end |
- | # end | + | # vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', file_to_disk] |
- | # vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', file_to_disk] | + | |
- | # end | + | |
- | opts["vbox_config"].each do |hash| | ||
- | hash.each do |key, value| | ||
- | config.vm.provider :virtualbox do |vb| | ||
- | vb.customize ["modifyvm", :id, key, value] | ||
- | end | ||
- | end | ||
end | end | ||
- | |||
end | end | ||
end | end | ||
- | |||
### /My config ### | ### /My config ### | ||
- | |||
... | ... | ||
- | + | </code><code> | |
- | end | + | |
- | </code> | + | |
- | <code> | + | |
λ vagrant up node1 | λ vagrant up node1 | ||
Line 408: | Line 288: | ||
===== Дополнительные возможности ===== | ===== Дополнительные возможности ===== | ||
- | |||
- | |||
==== Использование синхронизируемых каталогов ==== | ==== Использование синхронизируемых каталогов ==== | ||
Line 436: | Line 314: | ||
</code> | </code> | ||
- | ===== Multi-Machine Vagrant Environments ===== | + | ==== Еще варианты Multi-Machine Vagrant Environments ==== |
- | ==== Внутри Vagrantfile ==== | + | === Внутри Vagrantfile === |
* [[https://www.vagrantup.com/docs/multi-machine|Multi-Machine]] | * [[https://www.vagrantup.com/docs/multi-machine|Multi-Machine]] | ||
Line 466: | Line 344: | ||
</code> | </code> | ||
- | ==== С использованием структур данных ruby ==== | + | === С использованием структур данных ruby === |
* [[https://github.com/hashicorp/vagrant/issues/9200|Vagrant is assigning the same MAC to two different VMs?]] | * [[https://github.com/hashicorp/vagrant/issues/9200|Vagrant is assigning the same MAC to two different VMs?]] | ||
Line 531: | Line 409: | ||
</code> | </code> | ||
- | ==== С использованием json ==== | + | === С использованием json === |
* [[Формат JSON]] | * [[Формат JSON]] | ||
Line 580: | Line 458: | ||
config.vm.network "private_network", ip: opts["ip"] | config.vm.network "private_network", ip: opts["ip"] | ||
config.vm.hostname = opts["name"] | config.vm.hostname = opts["name"] | ||
- | |||
- | # config.vm.provider "virtualbox" do | vb | | ||
- | # file_to_disk = opts["name"] + '_2.vdi' | ||
- | # unless File.exist?(file_to_disk) | ||
- | # vb.customize ['createhd', '--filename', file_to_disk, '--size', 4 * 1024] | ||
- | # end | ||
- | # vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', file_to_disk] | ||
- | # end | ||
opts["vbox_config"].each do |hash| | opts["vbox_config"].each do |hash| |