User Tools

Site Tools


технология_vagrant

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
технология_vagrant [2022/08/17 11:22]
val [Внутри Vagrantfile]
технология_vagrant [2022/09/28 16:52]
val [Внутри Vagrantfile]
Line 1: Line 1:
 ====== Технология Vagrant ====== ====== Технология Vagrant ======
 +
 +  * [[https://​ru.wikipedia.org/​wiki/​Vagrant|HashiCorp Vagrant]]
  
   * [[https://​www.vagrantup.com/​|Vagrant - Development Environments Made Easy]]   * [[https://​www.vagrantup.com/​|Vagrant - Development Environments Made Easy]]
Line 7: Line 9:
   * [[https://​oracle-base.com/​articles/​vm/​create-a-vagrant-base-box-virtualbox|Create a Vagrant Base Box (VirtualBox)]]   * [[https://​oracle-base.com/​articles/​vm/​create-a-vagrant-base-box-virtualbox|Create a Vagrant Base Box (VirtualBox)]]
  
-  * [[https://​www.vultr.com/​docs/​stop-dhcp-from-changing-resolve-conf/​|Stop DHCP From Changing resolv.conf]] 
  
 ===== Установка ===== ===== Установка =====
  
-  * [[https://​val.bmstu.ru/​unix/​HashiCorp/​vagrant_2.2.10_x86_64.msi]]+  * [[https://​val.bmstu.ru/​unix/​HashiCorp/​vagrant_2.2.10_x86_64.msi]] ​ 
 +  * Можно не перезагружать систему,​ но нужно перезапустить Cmder
  
 ===== Подготовка командной строки ===== ===== Подготовка командной строки =====
  
-==== win cmd === 
  
-<​code>​ 
-C:​\Users\Administrator>​ C:​\HashiCorp\Vagrant\bin\vagrant.exe 
-</​code>​ 
  
 ==== Cmder ==== ==== Cmder ====
  
   * [[Cmder]]   * [[Cmder]]
- 
 <​code>​ <​code>​
-λ alias vagrant=C:​\HashiCorp\Vagrant\bin\vagrant.exe $* 
- 
 λ bash λ bash
  
-$ alias vagrant=C:/​\HashiCorp/​\Vagrant/​\bin/​\vagrant.exe $* +λ cd
-или +
-$ alias vagrant=/​c/​HashiCorp/​Vagrant/​bin/​vagrant.exe+
 </​code>​ </​code>​
  
-==== mobaxterm ==== +
-<​code>​ +
-mobaxterm>​ alias vagrant=/​drives/​c/​HashiCorp/​Vagrant/​bin/​vagrant.exe $* +
-</​code>​+
  
  
Line 45: Line 35:
   * [[https://​oracle-base.com/​articles/​vm/​create-a-vagrant-base-box-virtualbox|Create a Vagrant Base Box (VirtualBox)]] + [[https://​bbs.archlinux.org/​viewtopic.php?​id=270005|[SOLVED] Latest sshd not accepting key algorithms]]   * [[https://​oracle-base.com/​articles/​vm/​create-a-vagrant-base-box-virtualbox|Create a Vagrant Base Box (VirtualBox)]] + [[https://​bbs.archlinux.org/​viewtopic.php?​id=270005|[SOLVED] Latest sshd not accepting key algorithms]]
   * [[https://​vagrantcloud.com/​debian/​bullseye64]]   * [[https://​vagrantcloud.com/​debian/​bullseye64]]
 +
 +  * [[https://​val.bmstu.ru/​unix/​HashiCorp/​ubuntu_20.04.box]]
 +
 +  * [[Переменные окружения]]
 +  * [[https://​stackoverflow.com/​questions/​19872591/​how-to-use-vagrant-in-a-proxy-environment|How to use vagrant in a proxy environment?​]]
  
 <​code>​ <​code>​
Line 58: Line 53:
  
 $ vagrant box list $ vagrant box list
 +
 +$ ### vagrant box remove specialist/​ubuntu20
 </​code>​ </​code>​
  
Line 79: Line 76:
  
 $ vagrant global-status $ vagrant global-status
 +
 +$ vagrant global-status --prune
  
 $ vagrant halt $ vagrant halt
Line 85: Line 84:
 </​code>​ </​code>​
  
-===== Управление оборудованием и Provision =====+===== Управление ​конфигурацией,​ использование переменных ​и Provision ​VM =====
  
   * [[https://​www.vagrantup.com/​docs/​provisioning|Provisioners in Vagrant]]   * [[https://​www.vagrantup.com/​docs/​provisioning|Provisioners in Vagrant]]
   * [[https://​www.vagrantup.com/​docs/​provisioning/​basic_usage|Basic Usage of Provisioners]]   * [[https://​www.vagrantup.com/​docs/​provisioning/​basic_usage|Basic Usage of Provisioners]]
   * [[https://​www.vagrantup.com/​docs/​networking/​public_network|Vagrant public networks]]   * [[https://​www.vagrantup.com/​docs/​networking/​public_network|Vagrant public networks]]
 +
 ==== Внутри Vagrantfile ==== ==== Внутри Vagrantfile ====
  
Line 96: Line 96:
  
 <​code>​ <​code>​
-λ npp Vagrantfile ​& +λ touch Vagrantfile 
-</​code>​ +</​code><​code>​
- +
-  Параметр virtualbox__intnet можно не указывать,​ установлен в false по умолчанию +
- +
-<​code>​+
 ... ...
 X = "​13"​ X = "​13"​
Line 114: Line 110:
   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 123: Line 119:
 #    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 138: Line 135:
   config.vm.provision "​provision_onstart",​ run: "​always",​ type: "​shell", ​   config.vm.provision "​provision_onstart",​ run: "​always",​ type: "​shell", ​
     env: {     env: {
- "​X"​ => X+ "​X"​ => X,
  },  },
     inline: <<​-SHELL     inline: <<​-SHELL
Line 159: Line 156:
 </​code>​ </​code>​
 <​code>​ <​code>​
 +λ vagrant up
 +
 λ vagrant reload --provision λ vagrant reload --provision
 </​code>​ </​code>​
 +
 ==== Provision с использованием внешних скриптов ==== ==== Provision с использованием внешних скриптов ====
 +
 +  * [[https://​stackoverflow.com/​questions/​15461898/​passing-variable-to-a-shell-script-provisioner-in-vagrant|Passing variable to a shell script provisioner in vagrant]]
  
 <​code>​ <​code>​
-λ npp provision_once.sh ​&+λ touch provision_once.sh
 </​code><​code>​ </​code><​code>​
-#sed -i '​s/​PasswordAuthentication no/​PasswordAuthentication yes/g' /​etc/​ssh/​sshd_config 
 #echo '​root:​strongpassword'​ | chpasswd #echo '​root:​strongpassword'​ | chpasswd
 +#sed -i '​s/​PasswordAuthentication no/​PasswordAuthentication yes/g' /​etc/​ssh/​sshd_config
 +#service ssh restart
  
 echo '​vagrant:​strongpassword'​ | chpasswd echo '​vagrant:​strongpassword'​ | chpasswd
 +
 +(echo '"​\e[A":​ history-search-backward';​ echo '"​\e[B":​ history-search-forward'​) >> /​etc/​inputrc
  
 timedatectl set-timezone Europe/​Moscow timedatectl set-timezone Europe/​Moscow
  
-apt-get update +apt update 
-#apt-get install -y net-tools+#apt install -y docker.io
 </​code><​code>​ </​code><​code>​
-λ npp provision_onstart.sh ​&+λ touch provision_onstart.sh
 </​code><​code>​ </​code><​code>​
-route add default gw 192.168.X.1+X=$1 
 + 
 +echo $X 
 + 
 +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; }'` eval `route -n | awk '{ if ($8 =="​eth0"​ && $2 != "​0.0.0.0"​) print "route del default gw " $2; }'`
  
 chattr -i /​etc/​resolv.conf chattr -i /​etc/​resolv.conf
-echo -e 'search ​corpX.un\nnameserver 192.168.X.10' ​> /​etc/​resolv.conf+echo -e "search ​corp$X.un\nnameserver 192.168.$X.10" ​> /​etc/​resolv.conf
 chattr +i /​etc/​resolv.conf chattr +i /​etc/​resolv.conf
  
 echo "​net.ipv4.ip_forward=1"​ > /​etc/​sysctl.d/​20-my-forward.conf && sysctl -p --system echo "​net.ipv4.ip_forward=1"​ > /​etc/​sysctl.d/​20-my-forward.conf && sysctl -p --system
 </​code><​code>​ </​code><​code>​
-λ npp Vagrantfile+λ cat Vagrantfile
 </​code><​code>​ </​code><​code>​
 ... ...
Line 194: Line 203:
  
   config.vm.provision "​provision_once",​ type: "​shell",​ run: "​once",​ path: "​provision_once.sh"​   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"​+ 
 +  ​config.vm.provision "​provision_onstart",​ type: "​shell",​ run: "​always", ​ 
 +    args: X + " 2_arg 3_arg",​  
 +    ​path: "​provision_onstart.sh"​
  
 ### /My provision ### ### /My provision ###
Line 211: Line 223:
 λ cat Vagrantfile λ cat Vagrantfile
 ... ...
-  config.vm.provision "​provision_docker",​ type: "​ansible_local",​ run: "always" do |ansible|+  config.vm.provision "​provision_docker",​ type: "​ansible_local",​ run: "once" do |ansible|
     ansible.playbook = "​provision_docker.yml"​     ansible.playbook = "​provision_docker.yml"​
   end   end
 ... ...
 </​code><​code>​ </​code><​code>​
-$ vagrant provision --provision-with provision_docker+time vagrant provision --provision-with provision_docker 
 +real    11m2,127s
 </​code>​ </​code>​
  
 ===== 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?​]] 
 + 
 +<​code>​ 
 +λ vagrant destroy 
 + 
 +λ touch nodes.yaml 
 +</​code><​code>​ 
 +- name: "​node1"​ 
 +  ip: "​201"​ 
 +- name: "​node2"​ 
 +  ip: "​202"​ 
 +- name: "​node3"​ 
 +  ip: "​203"​ 
 +</​code><​code>​ 
 +λ npp Vagrantfile 
 +</​code><​code>​ 
 +... 
 +require '​yaml'​ 
 +nodes YAML.load_file("​./​nodes.yaml"​) 
 + 
 +Vagrant.configure("​2"​) do |config| 
 + 
 +### My config ### 
 +  nodes.each do |opts|  
 +    config.vm.define opts["​name"​] do |config| 
 +      config.vm.network "​private_network",​ ip: "​192.168."​ + X + "​."​ + opts["​ip"​] 
 +      config.vm.hostname = opts["​name"​] 
 +    
 +      config.vm.provider :virtualbox do |vb| 
 +        # vb.name = opts["​name"​] 
 +        vb.memory = "​2048"​ 
 +        vb.cpus = "​2"​ 
 + 
 +        # 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 
 +    end 
 +  end 
 +### /My config ### 
 +... 
 +</​code><​code>​ 
 +λ ### cd ~/​conf/​vagrant/​nodes ​ #!!! set X in Vagrantfile 
 + 
 +λ vagrant up node1 
 + 
 +λ vagrant up 
 + 
 +λ vagrant up --parallel 
 + 
 +λ vagrant ssh node2 
 + 
 +λ ### vagrant destroy node1 
 + 
 +λ ### vagrant destroy -f 
 +</​code>​ 
 + 
 +===== Дополнительные возможности ===== 
 + 
 +==== Использование синхронизируемых каталогов ==== 
 + 
 +<​code>​ 
 +λ cat Vagrantfile 
 +</​code><​code>​ 
 +... 
 +#  config.vm.synced_folder "​.",​ "/​vagrant",​ type: "​rsync",​ rsync__exclude:​ "​.git/"​ 
 +... 
 +</​code><​code>​ 
 +λ npp SomeFile 
 +... 
 + 
 +λ vagrant rsync 
 + 
 +λ vagrant ssh 
 + 
 +vagrant@node3:​~$ ls /vagrant/ 
 +</​code><​code>​ 
 +... 
 +Vagrantfile 
 +... 
 +SomeFile 
 +... 
 +</​code>​ 
 + 
 +==== Еще варианты Multi-Machine Vagrant Environments ==== 
 + 
 +=== Внутри Vagrantfile ===
  
   * [[https://​www.vagrantup.com/​docs/​multi-machine|Multi-Machine]]   * [[https://​www.vagrantup.com/​docs/​multi-machine|Multi-Machine]]
Line 249: Line 352:
 </​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 314: Line 417:
 </​code>​ </​code>​
  
-==== С использованием json ====+=== С использованием json ===
  
   * [[Формат JSON]]   * [[Формат JSON]]
Line 363: Line 466:
       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|
Line 388: Line 483:
  
 end end
-</​code>​ 
-<​code>​ 
-λ vagrant up node1 
- 
-λ vagrant up 
- 
-λ vagrant ssh node2 
- 
-λ vagrant destroy node3 
- 
-λ vagrant destroy -f 
-</​code>​ 
- 
-===== Дополнительные возможности ===== 
- 
- 
- 
-==== Использование синхронизируемых каталогов ==== 
- 
-<​code>​ 
-λ cat Vagrantfile 
-</​code><​code>​ 
-... 
-#  config.vm.synced_folder "​.",​ "/​vagrant",​ type: "​rsync",​ rsync__exclude:​ "​.git/"​ 
-... 
-</​code><​code>​ 
-λ npp SomeFile 
-... 
- 
-λ vagrant rsync 
- 
-λ vagrant ssh 
- 
-vagrant@node3:​~$ ls /vagrant/ 
-</​code><​code>​ 
-... 
-Vagrantfile 
-... 
-SomeFile 
-... 
 </​code>​ </​code>​
технология_vagrant.txt · Last modified: 2024/03/11 19:00 by val