Рубрики
vagrant система управления конфигурациями

vagrant

Ссылки

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