Browse Source
Move networking-ovn/vagrant into neutron/tools/ovn_vagrant Also added two sample local.conf files for a DB-only and VTEP nodes. Co-Authored-By: zhangyanxian <zhangyanxianmail@163.com> Co-Authored-By: chen-li <shchenli@cn.ibm.com> Co-Authored-By: Russell Bryant <rbryant@redhat.com> Co-Authored-By: Kyle Mestery <mestery@mestery.com Co-Authored-By: Miguel Angel Ajo <majopela@redhat.com> Co-Authored-By: Richard Theis <rtheis@us.ibm.com> Co-Authored-By: JUNJIE NAN <nanjj@cn.ibm.com> Co-Authored-By: Flavio Fernandes <flavio@flaviof.com> Co-Authored-By: John Kasperski <jckasper@us.ibm.com> Co-Authored-By: Matthew Kassawara <mkassawara@gmail.com> Co-Authored-By: venkatamahesh <venkatamaheshkotha@gmail.com> Co-Authored-By: Tong Li <litong01@us.ibm.com> Co-Authored-By: venkata anil <anilvenkata@redhat.com> Co-Authored-By: Vu Cong Tuan <tuanvc@vn.fujitsu.com> Co-Authored-By: RYAN D. MOATS <rmoats@us.ibm.com> Change-Id: I12966d5548a60b46edd5c84ee0035eb11671fd8c Partially-Implements: blueprint neutron-ovn-mergechanges/87/705587/5
20 changed files with 743 additions and 14 deletions
@ -0,0 +1,39 @@
|
||||
# |
||||
# Sample DevStack local.conf. |
||||
# |
||||
# This sample file is intented to be used for running ovn-northd and the |
||||
# OVN DBs on a separate node. |
||||
# |
||||
# For this configuration to work, you *must* set the SERVICE_HOST option to the |
||||
# IP address of the main DevStack host. |
||||
# |
||||
|
||||
[[local|localrc]] |
||||
|
||||
DATABASE_PASSWORD=password |
||||
RABBIT_PASSWORD=password |
||||
SERVICE_PASSWORD=password |
||||
SERVICE_TOKEN=password |
||||
ADMIN_PASSWORD=password |
||||
|
||||
# The DevStack plugin defaults to using the ovn branch from the official ovs |
||||
# repo. You can optionally use a different one. For example, you may want to |
||||
# use the latest patches in blp's ovn branch: |
||||
#OVN_REPO=https://github.com/blp/ovs-reviews.git |
||||
#OVN_BRANCH=ovn |
||||
|
||||
enable_plugin neutron https://git.openstack.org/openstack/neutron |
||||
|
||||
disable_all_services |
||||
enable_service ovn-northd |
||||
|
||||
# A UUID to uniquely identify this system. If one is not specified, a random |
||||
# one will be generated and saved in the file 'ovn-uuid' for re-use in future |
||||
# DevStack runs. |
||||
#OVN_UUID= |
||||
|
||||
# Whether or not to build custom openvswitch kernel modules from the ovs git |
||||
# tree. This is enabled by default. This is required unless your distro kernel |
||||
# includes ovs+conntrack support. This support was first released in Linux 4.3, |
||||
# and will likely be backported by some distros. |
||||
#OVN_BUILD_MODULES=False |
@ -0,0 +1,39 @@
|
||||
# |
||||
# Sample DevStack local.conf. |
||||
# |
||||
# This sample file is intended for running the HW VTEP emulator on a |
||||
# separate node. |
||||
# |
||||
# For this configuration to work, you *must* set the SERVICE_HOST option to the |
||||
# IP address of the main DevStack host. |
||||
# |
||||
|
||||
[[local|localrc]] |
||||
|
||||
DATABASE_PASSWORD=password |
||||
RABBIT_PASSWORD=password |
||||
SERVICE_PASSWORD=password |
||||
SERVICE_TOKEN=password |
||||
ADMIN_PASSWORD=password |
||||
|
||||
# The DevStack plugin defaults to using the ovn branch from the official ovs |
||||
# repo. You can optionally use a different one. For example, you may want to |
||||
# use the latest patches in blp's ovn branch: |
||||
#OVN_REPO=https://github.com/blp/ovs-reviews.git |
||||
#OVN_BRANCH=ovn |
||||
|
||||
enable_plugin neutron https://git.openstack.org/openstack/neutron |
||||
|
||||
disable_all_services |
||||
enable_service ovn-controller-vtep |
||||
|
||||
# A UUID to uniquely identify this system. If one is not specified, a random |
||||
# one will be generated and saved in the file 'ovn-uuid' for re-use in future |
||||
# DevStack runs. |
||||
#OVN_UUID= |
||||
|
||||
# Whether or not to build custom openvswitch kernel modules from the ovs git |
||||
# tree. This is enabled by default. This is required unless your distro kernel |
||||
# includes ovs+conntrack support. This support was first released in Linux 4.3, |
||||
# and will likely be backported by some distros. |
||||
#OVN_BUILD_MODULES=False |
@ -0,0 +1,6 @@
|
||||
========================================= |
||||
Automatic deployment of OVN using Vagrant |
||||
========================================= |
||||
|
||||
Please reference the files in /doc/source/contributor/ovn_vagrant/ for more |
||||
information about this. |
@ -0,0 +1,6 @@
|
||||
--- |
||||
ubuntu: |
||||
virtualbox: bento/ubuntu-18.04 |
||||
libvirt: elastic/ubuntu-18.04-x86_64 |
||||
parallels: bento/ubuntu-18.04 |
||||
openstack: bionic64 |
@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY----- |
||||
MIIEowIBAAKCAQEAv2EyHk382N9LGMPAGbAG9rea6qcO+I+qj7OscU1k8GxnYO0B |
||||
hHYPMzfT1RgeBDelNyM22SNiySr4iTQDBQxgunrUCdTaNu5dmzYT68gieqnH+CRR |
||||
jpLxXecH2hcvKyFx5qmhMt4zE3QWCDv2JJiB5CGoV7sGCy1aTYbFJBeKwMUMpBwP |
||||
67rpBdVcpNjeSkw8FKDvPVx1p1O0YgeI9JoIL0qka6FFgiii/wf5jgr0w/JW15VI |
||||
2pYwpHhdnBt3M3BV2HK5cA6nwFhUfAG0HLP5lUGW9/Hk5ng/Wl7cz8nLAdgXf4Uc |
||||
IUffO5SH+9/H5VhTMDpaRPgxWuOw1/UGLgf57wIDAQABAoIBAD/+5X6Cv6lZycfn |
||||
NWahmUKJFRGgeX4etH9HKsPciINpDIy51EcSH3UWFwzr+qWYYfP1H5MupQr2BpQC |
||||
w3u9rt7M0fjTp4C05rJPPAwdKYJxIcBVjLwrYPDwn4yLMievEGJ8mL3k1ZmMuQ1Z |
||||
165XHSBHLP7hOF0mdkr0ZRnzkV9yMPjZAI6xnkt/q6EvO34wSZu3/qsmptipHgqB |
||||
QQAjPIvJwr7DMoLVpBjLlfGihUB5NAVC0RU+7SIiTAUg0atUzucp+sQMnWlWKVvM |
||||
3+nHGC8gR4fUy30LDgxd4eqFyG8EYpTzpN/0bgM3kdwiQTkR/lGvhwmok/o6Nz0n |
||||
67ve12ECgYEA41lug+TitPrq9VaLacTBpDOafsmIY30sylBJClcbkQ94NEQyNASg |
||||
TsXxRtvYvKuHy0i2xZwagqEyReaTfsScmyFOk/SRFqjgmb3eWYtgF04MtAAmLy9G |
||||
5UmPLEm6lLuQGCI7CqLAv3PFCR7W7dX5VYwkteDejZ0NlLeNqKJjIvECgYEA139W |
||||
ocUBbWu4ea68JB/qOGrxCMQKn6K3l9kA7tuu+3a0le0G7LF6dr+X1wvboCF/w8CZ |
||||
ZqKm35yZoAzyFmfn8oGtJdgbz4Sl3/vZReg86Ca//m4LMe1FkkimT3UW+BKprtEJ |
||||
5GiKKWYElknMthbDTpL5EouciPhG0bYKuIMBKt8CgYAL+LqcEWJqu0fCEYOX1zeH |
||||
KPx6rqwS6RWBtcaS19FoyxK+VdT67j9uxneVDqCUFsg4ySRutXCj7k8SZTjhFQNW |
||||
G+PiYJ9/PPdOwTPDLVarA34hwFxCYc/u5Pe4Ek3T5SiKTMslHTrfGf6HI2uX7IuL |
||||
mKyaMzQk6t87NIsuFRb5UQKBgQCzciEEslUe9b127k9S0ZSriDnQb9bc2ZWCB7zk |
||||
KeELGu0Dj43dmWh968sX0pL/RAXtTrsuoTDOMcwnX8BTchDOerdhNRTrd+zcmA50 |
||||
TRAyzNnBl4cQ+yCc0IxUzA7lYj0UCpPvNDIgiQg20Zt64XefPXnUvJcL45qtVKaW |
||||
wNg/BwKBgFyhjxftMwAJJF2Hcq5s8QvNhznBgLtne7jnQkHU4qcJx6tcR1hy0Jqe |
||||
8/zkr5+41EaFU2jjGn8cnUrlS/Vc/HZg3rmHYycX5wg9hrg1j4hokSHjsGL6Y7yn |
||||
8oXIWJSqpxuMjfRh1Tb81Fg05emrMjTy6aLuGS0siUlTPzflD0RI |
||||
-----END RSA PRIVATE KEY----- |
@ -0,0 +1 @@
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/YTIeTfzY30sYw8AZsAb2t5rqpw74j6qPs6xxTWTwbGdg7QGEdg8zN9PVGB4EN6U3IzbZI2LJKviJNAMFDGC6etQJ1No27l2bNhPryCJ6qcf4JFGOkvFd5wfaFy8rIXHmqaEy3jMTdBYIO/YkmIHkIahXuwYLLVpNhsUkF4rAxQykHA/ruukF1Vyk2N5KTDwUoO89XHWnU7RiB4j0mggvSqRroUWCKKL/B/mOCvTD8lbXlUjaljCkeF2cG3czcFXYcrlwDqfAWFR8AbQcs/mVQZb38eTmeD9aXtzPycsB2Bd/hRwhR987lIf738flWFMwOlpE+DFa47DX9QYuB/nv vagrant@ovn |
@ -0,0 +1,19 @@
|
||||
#!/bin/bash |
||||
|
||||
function provider_setup { |
||||
# Save the existing address from eth2 and add it to br-provider |
||||
|
||||
if ip a | grep enp0; then |
||||
PROV_IF=enp0s9 |
||||
else |
||||
PROV_IF=eth2 |
||||
fi |
||||
|
||||
PROVADDR=$(ip -4 addr show $PROV_IF | grep -oP "(?<=inet ).*(?= brd)") |
||||
if [ -n "$PROVADDR" ]; then |
||||
sudo ip addr flush dev $PROV_IF |
||||
sudo ip addr add $PROVADDR dev br-provider |
||||
sudo ip link set br-provider up |
||||
sudo ovs-vsctl --may-exist add-port br-provider $PROV_IF |
||||
fi |
||||
} |
@ -0,0 +1,42 @@
|
||||
|
||||
def provider_box(provider) |
||||
distro = ENV.fetch('DISTRO', 'ubuntu') |
||||
boxes = YAML.load_file('../provisioning/boxes.yml')[distro] |
||||
|
||||
# we can always override the box via the VAGRANT_OVN_VM_BOX |
||||
# environment variable |
||||
return ENV.fetch('VAGRANT_OVN_VM_BOX', boxes[provider]) |
||||
end |
||||
|
||||
def configure_providers(vm, config) |
||||
vm.provider 'virtualbox' do |vb, cfg| |
||||
cfg.vm.box = provider_box('virtualbox') |
||||
vb.memory = config['memory'] |
||||
vb.cpus = config['cpus'] |
||||
vb.customize [ |
||||
'modifyvm', :id, |
||||
'--nicpromisc3', "allow-all" |
||||
] |
||||
vb.customize [ |
||||
"guestproperty", "set", :id, |
||||
"/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 10000 |
||||
] |
||||
end |
||||
|
||||
vm.provider 'parallels' do |vb, cfg| |
||||
cfg.vm.box = provider_box('parallels') |
||||
vb.memory = config['memory'] |
||||
vb.cpus = config['cpus'] |
||||
vb.customize ['set', :id, '--nested-virt', 'on'] |
||||
end |
||||
|
||||
vm.provider 'libvirt' do |vb, cfg| |
||||
cfg.vm.box = provider_box('libvirt') |
||||
vb.memory = config['memory'] |
||||
vb.cpus = config['cpus'] |
||||
vb.nested = true |
||||
vb.graphics_type = 'spice' |
||||
vb.video_type = 'qxl' |
||||
vb.suspend_mode = 'managedsave' |
||||
end |
||||
end |
@ -0,0 +1,104 @@
|
||||
#!/bin/sh |
||||
|
||||
# Script Arguments: |
||||
# $1 - MTU |
||||
# $2 - ovn-db IP address |
||||
# $3 - ovn-db short name |
||||
# $4 - ovn-controller IP address |
||||
# $5 - ovn-controller short name |
||||
# $6 - ovn-compute1 IP address |
||||
# $7 - ovn-compute1 short name |
||||
# $8 - ovn-compute2 IP address |
||||
# $9 - ovn-compute2 short name |
||||
# $10 - ovn-vtep IP address |
||||
# $11 - ovn-vtep short name |
||||
MTU=$1 |
||||
OVN_DB_IP=$2 |
||||
OVN_DB_NAME=$3 |
||||
OVN_CONTROLLER_IP=$4 |
||||
OVN_CONTROLLER_NAME=$5 |
||||
OVN_COMPUTE1_IP=$6 |
||||
OVN_COMPUTE1_NAME=$7 |
||||
OVN_COMPUTE2_IP=$8 |
||||
OVN_COMPUTE2_NAME=$9 |
||||
OVN_VTEP_IP=$10 |
||||
OVN_VTEP_NAME=$11 |
||||
|
||||
BASE_PACKAGES="git bridge-utils ebtables python-pip python-dev build-essential ntp" |
||||
DEBIAN_FRONTEND=noninteractive sudo apt-get -qqy update |
||||
DEBIAN_FRONTEND=noninteractive sudo apt-get install -qqy $BASE_PACKAGES |
||||
echo export LC_ALL=en_US.UTF-8 >> ~/.bash_profile |
||||
echo export LANG=en_US.UTF-8 >> ~/.bash_profile |
||||
# FIXME(mestery): Remove once Vagrant boxes allow apt-get to work again |
||||
sudo rm -rf /var/lib/apt/lists/* |
||||
sudo apt-get install -y git |
||||
|
||||
# FIXME(mestery): By default, Ubuntu ships with /bin/sh pointing to |
||||
# the dash shell. |
||||
# .. |
||||
# .. |
||||
# The dots above represent a pause as you pick yourself up off the |
||||
# floor. This means the latest version of "install_docker.sh" to load |
||||
# docker fails because dash can't interpret some of it's bash-specific |
||||
# things. It's a bug in install_docker.sh that it relies on those and |
||||
# uses a shebang of /bin/sh, but that doesn't help us if we want to run |
||||
# docker and specifically Kuryr. So, this works around that. |
||||
sudo update-alternatives --install /bin/sh sh /bin/bash 100 |
||||
|
||||
if [ ! -d "devstack" ]; then |
||||
git clone https://git.openstack.org/openstack-dev/devstack.git |
||||
fi |
||||
|
||||
# If available, use repositories on host to facilitate testing local changes. |
||||
# Vagrant requires that shared folders exist on the host, so additionally |
||||
# check for the ".git" directory in case the parent exists but lacks |
||||
# repository contents. |
||||
|
||||
if [ ! -d "neutron/.git" ]; then |
||||
git clone https://git.openstack.org/openstack/neutron.git |
||||
fi |
||||
|
||||
# Use neutron in vagrant home directory when stacking. |
||||
sudo mkdir /opt/stack |
||||
sudo chown vagrant:vagrant /opt/stack |
||||
ln -s ~/neutron /opt/stack/neutron |
||||
|
||||
# We need swap space to do any sort of scale testing with the Vagrant config. |
||||
# Without this, we quickly run out of RAM and the kernel starts whacking things. |
||||
sudo rm -f /swapfile1 |
||||
sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=2097152 |
||||
sudo chown root:root /swapfile1 |
||||
sudo chmod 0600 /swapfile1 |
||||
sudo mkswap /swapfile1 |
||||
sudo swapon /swapfile1 |
||||
|
||||
# Configure MTU on VM interfaces. Also requires manually configuring the same MTU on |
||||
# the equivalent 'vboxnet' interfaces on the host. |
||||
|
||||
if ip a | grep enp0; then |
||||
sudo ip link set dev enp0s8 mtu $MTU |
||||
sudo ip link set dev enp0s9 mtu $MTU |
||||
else |
||||
sudo ip link set dev eth1 mtu $MTU |
||||
sudo ip link set dev eth2 mtu $MTU |
||||
fi |
||||
|
||||
# Migration setup |
||||
sudo sh -c "echo \"$OVN_DB_IP $OVN_DB_NAME\" >> /etc/hosts" |
||||
sudo sh -c "echo \"$OVN_CONTROLLER_IP $OVN_CONTROLLER_NAME\" >> /etc/hosts" |
||||
sudo sh -c "echo \"$OVN_COMPUTE1_IP $OVN_COMPUTE1_NAME\" >> /etc/hosts" |
||||
sudo sh -c "echo \"$OVN_COMPUTE2_IP $OVN_COMPUTE2_NAME\" >> /etc/hosts" |
||||
sudo sh -c "echo \"$OVN_VTEP_IP $OVN_VTEP_NAME\" >> /etc/hosts" |
||||
|
||||
# Non-interactive SSH setup |
||||
cp neutron/vagrant/ovn/provisioning/id_rsa ~/.ssh/id_rsa |
||||
cat neutron/vagrant/ovn/provisioning/id_rsa.pub >> ~/.ssh/authorized_keys |
||||
chmod 600 ~/.ssh/id_rsa |
||||
echo "Host *" >> ~/.ssh/config |
||||
echo " StrictHostKeyChecking no" >> ~/.ssh/config |
||||
chmod 600 ~/.ssh/config |
||||
sudo mkdir /root/.ssh |
||||
chmod 700 /root/.ssh |
||||
sudo cp ~vagrant/.ssh/id_rsa /root/.ssh |
||||
sudo cp ~vagrant/.ssh/authorized_keys /root/.ssh |
||||
sudo cp ~vagrant/.ssh/config /root/.ssh/config |
@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
# Script Arguments: |
||||
# $1 - ovn-controller IP address |
||||
# $2 - ovn-db IP address |
||||
OVN_CONTROLLER_IP=$1 |
||||
OVN_DB_IP=$2 |
||||
|
||||
cp neutron/devstack/ovn-compute-local.conf.sample devstack/local.conf |
||||
sed -i -e 's/<IP address of host running everything else>/'$OVN_CONTROLLER_IP'/g' devstack/local.conf |
||||
|
||||
sudo umount /opt/stack/data/nova/instances |
||||
|
||||
# Get the IP address |
||||
if ip a | grep enp0 ; then |
||||
ipaddress=$(ip -4 addr show enp0s8 | grep -oP "(?<=inet ).*(?=/)") |
||||
else |
||||
ipaddress=$(ip -4 addr show eth1 | grep -oP "(?<=inet ).*(?=/)") |
||||
fi |
||||
|
||||
# Fixup HOST_IP with the local IP address |
||||
sed -i -e 's/<IP address of current host>/'$ipaddress'/g' devstack/local.conf |
||||
|
||||
# Adjust some things in local.conf |
||||
cat << DEVSTACKEOF >> devstack/local.conf |
||||
|
||||
# Set this to the address of the main DevStack host running the rest of the |
||||
# OpenStack services. |
||||
Q_HOST=$1 |
||||
HOSTNAME=$(hostname) |
||||
OVN_SB_REMOTE=tcp:$OVN_DB_IP:6642 |
||||
OVN_NB_REMOTE=tcp:$OVN_DB_IP:6641 |
||||
|
||||
# Enable logging to files. |
||||
LOGFILE=/opt/stack/log/stack.sh.log |
||||
|
||||
# Use provider network for public. |
||||
Q_USE_PROVIDERNET_FOR_PUBLIC=True |
||||
OVS_PHYSICAL_BRIDGE=br-provider |
||||
PHYSICAL_NETWORK=provider |
||||
|
||||
# Until OVN supports NAT, the private network IP address range |
||||
# must not conflict with IP address ranges on the host. Change |
||||
# as necessary for your environment. |
||||
NETWORK_GATEWAY=172.16.1.1 |
||||
FIXED_RANGE=172.16.1.0/24 |
||||
|
||||
ENABLE_CHASSIS_AS_GW=False |
||||
DEVSTACKEOF |
||||
|
||||
# Add unique post-config for DevStack here using a separate 'cat' with |
||||
# single quotes around EOF to prevent interpretation of variables such |
||||
# as $Q_DHCP_CONF_FILE. |
||||
|
||||
cat << 'DEVSTACKEOF' >> devstack/local.conf |
||||
|
||||
# Set the availablity zone name (default is nova) for the DHCP service. |
||||
[[post-config|$Q_DHCP_CONF_FILE]] |
||||
[AGENT] |
||||
availability_zone = nova |
||||
DEVSTACKEOF |
||||
|
||||
devstack/stack.sh |
||||
|
||||
# Build the provider network in OVN. You can enable instances to access |
||||
# external networks such as the Internet by using the IP address of the host |
||||
# vboxnet interface for the provider network (typically vboxnet1) as the |
||||
# gateway for the subnet on the neutron provider network. Also requires |
||||
# enabling IP forwarding and configuring SNAT on the host. See the README for |
||||
# more information. |
||||
|
||||
source /vagrant/provisioning/provider-setup.sh |
||||
|
||||
provider_setup |
||||
|
||||
# Add host route for the private network, at least until the native L3 agent |
||||
# supports NAT. |
||||
# FIXME(mkassawara): Add support for IPv6. |
||||
source devstack/openrc admin admin |
||||
ROUTER_GATEWAY=`neutron port-list -c fixed_ips -c device_owner | grep router_gateway | awk -F'ip_address' '{ print $2 }' | cut -f3 -d\"` |
||||
sudo ip route add $FIXED_RANGE via $ROUTER_GATEWAY |
||||
|
||||
# NFS Setup |
||||
sudo apt-get update |
||||
sudo apt-get install -y nfs-common |
||||
sudo mkdir -p /opt/stack/data/nova/instances |
||||
sudo chmod o+x /opt/stack/data/nova/instances |
||||
sudo chown vagrant:vagrant /opt/stack/data/nova/instances |
||||
sudo sh -c "echo \"$OVN_CONTROLLER_IP:/opt/stack/data/nova/instances /opt/stack/data/nova/instances nfs defaults 0 0\" >> /etc/fstab" |
||||
sudo mount /opt/stack/data/nova/instances |
||||
sudo chown vagrant:vagrant /opt/stack/data/nova/instances |
||||
sudo sh -c "echo \"listen_tls = 0\" >> /etc/libvirt/libvirtd.conf" |
||||
sudo sh -c "echo \"listen_tcp = 1\" >> /etc/libvirt/libvirtd.conf" |
||||
sudo sh -c "echo -n \"auth_tcp =\" >> /etc/libvirt/libvirtd.conf" |
||||
sudo sh -c 'echo " \"none\"" >> /etc/libvirt/libvirtd.conf' |
||||
sudo sh -c "sed -i 's/env libvirtd_opts\=\"\-d\"/env libvirtd_opts\=\"-d -l\"/g' /etc/init/libvirt-bin.conf" |
||||
sudo sh -c "sed -i 's/libvirtd_opts\=\"\-d\"/libvirtd_opts\=\"\-d \-l\"/g' /etc/default/libvirt-bin" |
||||
sudo /etc/init.d/libvirt-bin restart |
||||
|
||||
# Set the OVN_*_DB variables to enable OVN commands using a remote database. |
||||
echo -e "\n# Enable OVN commands using a remote database. |
||||
export OVN_NB_DB=$OVN_NB_REMOTE |
||||
export OVN_SB_DB=$OVN_SB_REMOTE" >> ~/.bash_profile |
@ -0,0 +1,130 @@
|
||||
#!/usr/bin/env bash |
||||
|
||||
# Script Arguments: |
||||
# $1 - ovn-db IP address |
||||
# $2 - provider network starting IP address |
||||
# $3 - provider network ending IP address |
||||
# $4 - provider network gateway |
||||
# $5 - provider network network |
||||
# $6 - ovn vm subnet |
||||
ovnip=$1 |
||||
start_ip=$2 |
||||
end_ip=$3 |
||||
gateway=$4 |
||||
network=$5 |
||||
ovn_vm_subnet=$6 |
||||
|
||||
|
||||
# Get the IP address |
||||
if ip a | grep enp0 ; then |
||||
ipaddress=$(ip -4 addr show enp0s8 | grep -oP "(?<=inet ).*(?=/)") |
||||
else |
||||
ipaddress=$(ip -4 addr show eth1 | grep -oP "(?<=inet ).*(?=/)") |
||||
fi |
||||
|
||||
# Adjust some things in local.conf |
||||
cat << DEVSTACKEOF >> devstack/local.conf.vagrant |
||||
|
||||
# Good to set these |
||||
HOST_IP=$ipaddress |
||||
HOSTNAME=$(hostname) |
||||
SERVICE_HOST_NAME=${HOST_NAME} |
||||
SERVICE_HOST=$ipaddress |
||||
OVN_SB_REMOTE=tcp:$ovnip:6642 |
||||
OVN_NB_REMOTE=tcp:$ovnip:6641 |
||||
|
||||
# Enable logging to files. |
||||
LOGFILE=/opt/stack/log/stack.sh.log |
||||
|
||||
# Disable the ovn-northd service on the controller node because the |
||||
# architecture includes a separate OVN database server. |
||||
disable_service ovn-northd |
||||
|
||||
# Disable the ovn-controller service because the architecture lacks services |
||||
# on the controller node that depend on it. |
||||
disable_service ovn-controller |
||||
|
||||
# Disable the ovn metadata agent. |
||||
disable_service neutron-ovn-metadata-agent |
||||
|
||||
# Disable the nova compute service on the controller node because the |
||||
# architecture only deploys it on separate compute nodes. |
||||
disable_service n-cpu |
||||
|
||||
# Disable cinder services and tempest to reduce deployment time. |
||||
disable_service c-api c-sch c-vol tempest |
||||
|
||||
# Until OVN supports NAT, the private network IP address range |
||||
# must not conflict with IP address ranges on the host. Change |
||||
# as necessary for your environment. |
||||
NETWORK_GATEWAY=172.16.1.1 |
||||
FIXED_RANGE=172.16.1.0/24 |
||||
|
||||
# Use provider network for public. |
||||
Q_USE_PROVIDERNET_FOR_PUBLIC=True |
||||
OVS_PHYSICAL_BRIDGE=br-provider |
||||
PHYSICAL_NETWORK=provider |
||||
PUBLIC_NETWORK_NAME=provider |
||||
PUBLIC_NETWORK_GATEWAY="$gateway" |
||||
PUBLIC_PHYSICAL_NETWORK=provider |
||||
PUBLIC_SUBNET_NAME=provider-v4 |
||||
IPV6_PUBLIC_SUBNET_NAME=provider-v6 |
||||
Q_FLOATING_ALLOCATION_POOL="start=$start_ip,end=$end_ip" |
||||
FLOATING_RANGE="$network" |
||||
|
||||
# If the admin wants to enable this chassis to host gateway routers for |
||||
# external connectivity, then set ENABLE_CHASSIS_AS_GW to True. |
||||
# Then devstack will set ovn-cms-options with enable-chassis-as-gw |
||||
# in Open_vSwitch table's external_ids column |
||||
ENABLE_CHASSIS_AS_GW=True |
||||
DEVSTACKEOF |
||||
|
||||
# Add unique post-config for DevStack here using a separate 'cat' with |
||||
# single quotes around EOF to prevent interpretation of variables such |
||||
# as $NEUTRON_CONF. |
||||
|
||||
cat << 'DEVSTACKEOF' >> devstack/local.conf.vagrant |
||||
|
||||
# Enable two DHCP agents per neutron subnet with support for availability |
||||
# zones. Requires two or more compute nodes. |
||||
|
||||
[[post-config|/$NEUTRON_CONF]] |
||||
[DEFAULT] |
||||
network_scheduler_driver = neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler |
||||
dhcp_load_type = networks |
||||
dhcp_agents_per_network = 2 |
||||
|
||||
# Configure the Compute service (nova) metadata API to use the X-Forwarded-For |
||||
# header sent by the Networking service metadata proxies on the compute nodes. |
||||
|
||||
[[post-config|$NOVA_CONF]] |
||||
[DEFAULT] |
||||
use_forwarded_for = True |
||||
DEVSTACKEOF |
||||
|
||||
|
||||
sed '/#EXTRA_CONFIG/ r devstack/local.conf.vagrant' \ |
||||
neutron/devstack/ovn-local.conf.sample > devstack/local.conf |
||||
|
||||
|
||||
devstack/stack.sh |
||||
|
||||
# Make the provider network shared and enable DHCP for its v4 subnet. |
||||
source devstack/openrc admin admin |
||||
neutron net-update --shared $PUBLIC_NETWORK_NAME |
||||
neutron subnet-update --enable_dhcp=True $PUBLIC_SUBNET_NAME |
||||
|
||||
# NFS server setup |
||||
sudo apt-get update |
||||
sudo apt-get install -y nfs-kernel-server nfs-common |
||||
sudo mkdir -p /opt/stack/data/nova/instances |
||||
sudo touch /etc/exports |
||||
sudo sh -c "echo \"/opt/stack/data/nova/instances $ovn_vm_subnet(rw,sync,fsid=0,no_root_squash)\" >> /etc/exports" |
||||
sudo service nfs-kernel-server restart |
||||
sudo service nfs-idmapd restart |
||||
|
||||
# Set the OVN_*_DB variables to enable OVN commands using a remote database. |
||||
echo -e "\n# Enable OVN commands using a remote database. |
||||
export OVN_NB_DB=$OVN_NB_REMOTE |
||||
export OVN_SB_DB=$OVN_SB_REMOTE" >> ~/.bash_profile |
||||
|
@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash |
||||
CONTROLLER_IP=$1 |
||||
|
||||
cp neutron/devstack/ovn-db-local.conf.sample devstack/local.conf |
||||
if [ "$CONTROLLER_IP" != "" ]; then |
||||
sed -i -e 's/<IP address of host running everything else>/'$CONTROLLER_IP'/g' devstack/local.conf |
||||
fi |
||||
|
||||
# Get the IP address |
||||
if ip a | grep enp0 ; then |
||||
ipaddress=$(ip -4 addr show enp0s8 | grep -oP "(?<=inet ).*(?=/)") |
||||
else |
||||
ipaddress=$(ip -4 addr show eth1 | grep -oP "(?<=inet ).*(?=/)") |
||||
fi |
||||
|
||||
# Adjust some things in local.conf |
||||
cat << DEVSTACKEOF >> devstack/local.conf |
||||
|
||||
# Set this to the address of the main DevStack host running the rest of the |
||||
# OpenStack services. |
||||
Q_HOST=$CONTROLLER_IP |
||||
HOST_IP=$ipaddress |
||||
HOSTNAME=$(hostname) |
||||
|
||||
# Enable logging to files. |
||||
LOGFILE=/opt/stack/log/stack.sh.log |
||||
DEVSTACKEOF |
||||
|
||||
devstack/stack.sh |
@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash |
||||
OVN_DB_IP=$2 |
||||
|
||||
cp neutron/devstack/ovn-vtep-local.conf.sample devstack/local.conf |
||||
if [ "$1" != "" ]; then |
||||
sed -i -e 's/<IP address of host running everything else>/'$1'/g' devstack/local.conf |
||||
fi |
||||
|
||||
# Get the IP address |
||||
if ip a | grep enp0 ; then |
||||
ipaddress=$(ip -4 addr show enp0s8 | grep -oP "(?<=inet ).*(?=/)") |
||||
else |
||||
ipaddress=$(ip -4 addr show eth1 | grep -oP "(?<=inet ).*(?=/)") |
||||
fi |
||||
|
||||
# Adjust some things in local.conf |
||||
cat << DEVSTACKEOF >> devstack/local.conf |
||||
|
||||
# Set this to the address of the main DevStack host running the rest of the |
||||
# OpenStack services. |
||||
Q_HOST=$1 |
||||
HOST_IP=$ipaddress |
||||
HOSTNAME=$(hostname) |
||||
|
||||
OVN_SB_REMOTE=tcp:$OVN_DB_IP:6642 |
||||
OVN_NB_REMOTE=tcp:$OVN_DB_IP:6641 |
||||
|
||||
# Enable logging to files. |
||||
LOGFILE=/opt/stack/log/stack.sh.log |
||||
DEVSTACKEOF |
||||
|
||||
devstack/stack.sh |
@ -0,0 +1,9 @@
|
||||
=================== |
||||
Sparse architecture |
||||
=================== |
||||
|
||||
Please reference the files in |
||||
/doc/source/contributor/ovn_vagrant/sparse-architecture.rst for more |
||||
information about this architecture. |
||||
|
||||
|
@ -0,0 +1,96 @@
|
||||
# -*- mode: ruby -*- |
||||
# vi: set ft=ruby : |
||||
|
||||
require 'yaml' |
||||
require 'ipaddr' |
||||
require '../provisioning/providers.rb' |
||||
|
||||
vagrant_config = YAML.load_file("instances.yml") |
||||
|
||||
Vagrant.configure(2) do |config| |
||||
|
||||
if Vagrant.has_plugin?("vagrant-cachier") |
||||
# Configure cached packages to be shared between instances of the same base box. |
||||
# More info on http://fgrehm.viewdocs.io/vagrant-cachier/usage |
||||
config.cache.scope = :box |
||||
end |
||||
|
||||
config.vm.synced_folder ".", "/vagrant", disabled: true |
||||
config.vm.synced_folder File.expand_path(".."), "/vagrant" |
||||
config.vm.synced_folder File.expand_path("../.."), "/home/vagrant/neutron" |
||||
|
||||
# Use the ipaddr library to calculate the netmask of a given network |
||||
net = IPAddr.new vagrant_config['provider_network'] |
||||
netmask = net.inspect().split("/")[1].split(">")[0] |
||||
|
||||
# Build the common args for the setup-base.sh scripts. |
||||
setup_base_common_args = "#{vagrant_config['ovndb']['ip']} #{vagrant_config['ovndb']['short_name']} " + |
||||
"#{vagrant_config['ovncontroller']['ip']} #{vagrant_config['ovncontroller']['short_name']} " + |
||||
"#{vagrant_config['ovncompute1']['ip']} #{vagrant_config['ovncompute1']['short_name']} " + |
||||
"#{vagrant_config['ovncompute2']['ip']} #{vagrant_config['ovncompute2']['short_name']} " + |
||||
"#{vagrant_config['ovnvtep']['ip']} #{vagrant_config['ovnvtep']['short_name']} " |
||||
|
||||
# Bring up the Devstack ovsdb/ovn-northd node |
||||
config.vm.define "ovn-db" do |ovndb| |
||||
cfg = vagrant_config['ovndb'] |
||||
ovndb.vm.host_name = cfg['host_name'] |
||||
ovndb.vm.network "private_network", ip: cfg['ip'] |
||||
ovndb.vm.network "private_network", ip: cfg['prov-ip'], netmask: netmask |
||||
ovndb.vm.provision "shell", path: "../provisioning/setup-base.sh", privileged: false, |
||||
:args => "#{vagrant_config['ovndb']['mtu']} #{setup_base_common_args}" |
||||
ovndb.vm.provision "shell", path: "../provisioning/setup-db.sh", privileged: false, :args => "#{vagrant_config['ovncontroller']['ip']}" |
||||
|
||||
configure_providers(ovndb.vm, cfg) |
||||
end |
||||
|
||||
# Bring up the Devstack controller node on Virtualbox |
||||
config.vm.define "ovn-controller", primary: true do |ovncontroller| |
||||
cfg = vagrant_config['ovncontroller'] |
||||
ovncontroller.vm.host_name = cfg['host_name'] |
||||
ovncontroller.vm.network "private_network", ip: cfg['ip'] |
||||
ovncontroller.vm.network "private_network", ip: cfg['prov-ip'], netmask: netmask |
||||
ovncontroller.vm.provision "shell", path: "../provisioning/setup-base.sh", privileged: false, |
||||
:args => "#{cfg['mtu']} #{setup_base_common_args}" |
||||
ovncontroller.vm.provision "shell", path: "../provisioning/setup-controller.sh", privileged: false, |
||||
:args => "#{vagrant_config['ovndb']['ip']} #{vagrant_config['provider_start_ip']} #{vagrant_config['provider_end_ip']} " + |
||||
"#{vagrant_config['provider_gateway']} #{vagrant_config['provider_network']} #{vagrant_config['ovn_vm_subnet']}" |
||||
configure_providers(ovncontroller.vm, cfg) |
||||
end |
||||
|
||||
config.vm.define "ovn-vtep", autostart: false do |ovnvtep| |
||||
cfg = vagrant_config['ovnvtep'] |
||||
ovnvtep.vm.host_name = cfg['host_name'] |
||||
ovnvtep.vm.network "private_network", ip: cfg['ip'] |
||||
ovnvtep.vm.network "private_network", ip: cfg['prov-ip'], netmask: netmask |
||||
ovnvtep.vm.provision "shell", path: "../provisioning/setup-base.sh", privileged: false, |
||||
:args => "#{cfg['mtu']} #{setup_base_common_args}" |
||||
ovnvtep.vm.provision "shell", path: "../provisioning/setup-vtep.sh", privileged: false, :args => "#{vagrant_config['ovncontroller']['ip']} #{vagrant_config['ovndb']['ip']}" |
||||
configure_providers(ovnvtep.vm, cfg) |
||||
end |
||||
|
||||
# Bring up the first Devstack compute node on Virtualbox |
||||
config.vm.define "ovn-compute1" do |ovncompute1| |
||||
cfg = vagrant_config['ovncompute1'] |
||||
ovncompute1.vm.host_name = cfg['host_name'] |
||||
ovncompute1.vm.network "private_network", ip: cfg['ip'] |
||||
ovncompute1.vm.network "private_network", ip: cfg['prov-ip'], netmask: netmask |
||||
ovncompute1.vm.provision "shell", path: "../provisioning/setup-base.sh", privileged: false, |
||||
:args => "#{cfg['mtu']} #{setup_base_common_args}" |
||||
ovncompute1.vm.provision "shell", path: "../provisioning/setup-compute.sh", privileged: false, |
||||
:args => "#{vagrant_config['ovncontroller']['ip']} #{vagrant_config['ovndb']['ip']}" |
||||
configure_providers(ovncompute1.vm, cfg) |
||||
end |
||||
|
||||
# Bring up the second Devstack compute node on Virtualbox |
||||
config.vm.define "ovn-compute2" do |ovncompute2| |
||||
cfg = vagrant_config['ovncompute2'] |
||||
ovncompute2.vm.host_name = cfg['host_name'] |
||||
ovncompute2.vm.network "private_network", ip: cfg['ip'] |
||||
ovncompute2.vm.network "private_network", ip: cfg['prov-ip'], netmask: netmask |
||||
ovncompute2.vm.provision "shell", path: "../provisioning/setup-base.sh", privileged: false, |
||||
:args => "#{cfg['mtu']} #{setup_base_common_args}" |
||||
ovncompute2.vm.provision "shell", path: "../provisioning/setup-compute.sh", privileged: false, |
||||
:args => "#{vagrant_config['ovncontroller']['ip']} #{vagrant_config['ovndb']['ip']}" |
||||
configure_providers(ovncompute2.vm, cfg) |
||||
end |
||||
end |
@ -0,0 +1,46 @@
|
||||
--- |
||||
provider_network: "10.10.0.0/16" |
||||
provider_gateway: "10.10.0.1" |
||||
provider_start_ip: "10.10.0.101" |
||||
provider_end_ip: "10.10.255.250" |
||||
ovn_vm_subnet: "192.168.33.0/24" |
||||
ovndb: |
||||
short_name: "ovn-db" |
||||
host_name: "ovn-db.devstack.dev" |
||||
ip: "192.168.33.11" |
||||
prov-ip: "10.10.0.11" |
||||
memory: 512 |
||||
cpus: 2 |
||||
mtu: 1500 |
||||
ovncontroller: |
||||
short_name: "ovn-controller" |
||||
host_name: "ovn-controller.devstack.dev" |
||||
ip: "192.168.33.12" |
||||
prov-ip: "10.10.0.12" |
||||
memory: 3072 |
||||
cpus: 2 |
||||
mtu: 1500 |
||||
ovnvtep: |
||||
short_name: "ovn-vtep" |
||||
host_name: "ovn-vtep.devstack.dev" |
||||
ip: "192.168.33.13" |
||||
prov-ip: "10.10.0.13" |
||||
memory: 512 |
||||
cpus: 1 |
||||
mtu: 1500 |
||||
ovncompute1: |
||||
short_name: "ovn-compute1" |
||||
host_name: "ovn-compute1.devstack.dev" |
||||
ip: "192.168.33.31" |
||||
prov-ip: "10.10.0.31" |
||||
memory: 1536 |
||||
cpus: 1 |
||||
mtu: 1500 |
||||
ovncompute2: |
||||
short_name: "ovn-compute2" |
||||
host_name: "ovn-compute2.devstack.dev" |
||||
ip: "192.168.33.32" |
||||
prov-ip: "10.10.0.32" |
||||
memory: 1536 |
||||
cpus: 1 |
||||
mtu: 1500 |
Loading…
Reference in new issue