Info
Content

Vagrant

Инициализация

Чтобы инициализировать виртуалку, нужно ввести команду:

vagrant init ubuntu/xenial64

Она создаст файл Vagrantfile в текущей дериктории. В этом файле содержится конфигурация (на ruby). А также после этой команды будет скачан образ указанной системы с серверов vagrant

Примерно по такому пути находится скачанный образ виртуалки: /home/vandud/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64/20200617.0.0/virtualbox

Вот тут можно выбрать подходящий образ

В конфиге можно редактировать параметры виртуалки (добавить памяти и прочее)

Старт выполняется командой vagrant up

Для подключения к виртуалке нужно использовать команду vagrant ssh (виртуалка слушает порт для ssh на хостовой машине, но там по-умолчанию доступ только по ключу, который есть у vagrant'a)

Традиционно в вагранте пользователь по-умолчанию - vagrant (пароль такой же как имя)

Директория из которой запускалась виртуалка (в которой лежит Vagrantfile) прокидывается в виртуалку по пути /vagrant (доступ и на чтение и на запись, поэтому нужно быть аккуратным)

[vandud@desktop vagrant]$ touch testfile

[vandud@desktop vagrant]$ vagrant ssh

vagrant@ubuntu-xenial:~$ cd /vagrant/

vagrant@ubuntu-xenial:/vagrant$ ll
total 60
drwxr-xr-x  1 vagrant vagrant  4096 Jun 23 15:01 ./
drwxr-xr-x 24 root    root     4096 Jun 23 14:53 ../
-rw-r--r--  1 vagrant vagrant     0 Jun 23 15:01 testfile
-rw-------  1 vagrant vagrant 42191 Jun 23 14:53 ubuntu-xenial-16.04-cloudimg-console.log
drwxr-xr-x  1 vagrant vagrant  4096 Jun 23 14:32 .vagrant/
-rw-r--r--  1 vagrant vagrant  3010 Jun 23 15:01 Vagrantfile

Команды управления

  • Перезагрузка (выключение и включение, а не просто обновление конфига) - vagrant reload
  • Выключение/приостановка - vagrant halt/suspend
  • Пробуждение приостановленной ВМ - vagrant resume
  • Удаление виртуалки (конф. файлы останутся нетронутыми) - vagrant destroy
  • Чтобы удалить и файлы ВМ нужно добавить ключи -f - vagrant destroy -f
  • Состояние окружения (а также проверка сиснтаксиса Vagrantfile) - vagrant status
  • Подключение - vagrant ssh
  • Конфиг ssh - vagrant ssh-config
  • Управление боксами - vagrant box:
$ vagrant box list
ubuntu/xenial64 (virtualbox, 20200617.0.0)

Приватный ключ для подклюлчения по ssh находится примерно по такому пути: /home/vandud/Documents/vagrant/.vagrant/machines/default/virtualbox/private_key

Плагины

vagrant scp

Плагины устанавливаются так (устанавливаю vagrant-scp):

$ vagrant plugin install vagrant-scp
Installing the 'vagrant-scp' plugin. This can take a few minutes...
Fetching vagrant-scp-0.5.7.gem
Installed the plugin 'vagrant-scp (0.5.7)'!

Работа vagrant scp:

$ vagrant scp testfile default:/tmp/testfile
load pubkey "/home/vandud/Documents/vagrant/.vagrant/machines/default/virtualbox/private_key": invalid format
Warning: Permanently added '[127.0.0.1]:2222' (ECDSA) to the list of known hosts.
testfile                                                                       100%    0     0.0KB/s   00:00

Информацию о боксе (имя или id) можно получить из $ vagrant global-status

vagrant sahara

vagrant sandbox (sahara-plugin):
Этот плагин позволяет делать снапшоты. Пример использования:

  • Включаем режим песочницы - vagrant sandbox on
  • Что-то делаем - vagrant ssh
  • Коммитим изменения или откатываемся - vagrant sandbox commit/rollback
  • Выключаем песочницу - vagrant sandbox off (если выйти из песочницы с незакоммиченными изменениями, то они закоммитятся)

Provisioning (подготовка)

Для провижининга (подготовки) можно использовать встроенные средства, или такие системы как ansible/puppet

На примере ansible:

  • Редактируем Vagrantfile. Нужно дописать в конец следующее:
    config.vm.provision "ansible" do |ansible|
      ansible.playbook = "playbook.yaml"
    end
    
  • Далее создаем playbook.yaml, например такой:
    $ cat playbook.yaml 
    ---
    - hosts: all
      become: yes
      tasks:
        - name: test task
          apt:
            name: hollywood
            state: present
            update_cache: yes
    
  • И запускаем провижининг с помощью команды vagrant provision:
    $ vagrant provision 
    ==> default: Running provisioner: ansible...
        default: Running ansible-playbook...
    
    PLAY [all] *********************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [default]
    
    TASK [test task] ***************************************************************
    changed: [default]
    
    PLAY RECAP *********************************************************************
    default                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    

Прокидывание директорий

В Vagrantfile нужно дописать следующее:

config.vm.synced_folder "src/", "/tmp/src/"

Эта настройка указывает откуда и куда примонтировать директорию
Далее нужно сделать reload и настройка применится

Результат (сверху команда watch tree на виртуалке):
2020-06-23-194725_710x299_scrot.png

Прокидывание портов

config.vm.network "forwarded_port", guest: 80, host: 8080

2020-06-23-203047_1028x433_scrot.png

No Comments
Back to top