Provisioning (автонастройка VM)
TL;DR: Provisioning превращает чистую ОС в готовый сервер. Shell inline, внешний скрипт или Ansible. Запускается при первом
vagrant upили принудительноvagrant provision.
Shell Inline
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx git vim
echo "Hello World" > /var/www/html/index.html
SHELLСкрипт выполняется от root по умолчанию.
Внешний скрипт
config.vm.provision "shell", path: "bootstrap.sh"# bootstrap.sh
#!/bin/bash
set -euo pipefail
apt-get update
apt-get install -y docker.io
usermod -aG docker vagrantОт обычного пользователя
config.vm.provision "shell", inline: "echo $HOME", privileged: falseКогда запускается
| Команда | Provisioning |
|---|---|
vagrant up (первый раз) | ✅ Да |
vagrant up (повторно) | ❌ Нет |
vagrant provision | ✅ Принудительно |
vagrant reload --provision | ✅ Перезагрузка + provision |
vagrant destroy && vagrant up | ✅ С нуля |
Несколько провижинеров
config.vm.provision "shell", inline: "apt-get update"
config.vm.provision "shell", path: "install-docker.sh"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
endВыполняются последовательно.
Типичные ошибки
| Ошибка | Решение |
|---|---|
| Скрипт не идемпотентный | apt-get install -y (без интерактива), проверки if ! command -v ... |
| Provisioning не запускается | vagrant provision или vagrant up --provision |
E: Could not get lock | Подождать — возможно автообновление в фоне (Ubuntu) |