Ссылки
https://www.vagrantup.com/docs - документация https://www.vagrantup.com/downloads - загрузка установщика Linux \ Mac \ Windows https://learn.hashicorp.com/tutorials/vagrant/getting-started-boxes - быстрый старт https://app.vagrantup.com/boxes/search - все возможные боксы (образы ВМ) https://wiki.archlinux.org/title/Vagrant
Команды
0. Создаем каталог и инициализируем vagrant mkdir primer0 - создали каталог primer0 cd primer0 - перешли в него vagrant init - выполнили инициализацию vagrant (Создался файл Vagrant) 1. Редактируем файл vim Vagrant 2. Управление vagrant up - запуск ВМ vagrant plugin install vagrant-libvirt - добавить плагин для libvirt #vagrant plugin install vagrant-vbguest vagrant-share - добавить плагин для vagrant plugin install vagrant-lxc - добавить плагин для lxc vagrant up --provider=libvirt - переназначаем провайдера (docker, virtualbox, vmware_fusion) vagrant shutdown - Остановка ВМ vagrant destroy - удалить ВМ vagrant ssh-config - показать параметры подключения (IP адрес ВМ) vagrant provision - выполнить provision (запуск скриптов ansible, bash) vagrant ssh - подключится к ВМ по ssh 3. Дополнительные возможности vagrant box add hashicorp/bionic64 - Скачать образ hashicorp/bionic64 (Ububntu 18.04) vagrant init hashicorp/bionic64 - Выполнили инициализацию с ВМ bionic (Ububntu 18.04)
Vagrant ubuntu 16.04 (no offcial)
Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu1604"
end
Vagrant ubuntu 16.04 (official virtualbox only)
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
end
Vagrant ubuntu 18.04 (no offcial)
Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu1804"
end
Vagrant ubuntu 20.04 (no offcial)
Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2004"
end
Vagrant ubuntu 20.10 (no offcial)
Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2010"
end
Vagrant debian 8
Vagrant.configure("2") do |config|
  config.vm.box = "debian/jessie64"
end
Vagrant debian 9
Vagrant.configure("2") do |config|
  config.vm.box = "debian/stretch64"
end
Vagrant debian 10
Vagrant.configure("2") do |config|
  config.vm.box = "debian/buster64"
end
Vagrant debian 11
Vagrant.configure("2") do |config|
  config.vm.box = "debian/bullseye64"
end
Vagrant CentOS 7
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end
Vagrant CentOS 8
Vagrant.configure("2") do |config|
  config.vm.box = "generic/centos8"
end
Vagrant Docker
Vagrant.configure("2") do |config|
  config.vm.provider "docker" do |d|
    d.image = "foo/bar"
  end
end
Vagrant пример №1 При развертывании есть возможность добавить копирование/синхронизацию каталога
Vagrant.configure("2") do |config|
  config.vm.box = "debian/jessie64"
  config.vm.synced_folder "app/", "/var/www/app"
end
Vagrant пример №2 При развертывании есть возможность настроить сеть например проброс портов
Vagrant.configure("2") do |config|
  config.vm.box = "debian/jessie64"
  config.vm.synced_folder "app/", "/var/www/app"
  config.vm.network "forward_port", guest: 8080, host:8081
end
Vagrant пример №3 Запуск программ и скриптов
Vagrant.configure("2") do |config|
  config.vm.box = "debian/jessie64"
  config.vm.synced_folder "app/", "/var/www/app"
  config.vm.network "forward_port", guest: 8080, host:8081
  config.vm.define "app" do |app|
    app.vm.provision "shell", line: "apt-get install -y nodejs npm"
  end
end
Vagrant пример №4 Запуск программ и скриптов
Vagrant.configure("2") do |config|
  config.vm.box = "debian/jessie64"
  config.vm.synced_folder "app/", "/var/www/app"
  config.vm.network "forward_port", guest: 8080, host:8081
  config.vm.define "app" do |app|
    app.vm.provision "shell", line: "apt-get install -y nodejs npm"
  end
end
Vagrant пример №5 Запуск программ и скриптов
Vagrant.configure("2") do |config|
  config.vm.box = "debian/jessie64"
  config.vm.synced_folder "app/", "/var/www/app"
  config.vm.network "forward_port", guest: 8080, host:8081
  config.vm.define "app" do |app|
    app.vm.provision "shell", line: "apt-get install -y nodejs npm"
  end
  $script - <<-SCRIPT
    apt-get install nodejs npm -y
  SCRIPT
  app.vm.provision "shell", inline: $script
  app.vm.provision "shell", path: "scripts/pre.sh"
end
Vagrant пример №6 Для настройки ВМ поддерживаются конфигурационные менеджеры, такие как Ansible, Chef, Puppet, Salt
Vagrant.configure("2") do |config|
  config.vm.box = "debian/jessie64"
  app.vm.provision "ansible_local" do |ansible|
  ansible.playbook = "playbooks/node.yaml"
  ansible.become = true
  ansible.become_user = "root"
end
Vagrant пример №7используем shell разворачиваем CentOS - gitlib
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
 
  config.vm.hostname = "gitlab"
 
  config.vm.provider "libvirt" do |domain|
    domain.memory = "4096"
    domain.cpus = "4"
   end
 
  config.vm.provision "shell", inline: <<-SHELL
     yum -y update
     yum install -y curl policycoreutils-python openssh-server perl
     systemctl enable sshd
     systemctl start sshd
     firewall-cmd --permanent --add-service=http
     firewall-cmd --permanent --add-service=https
     systemctl reload firewalld
     yum install postfix
     systemctl enable postfix
     systemctl start postfix
     curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
     EXTERNAL_URL="https://gitlab.linux.local" yum install -y gitlab-ce
  SHELL
end
Vagrant пример №8 используем ansible provision разворачиваем Debian 10 и применяем test.yaml
Vagrant.configure("2") do |config|
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.box = "debian/buster64"
  config.vm.hostname = "superhost"
#  config.vm.network "public_network",
#      :dev => "br0",
#      :ovs => "true"
  config.vm.provider "libvirt" do |domain|
    domain.memory = "1024"
    domain.cpus = "2"
   end
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "test.yaml"
   end
end
Vagrant пример №9
Vagrant.configure(2) do |config|
  config.vm.box = "debian/bullseye64"
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.define "sb" do |sb|
     sb.vm.hostname = "sb"
     sb.vm.network "private_network", ip: "192.168.200.200"
  
     config.vm.provider "libvirt" do |sb|
       #sb.name = "sb"
       sb.memory = "1024"
       sb.cpus = "1"
     end
     sb.vm.provision "ansible" do |ansible|
       ansible.playbook = "sb.yaml"
     end
  end
  config.vm.define "cb" do |cb|
     cb.vm.hostname = "cb"
     cb.vm.network "private_network", ip: "192.168.200.201"
  
     config.vm.provider "libvirt" do |cb|
      # cb.name = "cb"
       cb.memory = "1024"
       cb.cpus = "2"
     end
     cb.vm.provision "ansible" do |ansible|
       ansible.playbook = "cb.yaml"
     end
  end
end