This is an old revision of the document!
C:\Users\Administrator> C:\HashiCorp\Vagrant\bin\vagrant.exe
λ bash $ alias vagrant=C:\HashiCorp\Vagrant\bin\vagrant.exe $*
mobaxterm> alias vagrant=/drives/c/HashiCorp/Vagrant/bin/vagrant.exe $*
$ vagrant box list $ vagrant box add debian/bullseye64 $ vagrant box list $ vagrant package --base ubuntu_20.04_03 --output /c/distrs/ubuntu_20.04.box $ vagrant box add /c/distrs/ubuntu_20.04.box --name specialist/ubuntu20 $ vagrant box list
$ mkdir node1
$ cd node1
... ~/node1
$ vagrant init specialist/ubuntu20
$ less Vagrantfile
...
config.vm.box = "specialist/ubuntu20"
...
$ vagrant up
$ vagrant ssh
$ vagrant global-status
$ vagrant halt
$ vagrant destroy
Демонстрирует преподаватель
λ npp Vagrantfile &
...
Vagrant.configure("2") do |config|
...
config.vm.network "private_network", ip: "192.168.X.210", virtualbox__intnet: false
config.vm.hostname = "node1.corpX.un"
config.vm.provision "provision_once", type: "shell", inline: <<-SHELL
apt-get update
timedatectl set-timezone Europe/Moscow
SHELL
config.vm.provision "provision_onstart", run: "always", type: "shell", inline: <<-SHELL
eval `route -n | awk '{ if ($8 ==\"eth0\" && $2 != \"0.0.0.0\") print \"route del default gw \" $2; }'`
route add default gw 192.168.X.1
cat <<EOF >/etc/resolv.conf
search corpX.un
nameserver 192.168.X.10
EOF
SHELL
end
λ vagrant reload --provision
λ npp provision_once.sh &
#sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config timedatectl set-timezone Europe/Moscow apt-get update
λ npp provision_onstart.sh &
route add default gw 192.168.X.1
eval `route -n | awk '{ if ($8 =="eth0" && $2 != "0.0.0.0") print "route del default gw " $2; }'`
echo -e 'search corpX.un\nnameserver 192.168.X.10' > /etc/resolv.conf
chattr +i /etc/resolv.conf
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/20-my-forward.conf && sysctl -p --system
λ npp Vagrantfile
... config.vm.provision "provision_once", type: "shell", run: "once", path: "provision_once.sh" config.vm.provision "provision_onstart", type: "shell", run: "always", path: "provision_onstart.sh" ...
λ vagrant provision --provision-with provision_once,provision_onstart
λ cat Vagrantfile
...
config.vm.provision "provision_docker", type: "ansible_local", run: "always" do |ansible|
ansible.playbook = "provision_docker.yml"
end
$ vagrant provision --provision-with provision_docker
$ mkdir ~/nodes $ cd ~/nodes $ vagrant init specialist/ubuntu20
λ npp Vagrantfile
...
Vagrant.configure("2") do |config|
config.vm.define "node3" do |node1|
node1.vm.network "private_network", ip: "192.168.X.210"
end
config.vm.define "node4" do |node2|
node2.vm.network "private_network", ip: "192.168.X.220"
end
config.vm.define "node5" do |node3|
node3.vm.network "private_network", ip: "192.168.X.230"
end
...
boxes = [
{
:name => "node1",
:ip => "192.168.X.210",
:vbox_config => [
{ "--cpus" => "2" },
{ "--memory" => "2048" }
],
},
{
:name => "node2",
:ip => "192.168.X.220",
:vbox_config => [
{ "--cpus" => "2" },
{ "--memory" => "2048" }
],
},
{
:name => "node3",
:ip => "192.168.X.230",
:vbox_config => [
{ "--cpus" => "2" },
{ "--memory" => "2048" }
],
}
]
Vagrant.configure("2") do |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', 5 * 1024]
end
vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--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
λ vagrant up λ vagrant ssh node2 λ vagrant destroy node3 λ vagrant destroy -f
addnodes -> nodes ?? node1 .. 3 ??
$ cat addnodes.json
[
{
"name": "node3",
"ip": "192.168.X.3",
"vbox_config": [
{ "--cpus": "1" },
{ "--memory": "1024" }
]
},
{
"name": "node4",
"ip": "192.168.X.4",
"vbox_config": [
{ "--cpus": "1" },
{ "--memory": "1024" }
]
},
{
"name": "node5",
"ip": "192.168.X.5",
"vbox_config": [
{ "--cpus": "1" },
{ "--memory": "1024" }
]
}
]
$ cat Vagrantfile
require 'json'
boxes = JSON.parse(File.read('./addnodes.json'))
Vagrant.configure("2") do |config|
boxes.each do |opts|
config.vm.define opts["name"] do |config|
config.vm.network "private_network", ip: opts["ip"],
virtualbox__intnet: true
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 Controller', '--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
# config.vm.box = "debian/buster64"
config.vm.box = "debian/bullseye64"
config.vm.provision "shell", inline: <<-SHELL
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
# sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
systemctl restart sshd.service
echo 'vagrant:123' | chpasswd
apt-get update
apt-get install -y net-tools
cat <<EOF >/etc/resolv.conf
search corpX.un
nameserver 192.168.X.254
EOF
SHELL
config.vm.provision "shell", run: "always",
inline: "route add default gw 192.168.X.254"
config.vm.provision "shell", run: "always",
inline: "eval `route -n | awk '{ if ($8 ==\"eth0\" && $2 != \"0.0.0.0\") print \"route del default gw \" $2; }'`"
end
λ cat Vagrantfile
... # config.vm.synced_folder ".", "/vagrant", type: "rsync", rsync__exclude: ".git/" ...
λ npp SomeFile ... λ vagrant rsync λ vagrant ssh vagrant@node3:~$ ls /vagrant/
... Vagrantfile ... SomeFile ...