1. Vagrant chạy Bash script = Shell Provisioner với quyền gì + đứng ở đâu?
Vagrant chạy script với quyền root nhưng đứng ở thư mục /home/vagrant
→ chú ý điều này khi viết bash script chạy tự động sau khi tạo máy ảo
Vagrantfile
Vagrant.configure("2") do |config|
config.vm.define "vb" do |vb|
vb.vm.box = "ubuntu/jammy64"
vb.vm.hostname = 'ubuntu2204'
vb.vm.provider :virtualbox do |v|
v.gui = true
v.cpus = 2
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--memory", 1024]
v.customize ["modifyvm", :id, "--name", "ubuntu2204-vm-shell-provision"]
end
# In ra các biến môi trường
vb.vm.provision "shell", inline: <<-SHELL
env
SHELL
end
end
2. Tại sao Vagrant login = user vagrant nhưng chạy được script với quyền root?
→ vì OS image đã tạo sẵn user vagrant có quyền chạy mọi lệnh như root
→ từ user vagrant chuyển lên root được bằng lệnh sudo
vagrant ssh
sudo -i
cat /etc/sudoers.d/vagrant
exit
exit
3. Vagrant Shell Provisioner chạy bao nhiêu lần?
Vagrant chỉ chạy script đúng 1 lần sau khi chạy máy ảo lần đầu
→ lần sau chạy máy ảo phải chỉ ra trong câu lệnh thì mới chạy script được
4. Có mấy cách khai báo Shell Provisioner?
Có 3 cách
Chạy LAB để kiểm chứng
mkdir D:vagrant-shell-provision > $null ; cd D:vagrant-shell-provision
$URL="https://devsecops.edu.vn/wp-content/uploads/2023/11/vagrant-shell-provision-P0IQ6W5rKf4dSeIthhknlrQ7qfptcd.zip"
Invoke-WebRequest -URI $URL -OutFile vagrant-shell-provision.zip
Expand-Archive vagrant-shell-provision.zip -DestinationPath .
dir
vagrant up
Vagrantfile
# Cách 1: Khai báo riêng --> gọi tới
$script1 = <<-SCRIPT1
echo
echo "Dạng HereDoc 1"
echo "Chạy với user $USER $UID $HOME $PWD"
echo
SCRIPT1
Vagrant.configure("2") do |config|
config.vm.define "vb" do |vb|
vb.vm.box = "ubuntu/jammy64"
vb.vm.hostname = 'ubuntu2204'
vb.vm.network :forwarded_port, guest: 22, host: 2026, id: "ssh", host_ip: "127.0.0.1", protocol: "tcp"
vb.vm.provider :virtualbox do |v|
v.gui = true
v.cpus = 2
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--memory", 1024]
v.customize ["modifyvm", :id, "--name", "ubuntu2204-shell-provision-list"]
end
vb.vm.provision "shell", inline: $script1
# Cách 2: Khai báo trực tiếp
vb.vm.provision "shell", inline: <<-script2
echo
echo "Dạng HereDoc 2"
echo "Chạy với user $USER $UID $HOME $PWD"
echo
script2
# Cách 3: Khai báo 1 file bash script riêng
# script3.sh nằm cùng thư mục với Vagrantfile
vb.vm.provision "shell", path: "script3.sh"
end
end
script3.sh
#!/bin/bash
echo
echo "Dạng 3 là 1 file script riêng"
echo "Chạy với user $USER $UID $HOME $PWD"
echo
# END