tacker/vagrant/devstack/Vagrantfile

120 lines
3.8 KiB
Ruby

# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
require "yaml"
load "lib/machine.rb"
load "lib/vd_utils.rb"
vd_config = YAML.load(open("machines.yml"))
ssh_pub_key = VdUtils.ssh_pub_key(vd_config)
machines = Machines.new(vd_config["machines"])
# Check if you have already downloaded target box.
box_list = []
`vagrant box list`.each_line {|l|
box_list << l.split(" ")[0]
}
# If you don't have the box, download it.
machines.each do |m|
if not (box_list.include? m.box)
puts "There is no box '#{m.box}' for '#{m.provider}'"
puts "Run 'vagrant box add #{m.box}' first"
end
end
Vagrant.configure("2") do |config|
machines.each do |machine|
config.vm.define machine.hostname do |server|
server.vm.box = machine.box
server.vm.hostname = machine.hostname
# server.vm.box_check_update = false
machine.private_ips.each do |ipaddr|
server.vm.network "private_network", ip: ipaddr
end
if machine.public_ips != nil
machine.public_ips.each do |ipaddr|
server.vm.network "public_network", ip: ipaddr
end
end
if machine.fwd_port_list != nil
machine.fwd_port_list.each do |fp|
["tcp", "udp"].each do |prot|
server.vm.network "forwarded_port",
guest: fp["guest"], host: fp["host"],
auto_correct: true, protocol: prot
end
end
end
if Vagrant.has_plugin?("vagrant-proxyconf")
server.proxy.http = ENV["http_proxy"]
server.proxy.https = ENV["https_proxy"]
if ENV["no_proxy"] != ""
server.proxy.no_proxy = ENV["no_proxy"] +
"," + machine.private_ips.join(",")
end
end
if Vagrant.has_plugin?("vagrant-disksize")
server.disksize.size = "#{machine.disk_size}GB"
end
# TODO(yasufum) This configuration reported in [1] is required to avoid
# timeout for ssh login to focal64 because of setting up public key in the
# VM. This issue is only happened on focal, and not for bionic and xenial.
# Remove this config after the problem is fixed in the focal image.
# [1] https://bugs.launchpad.net/cloud-images/+bug/1829625
if machine.box == "ubuntu/focal64"
server.vm.provider 'virtualbox' do |v|
v.customize ["modifyvm", :id, "--uart1", "0x3F8", "4"]
v.customize ["modifyvm", :id, "--uartmode1", "file", "./ttyS0.log"]
end
end
if machine.ssh_forward_x11 == true
server.ssh.forward_x11 = true
end
server.vm.provider machine.provider do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
#vb.customize ["modifyhd", "disk id", "--resize", "size in megabytes"]
vb.cpus = "#{machine.nof_cpus}"
vb.memory = "#{machine.mem_size * 1024}"
end
# NOTE: remove `python3-launchpadlib` which causes many warinings, and
# run autoremove to clean related packages.
server.vm.provision "shell", inline: <<-SHELL
useradd -s /bin/bash -d /opt/stack -m stack
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
# Permission of `stack` directory is 0700 on CentOS 8, but it cause an
# error in a sanity check for the permission while running devstack
# installatino.
chmod 755 /opt/stack
mkdir -p /opt/stack/.ssh
echo "#{ssh_pub_key}" >> /opt/stack/.ssh/authorized_keys
chown -R stack:stack /opt/stack/.ssh
SHELL
VdUtils.setup_git_config
VdUtils.setup_ssh_config(vd_config)
end
end
end