Vagrant 사용하기

cloud2000·2024년 1월 1일

Vagrant는 Hashcorp에서 개발한 가상머신 관리를 위한 자동화 도구로 Ruby기반의 DSL로 작성할 수 있음.

VAGRANTFILE_API_VERSION = "2"
IMAGE_NAME = "generic/ubuntu2004"

$script = <<SCRIPT
sudo mkdir /root/.ssh
sudo chmod 600 /root/.ssh
sudo cp /vagrant/id_rsa.pub /root/.ssh/authorized_keys
#sudo sed -i 's/dhcp4: .*/dhcp4: no/g' /etc/netplan/01-netcfg.yaml
#sudo sed -i 's/dhcp6: .*/dhcp4: no/g' /etc/netplan/01-netcfg.yaml
#sudo echo '      gateway4: 192.168.77.1' >> /etc/netplan/50-vagrant.yaml
#sudo sed -i 's/^#DNS.*/DNS=8.8.8.8/g' /etc/systemd/resolved.conf

sudo reboot
SCRIPT

$override_disk_size ||= false
$disk_size ||= "30GB"



CLUSTER = {
    "node-21" => { :ip => "172.30.1.21", :cpus => 8, :memory => 8192, :script => $script },
    "node-22" => { :ip => "172.30.1.22", :cpus => 8, :memory => 8192, :script => $script },
    "node-23" => { :ip => "172.30.1.23", :cpus => 8, :memory => 8192, :script => $script },
    "node-24" => { :ip => "172.30.1.24", :cpus => 8, :memory => 8192, :script => $script }       
}

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    CLUSTER.each_with_index do |(hostname, info), index|

        if ($override_disk_size)
            unless Vagrant.has_plugin?("vagrant-disksize")
                system "vagrant plugin install vagrant-disksize"
            end
            config.disksize.size = $disk_size
        end

        config.vm.synced_folder ".", "/vagrant", disabled: false


        config.vm.define hostname do |cfg|
            cfg.vm.provider :virtualbox do |vb, override|
                config.vm.box = IMAGE_NAME
                override.vm.network :public_network, bridge: "Intel(R) Ethernet Server Adapter I340-T4 #4", ip: "#{info[:ip]}"
                override.vm.hostname = hostname
                vb.name = hostname
                vb.customize ["modifyvm", :id, "--memory", info[:memory], "--cpus", info[:cpus], "--hwvirtex", "on"]
            end # end provider
            # inline shell scripts
            cfg.vm.provision :shell do |s|
                s.inline = info[:script]
            end # end inline shell scripts
        end # end config
    end # end cluster
end
  • Vagrant파일을 명시적으로 지정하기 위해서는 VAGRANT_VAGRANTFILE 변수에 해당 파일을 지정하고 사용하면 된다.
cd assets
VAGRANT_VAGRANTFILE=Vagrantfile-Mgmt vagrant up
VAGRANT_VAGRANTFILE=Vagrantfile-HostCluster vagrant up
VAGRANT_VAGRANTFILE=Vagrantfile-UserCluster1 vagrant up
VAGRANT_VAGRANTFILE=Vagrantfile-HostCluster vagrant destroy -f
profile
클라우드쟁이

0개의 댓글