tacker/vagrant/devstack/Vagrantfile
Yasufumi Ogawa 9c9a31e4f5 Introduce vagrant for devstack
This update is for providing a dedicated devstack installer for Tacker.
It is configurable for supporting several usecases, such as multiple
nodes configuration. It's also supports both of default distros in
OpenStack, Ubuntu 20.04 (focal) and CentOS Stream 8 currently.
You can find usages in the contributor guide `Devstack Installation
with Vagrant`.

Signed-off-by: Yasufumi Ogawa <yasufum.o@gmail.com>
Implements: bp intro-tacker-installer
Change-Id: I2f9fcf0811c41d9278df79b5a7e60d608d23cd76
2022-03-10 19:30:49 +09:00

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