VM이 처음 생성될 때 자동으로 실행되는 초기 설정 작업이다. 패키지 설치, 디렉토리 생성, 서비스 시작 등을 자동화할 수 있다.
컴퓨터를 새로 사서 "고스트"로 OS + 프로그램을 한 번에 설치하는 것과 같은 개념이다. 껐다 켤 때마다 다시 실행하지 않듯, provisioning도 최초 생성 시에만 자동 실행된다.
| 상황 | provisioning 실행 |
|---|---|
vagrant up (최초 생성) | O |
vagrant up (halt 후 재부팅) | X |
vagrant provision | O (명시적) |
vagrant reload --provision | O (명시적) |
vagrant up --provision | O (명시적) |
Vagrantfile 안에 직접 스크립트를 작성한다.
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-22.04"
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install apache2 wget unzip git -y
mkdir -p /opt/devopsdir
free -m >> /opt/devopsdir/memory.txt
df -h >> /opt/devopsdir/disk.txt
SHELL
end
"shell"은 provisioner의 종류를 지정하는 것이다. Vagrant는 shell 외에도 ansible, docker, puppet 등 다양한 provisioner를 지원한다.
<<-SHELL ... SHELLRuby의 Heredoc 문법이다. 여러 줄 문자열을 쓰는 방법으로, SHELL이라는 이름은 관례일 뿐 자유롭게 바꿀 수 있다.
스크립트가 길어지면 별도 파일로 분리할 수 있다.
config.vm.provision "shell", path: "scripts/setup.sh"
| inline | 외부 파일 | |
|---|---|---|
| 장점 | 간편함, Vagrantfile에서 즉시 수정 가능 | 역할별 스크립트를 체계적으로 관리 |
| 단점 | 길어지면 관리 어려움 | 파일을 왔다갔다 해야 함 |