9c9a31e4f5
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
120 lines
3.8 KiB
Ruby
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
|