tacker/vagrant/devstack/Vagrantfile
Yasufumi Ogawa 6e72a2d376 Add jammy support for tacker installer
As one of the community-wide goals, devstack has shifted to Ubuntu
Jammy from Antelope cycle [1]. So, add playbooks for Jammy to
installer.

Although Focal support is still remained so that you can setup your
environment on older version, but will be removed later.

There are some additional updates.

* Add bento as supported boxes which are well maintained more.

* Use experimental Vagrant Disk to expand disk space on logical volume
  because for Ubuntu images of bento.

* Change to use ssh key in ed25519 instead of rsa because it was
  deprecated in Jammy as default.

[1] https://lists.openstack.org/pipermail/openstack-discuss/2022-October/030845.html

Signed-off-by: Yasufumi Ogawa <yasufum.o@gmail.com>
Change-Id: I65b209a8ff2bd46adf2a4ee507ef7eee099d1b13
2023-02-16 21:25:55 +00:00

165 lines
5.6 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"
if not VdUtils.vagrant_experimentals.include?("disks")
ENV["VAGRANT_EXPERIMENTAL"] =
VdUtils.vagrant_experimentals.append("disks").join(",")
end
vd_config = YAML.load(open("machines.yml"))
ssh_pub_key = VdUtils.ssh_pub_key(vd_config)
machines = Machines.new(vd_config["machines"])
# TODO(yasufum) Test libvirt's boxes can be deployed haven't been tested yet.
supported_boxes = {
"virtualbox" => {
"ubuntu" => ["bento/ubuntu-20.04", "bento/ubuntu-22.04", "ubuntu/focal64", "ubuntu/jammy64"],
"centos" => ["bento/centos-stream-8", "centos/stream8"]
},
#"libvirt" => {
# "ubuntu" => ["generic/ubuntu2204", "generic/ubuntu2004"],
# "centos" => ["generic/centos9s", "generic/centos8s"]
#}
}
lvm_boxes = ["bento/ubuntu-20.04", "bento/ubuntu-22.04"]
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"] != nil
server.proxy.no_proxy = ENV["no_proxy"] +
"," + machine.private_ips.join(",")
end
end
# Expand disk size for some images have not enough disk space.
# NOTE: Two scenarios are expected, having logical volumes or not.
# For lvm case, add a virtual disk with an experimental feature first,
# create a logical volume then while provisioning later.
# Add a virtual disk has arbitrary name.
# TODO(yasufum): Fix the total amount of disk size will be over
# `machine.disk_size` GB unexpectedly.
if (VdUtils.is_disks_enabled(machine.provider) and
lvm_boxes.include?(machine.box) and
supported_boxes["virtualbox"]["ubuntu"].include?(machine.box))
server.vm.disk :disk, size: "#{machine.disk_size}GB", name: "mydrive"
else # Not a case using lvm for which just resizing.
if Vagrant.has_plugin?("vagrant-disksize")
server.disksize.size = "#{machine.disk_size}GB"
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
# Add stack user and register ssh key for direct login with.
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
# Expand disk space.
# NOTE: The name of devices and volumes are depend on the box images.
if (VdUtils.is_disks_enabled(machine.provider) and
lvm_boxes.include?(machine.box) and
supported_boxes["virtualbox"]["ubuntu"].include?(machine.box))
server.vm.provision "shell", inline: <<-SHELL
pvcreate /dev/sdb
vgextend ubuntu-vg /dev/sdb
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
resize2fs /dev/ubuntu-vg/ubuntu-lv
SHELL
elsif supported_boxes["virtualbox"]["centos"].include?(machine.box)
# Use `parted` and `xfs_growfs` to expand disk space after resizing
# volume.
# NOTE: Decide partition number which is different on each box first.
if machine.box == "bento/centos-stream-8"
part_num = 2
elsif machine.box == "centos/stream8"
part_num = 1
end
# NOTE: It doesn't use `parted` with --script option but here doc for
# interactive mode. It's because `resizepart` of `parted` doesn't work
# in non-interactive mode for some bug.
server.vm.provision "shell", inline: <<-SHELL
parted /dev/sda ---pretend-input-tty <<EOF
resizepart
#{part_num}
Yes
100%
quit
EOF
SHELL
server.vm.provision "shell", inline: <<-SHELL
xfs_growfs /dev/sda#{part_num}
SHELL
end
VdUtils.setup_git_config
VdUtils.setup_ssh_config(vd_config)
end
end
end