8b300b8c44
Devstack master(Victoria) has dropped xenial distro, switch base box version to bionic. Bionic has puppet5 as default puppet version, which has faster puppet class running in parallel, so devstack and grenade repos were being checked out while /home/stack dir were still being created, impose puppet class ordering. Change-Id: I89af65ca8c53aa41407ed7e4ca0edef88daae3b9
186 lines
6.8 KiB
Ruby
186 lines
6.8 KiB
Ruby
# -*- mode: ruby -*-
|
|
# vi: set ft=ruby :
|
|
|
|
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
|
VAGRANTFILE_API_VERSION = "2" if not defined? VAGRANTFILE_API_VERSION
|
|
|
|
require 'yaml'
|
|
if File.file?('config.yaml')
|
|
conf = YAML.load_file('config.yaml')
|
|
else
|
|
raise "Configuration file 'config.yaml' does not exist."
|
|
end
|
|
|
|
$add_manager_to_hosts= <<SETHOSTS
|
|
if ! grep -Fxq "#{conf['ip_address_manager']} #{conf['hostname_manager']}" /etc/hosts
|
|
then
|
|
echo #{conf['ip_address_manager']} #{conf['hostname_manager']} >> /etc/hosts
|
|
fi
|
|
SETHOSTS
|
|
$git_use_https= <<USEHTTPS
|
|
apt-get install -y git
|
|
/usr/bin/git config --system url."https://github.com/".insteadOf git@github.com:
|
|
/usr/bin/git config --system url."https://".insteadOf git://
|
|
USEHTTPS
|
|
|
|
|
|
def configure_vm(name, vm, conf)
|
|
vm.hostname = conf["hostname_#{name}"] || name
|
|
|
|
if conf["use_bridge"] == false
|
|
if conf["ip_address_#{name}"]
|
|
vm.network :private_network, ip: conf["ip_address_#{name}"]
|
|
vm.provision :shell, :inline => $add_manager_to_hosts
|
|
else
|
|
vm.network :private_network, type: "dhcp"
|
|
end
|
|
else
|
|
# we do an L2 bridge directly onto the physical network, which means
|
|
# that your OpenStack hosts (manager, compute) are directly in the
|
|
# same network as your physical host. Your OpenStack guests (2nd
|
|
# level guests that you create in nova) will be also on the same L2,
|
|
# however they will be in a different address space (10.0.0.0/24 by
|
|
# default).
|
|
#
|
|
# :use_dhcp_assigned_default_route true is important to let your
|
|
# guests actually route all the way out to the real internet.
|
|
vm.network :public_network, :bridge => conf['bridge_int'], :use_dhcp_assigned_default_route => true
|
|
end
|
|
|
|
vm.provider :virtualbox do |vb|
|
|
# you need this for openstack guests to talk to each other
|
|
vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
|
|
# if specified assign a static MAC address
|
|
if conf["mac_address_#{name}"]
|
|
vb.customize ["modifyvm", :id, "--macaddress2", conf["mac_address_#{name}"]]
|
|
end
|
|
end
|
|
|
|
# puppet not installed by default in ubuntu-xenial
|
|
vm.provision "shell", inline: "sudo apt-get update"
|
|
vm.provision "shell", inline: "sudo apt-get install -y puppet"
|
|
|
|
# puppet provisioning
|
|
vm.provision "puppet" do |puppet|
|
|
puppet.manifests_path = "puppet/manifests"
|
|
puppet.module_path = "puppet/modules"
|
|
puppet.manifest_file = "default.pp"
|
|
puppet.options = "--verbose --debug"
|
|
## custom facts provided to Puppet
|
|
puppet.facter = {
|
|
## tells default.pp that we're running in Vagrant
|
|
"is_vagrant" => true,
|
|
"is_compute" => (name != "manager"),
|
|
"use_ldap" => conf["use_ldap"] || false,
|
|
"extra_images" => conf["extra_images"] || "",
|
|
"guest_interface_default" => conf["guest_interface_default"] || "enp0s8",
|
|
"host_ip_iface" => conf["host_ip_iface"] || "enp0s8",
|
|
"vagrant_username" => conf["vagrant_username"] || "ubuntu",
|
|
}
|
|
# add all the rest of the content in the conf file
|
|
conf.each do |k, v|
|
|
puppet.facter[k] = v
|
|
end
|
|
end
|
|
|
|
if conf['setup_mode'] == "devstack"
|
|
vm.provision "shell" do |shell|
|
|
shell.inline = "sudo su - stack -c 'cd ~/devstack && ./stack.sh'"
|
|
end
|
|
end
|
|
|
|
if conf['setup_mode'] == "grenade"
|
|
vm.provision "shell" do |shell|
|
|
shell.inline = "sudo su - stack -c 'cd ~/grenade && ./grenade.sh'"
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|
# All Vagrant configuration is done here. The most common configuration
|
|
# options are documented and commented below. For a complete reference,
|
|
# please see the online documentation at vagrantup.com.
|
|
|
|
# Step 1: what's you base box that you are going to use
|
|
#
|
|
# - if you specify a local box_name on your system, we'll use that
|
|
# - else we're going to use an upstream box from the cloud at 14.04 level
|
|
# - lastly, let you override the url in case you have something cached locally
|
|
#
|
|
# The boot time is long for these, so I recommend that you convert to a local
|
|
# version as soon as you can.
|
|
config.vm.box = conf['box_name'] || 'ubuntu/bionic64'
|
|
config.vm.box_url = conf['box_url'] if conf['box_url']
|
|
|
|
if Vagrant.has_plugin?("vagrant-cachier")
|
|
config.cache.scope = :box
|
|
# see https://github.com/fgrehm/vagrant-cachier/issues/175
|
|
config.cache.synced_folder_opts = {
|
|
owner: "_apt",
|
|
group: "ubuntu",
|
|
mount_options: ["dmode=777", "fmode=666"]
|
|
}
|
|
end
|
|
|
|
if Vagrant.has_plugin?("vagrant-proxyconf") && conf['proxy']
|
|
config.proxy.http = conf['proxy']
|
|
config.proxy.https = conf['proxy']
|
|
config.proxy.no_proxy = "localhost,127.0.0.1,`facter ipaddress_eth1`,#{conf['hostname_manager']},#{conf['hostname_compute']},#{conf['ip_address_compute']},#{conf['ip_address_manager']},#{conf['user_domains']}"
|
|
config.vm.provision :shell, :inline => $git_use_https
|
|
end
|
|
|
|
# NOTE(berendt): This solves the Ubuntu-specific Vagrant issue 1673.
|
|
# https://github.com/mitchellh/vagrant/issues/1673
|
|
config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
|
|
|
|
if Vagrant.has_plugin?("vagrant-hostmanager")
|
|
config.hostmanager.enabled = true
|
|
config.hostmanager.manage_host = true
|
|
config.hostmanager.ignore_private_ip = false
|
|
config.hostmanager.include_offline = true
|
|
if conf["use_bridge"] == false || conf["use_ip_resolver"] == true
|
|
config.hostmanager.ip_resolver = proc do |machine|
|
|
result = ""
|
|
begin
|
|
machine.communicate.execute("ifconfig eth1") do |type, data|
|
|
result << data if type == :stdout
|
|
end
|
|
# NOTE(jerryz): This catches the exception when host is still
|
|
# not ssh reachable.
|
|
# https://github.com/smdahlen/vagrant-hostmanager/issues/121
|
|
rescue
|
|
result = "# NOT-UP"
|
|
end
|
|
(ip = /inet addr:(\d+\.\d+\.\d+\.\d+)/.match(result)) && ip[1]
|
|
end
|
|
end
|
|
end
|
|
|
|
config.vm.define "manager", primary: true do |manager|
|
|
configure_vm("manager", manager.vm, conf)
|
|
manager.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
|
|
manager.vm.network "forwarded_port", guest: 6080, host: 6080, host_ip: "127.0.0.1"
|
|
end
|
|
|
|
if conf['hostname_compute']
|
|
config.vm.define "compute" do |compute|
|
|
configure_vm("compute", compute.vm, conf)
|
|
end
|
|
end
|
|
|
|
# If true, then any SSH connections made will enable agent forwarding.
|
|
# Default value: false
|
|
config.ssh.forward_agent = true
|
|
|
|
# Share an additional folder to the guest VM. The first argument is
|
|
# the path on the host to the actual folder. The second argument is
|
|
# the path on the guest to mount the folder. And the optional third
|
|
# argument is a set of non-required options.
|
|
# config.vm.synced_folder "../data", "/vagrant_data"
|
|
if conf['local_openstack_tree']
|
|
config.vm.synced_folder conf['local_openstack_tree'], "/home/vagrant/openstack"
|
|
end
|
|
|
|
end
|