xenapi: Cleanup networking
OpenStack VM had 4 interfaces, from which eth0 was connected to HIMN (Host Internal Management Network), and not used at all. The reason for not using this interface according to johngarbutt is: - VNC console would not work - migrations would not work - many other things This change removes the interface, thus devstack is providing the same architecture as described in the official documentation, YAGNI applied on the HIMN: http://goo.gl/dmrNF The change also modifies some defaults, so it's easier to get started: - The Ubuntu VM is network-installed through the management network - OS VM is getting its address on the management network through DHCP - Default Public IP addresses aligned to stack.sh defaults - OS Services are listening on Management Interface Related to blueprint xenapi-devstack-cleanup Change-Id: I73c9751ade6f4786b8b682a1994cb87f0a624379
This commit is contained in:
parent
aef5fcae9c
commit
5a56cd6283
2
lib/nova
2
lib/nova
@ -77,7 +77,7 @@ SPICE_DIR=$DEST/spice-html5
|
|||||||
|
|
||||||
# Set defaults according to the virt driver
|
# Set defaults according to the virt driver
|
||||||
if [ "$VIRT_DRIVER" = 'xenserver' ]; then
|
if [ "$VIRT_DRIVER" = 'xenserver' ]; then
|
||||||
PUBLIC_INTERFACE_DEFAULT=eth3
|
PUBLIC_INTERFACE_DEFAULT=eth2
|
||||||
GUEST_INTERFACE_DEFAULT=eth1
|
GUEST_INTERFACE_DEFAULT=eth1
|
||||||
# Allow ``build_domU.sh`` to specify the flat network bridge via kernel args
|
# Allow ``build_domU.sh`` to specify the flat network bridge via kernel args
|
||||||
FLAT_NETWORK_BRIDGE_DEFAULT=$(sed -e 's/.* flat_network_bridge=\([[:alnum:]]*\).*$/\1/g' /proc/cmdline)
|
FLAT_NETWORK_BRIDGE_DEFAULT=$(sed -e 's/.* flat_network_bridge=\([[:alnum:]]*\).*$/\1/g' /proc/cmdline)
|
||||||
|
3
stack.sh
3
stack.sh
@ -1001,6 +1001,9 @@ if is_service_enabled nova; then
|
|||||||
|
|
||||||
if [ "$VIRT_DRIVER" = 'xenserver' ]; then
|
if [ "$VIRT_DRIVER" = 'xenserver' ]; then
|
||||||
echo_summary "Using XenServer virtualization driver"
|
echo_summary "Using XenServer virtualization driver"
|
||||||
|
if [ -z "$XENAPI_CONNECTION_URL" ]; then
|
||||||
|
die $LINENO "XENAPI_CONNECTION_URL is not specified"
|
||||||
|
fi
|
||||||
read_password XENAPI_PASSWORD "ENTER A PASSWORD TO USE FOR XEN."
|
read_password XENAPI_PASSWORD "ENTER A PASSWORD TO USE FOR XEN."
|
||||||
iniset $NOVA_CONF DEFAULT compute_driver "xenapi.XenAPIDriver"
|
iniset $NOVA_CONF DEFAULT compute_driver "xenapi.XenAPIDriver"
|
||||||
iniset $NOVA_CONF DEFAULT xenapi_connection_url "$XENAPI_CONNECTION_URL"
|
iniset $NOVA_CONF DEFAULT xenapi_connection_url "$XENAPI_CONNECTION_URL"
|
||||||
|
1
stackrc
1
stackrc
@ -178,7 +178,6 @@ case "$VIRT_DRIVER" in
|
|||||||
;;
|
;;
|
||||||
xenserver)
|
xenserver)
|
||||||
# Xen config common to nova and quantum
|
# Xen config common to nova and quantum
|
||||||
XENAPI_CONNECTION_URL=${XENAPI_CONNECTION_URL:-"http://169.254.0.1"}
|
|
||||||
XENAPI_USER=${XENAPI_USER:-"root"}
|
XENAPI_USER=${XENAPI_USER:-"root"}
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
@ -34,6 +34,13 @@ The `install_os_domU.sh` script will:
|
|||||||
`eth0`.
|
`eth0`.
|
||||||
- eth3 - Public interface, connected to `PUB_BRIDGE_OR_NET_NAME` defaults to
|
- eth3 - Public interface, connected to `PUB_BRIDGE_OR_NET_NAME` defaults to
|
||||||
`"OpenStack Public Network"`.
|
`"OpenStack Public Network"`.
|
||||||
|
- After the Ubuntu install process finished, the network configuration is
|
||||||
|
modified to:
|
||||||
|
- eth0 - Management interface, connected to `MGT_BRIDGE_OR_NET_NAME`
|
||||||
|
- eth1 - VM interface, connected to `VM_BRIDGE_OR_NET_NAME`
|
||||||
|
- eth2 - Public interface, connected to `PUB_BRIDGE_OR_NET_NAME`
|
||||||
|
- (eth3) - Optional network interface if quantum is used, to enforce xapi to
|
||||||
|
create the underlying bridge.
|
||||||
- Start devstack inside the created OpenStack VM
|
- Start devstack inside the created OpenStack VM
|
||||||
|
|
||||||
## Step 1: Install Xenserver
|
## Step 1: Install Xenserver
|
||||||
@ -92,30 +99,12 @@ Of course, use real passwords if this machine is exposed.
|
|||||||
MULTI_HOST=1
|
MULTI_HOST=1
|
||||||
# Give extra time for boot
|
# Give extra time for boot
|
||||||
ACTIVE_TIMEOUT=45
|
ACTIVE_TIMEOUT=45
|
||||||
# Host Interface, i.e. the interface on the OpenStack vm you want to expose
|
|
||||||
# the services on. The default is eth3, which means the public network, but
|
|
||||||
# as the public network is going to be virtual, we are setting the services
|
|
||||||
# to listen on the management network, which defaults to 'xenbr0', the
|
|
||||||
# XenServer's network.
|
|
||||||
HOST_IP_IFACE=eth2
|
|
||||||
|
|
||||||
# Use DHCP server to configure the Management IP of OpenStack VM
|
|
||||||
MGT_IP="dhcp"
|
|
||||||
|
|
||||||
# Settings for netinstalling Ubuntu
|
# Settings for netinstalling Ubuntu
|
||||||
UBUNTU_INST_RELEASE=precise
|
UBUNTU_INST_RELEASE=precise
|
||||||
|
|
||||||
# First time Ubuntu network install params, use the DHCP server on the
|
|
||||||
# management network
|
|
||||||
UBUNTU_INST_IFACE="eth2"
|
|
||||||
UBUNTU_INST_IP="dhcp"
|
|
||||||
|
|
||||||
# NOTE: the value of FLAT_NETWORK_BRIDGE will automatically be determined
|
# NOTE: the value of FLAT_NETWORK_BRIDGE will automatically be determined
|
||||||
# by install_os_domU.sh script.
|
# by install_os_domU.sh script.
|
||||||
|
|
||||||
# Public IP address is aligned with the devstack defaults (see FLOATING_RANGE)
|
|
||||||
PUB_IP=172.24.4.10
|
|
||||||
PUB_NETMASK=255.255.255.0
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
## Step 4: Run `./install_os_domU.sh` from the `tools/xen` directory
|
## Step 4: Run `./install_os_domU.sh` from the `tools/xen` directory
|
||||||
|
@ -32,6 +32,41 @@ source xenrc
|
|||||||
#
|
#
|
||||||
GUEST_NAME="$1"
|
GUEST_NAME="$1"
|
||||||
|
|
||||||
|
function _print_interface_config() {
|
||||||
|
local device_nr
|
||||||
|
local ip_address
|
||||||
|
local netmask
|
||||||
|
|
||||||
|
device_nr="$1"
|
||||||
|
ip_address="$2"
|
||||||
|
netmask="$3"
|
||||||
|
|
||||||
|
local device
|
||||||
|
|
||||||
|
device="eth${device_nr}"
|
||||||
|
|
||||||
|
echo "auto $device"
|
||||||
|
if [ $ip_address == "dhcp" ]; then
|
||||||
|
echo "iface $device inet dhcp"
|
||||||
|
else
|
||||||
|
echo "iface $device inet static"
|
||||||
|
echo " address $ip_address"
|
||||||
|
echo " netmask $netmask"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Turn off tx checksumming for better performance
|
||||||
|
echo " post-up ethtool -K $device tx off"
|
||||||
|
}
|
||||||
|
|
||||||
|
function print_interfaces_config() {
|
||||||
|
echo "auto lo"
|
||||||
|
echo "iface lo inet loopback"
|
||||||
|
|
||||||
|
_print_interface_config $PUB_DEV_NR $PUB_IP $PUB_NETMASK
|
||||||
|
_print_interface_config $VM_DEV_NR $VM_IP $VM_NETMASK
|
||||||
|
_print_interface_config $MGT_DEV_NR $MGT_IP $MGT_NETMASK
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Mount the VDI
|
# Mount the VDI
|
||||||
#
|
#
|
||||||
@ -81,42 +116,7 @@ $HOSTS_FILE_IP $GUEST_NAME
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Configure the network
|
# Configure the network
|
||||||
INTERFACES=$STAGING_DIR/etc/network/interfaces
|
print_interfaces_config > $STAGING_DIR/etc/network/interfaces
|
||||||
TEMPLATES_DIR=$TOP_DIR/templates
|
|
||||||
cp $TEMPLATES_DIR/interfaces.in $INTERFACES
|
|
||||||
if [ $VM_IP == "dhcp" ]; then
|
|
||||||
echo 'eth1 on dhcp'
|
|
||||||
sed -e "s,iface eth1 inet static,iface eth1 inet dhcp,g" -i $INTERFACES
|
|
||||||
sed -e '/@ETH1_/d' -i $INTERFACES
|
|
||||||
else
|
|
||||||
sed -e "s,@ETH1_IP@,$VM_IP,g" -i $INTERFACES
|
|
||||||
sed -e "s,@ETH1_NETMASK@,$VM_NETMASK,g" -i $INTERFACES
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $MGT_IP == "dhcp" ]; then
|
|
||||||
echo 'eth2 on dhcp'
|
|
||||||
sed -e "s,iface eth2 inet static,iface eth2 inet dhcp,g" -i $INTERFACES
|
|
||||||
sed -e '/@ETH2_/d' -i $INTERFACES
|
|
||||||
else
|
|
||||||
sed -e "s,@ETH2_IP@,$MGT_IP,g" -i $INTERFACES
|
|
||||||
sed -e "s,@ETH2_NETMASK@,$MGT_NETMASK,g" -i $INTERFACES
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $PUB_IP == "dhcp" ]; then
|
|
||||||
echo 'eth3 on dhcp'
|
|
||||||
sed -e "s,iface eth3 inet static,iface eth3 inet dhcp,g" -i $INTERFACES
|
|
||||||
sed -e '/@ETH3_/d' -i $INTERFACES
|
|
||||||
else
|
|
||||||
sed -e "s,@ETH3_IP@,$PUB_IP,g" -i $INTERFACES
|
|
||||||
sed -e "s,@ETH3_NETMASK@,$PUB_NETMASK,g" -i $INTERFACES
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$ENABLE_GI" == "true" ]; then
|
|
||||||
cat <<EOF >>$INTERFACES
|
|
||||||
auto eth0
|
|
||||||
iface eth0 inet dhcp
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Gracefully cp only if source file/dir exists
|
# Gracefully cp only if source file/dir exists
|
||||||
function cp_it {
|
function cp_it {
|
||||||
|
@ -224,3 +224,19 @@ function append_kernel_cmdline()
|
|||||||
pv_args=$(xe vm-param-get param-name=PV-args uuid=$vm)
|
pv_args=$(xe vm-param-get param-name=PV-args uuid=$vm)
|
||||||
xe vm-param-set PV-args="$pv_args $kernel_args" uuid=$vm
|
xe vm-param-set PV-args="$pv_args $kernel_args" uuid=$vm
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function destroy_all_vifs_of()
|
||||||
|
{
|
||||||
|
local vm_name_label
|
||||||
|
|
||||||
|
vm_name_label="$1"
|
||||||
|
|
||||||
|
local vm
|
||||||
|
|
||||||
|
vm=$(_vm_uuid "$vm_name_label")
|
||||||
|
IFS=,
|
||||||
|
for vif in $(xe vif-list vm-uuid=$vm --minimal); do
|
||||||
|
xe vif-destroy uuid="$vif"
|
||||||
|
done
|
||||||
|
unset IFS
|
||||||
|
}
|
||||||
|
@ -238,6 +238,15 @@ else
|
|||||||
vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
|
vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
## Setup network cards
|
||||||
|
# Wipe out all
|
||||||
|
destroy_all_vifs_of "$GUEST_NAME"
|
||||||
|
# Tenant network
|
||||||
|
add_interface "$GUEST_NAME" "$VM_BRIDGE_OR_NET_NAME" "$VM_DEV_NR"
|
||||||
|
# Management network
|
||||||
|
add_interface "$GUEST_NAME" "$MGT_BRIDGE_OR_NET_NAME" "$MGT_DEV_NR"
|
||||||
|
# Public network
|
||||||
|
add_interface "$GUEST_NAME" "$PUB_BRIDGE_OR_NET_NAME" "$PUB_DEV_NR"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Inject DevStack inside VM disk
|
# Inject DevStack inside VM disk
|
||||||
@ -248,7 +257,7 @@ $THIS_DIR/build_xva.sh "$GUEST_NAME"
|
|||||||
# is created by XenServer). This is required for Quantum. Also pass that as a
|
# is created by XenServer). This is required for Quantum. Also pass that as a
|
||||||
# kernel parameter for DomU
|
# kernel parameter for DomU
|
||||||
if is_service_enabled quantum; then
|
if is_service_enabled quantum; then
|
||||||
add_interface "$GUEST_NAME" "$XEN_INT_BRIDGE_OR_NET_NAME" "4"
|
add_interface "$GUEST_NAME" "$XEN_INT_BRIDGE_OR_NET_NAME" $XEN_INT_DEV_NR
|
||||||
|
|
||||||
XEN_INTEGRATION_BRIDGE=$(bridge_for "$XEN_INT_BRIDGE_OR_NET_NAME")
|
XEN_INTEGRATION_BRIDGE=$(bridge_for "$XEN_INT_BRIDGE_OR_NET_NAME")
|
||||||
append_kernel_cmdline \
|
append_kernel_cmdline \
|
||||||
@ -275,19 +284,19 @@ function ssh_no_check() {
|
|||||||
# Get hold of the Management IP of OpenStack VM
|
# Get hold of the Management IP of OpenStack VM
|
||||||
OS_VM_MANAGEMENT_ADDRESS=$MGT_IP
|
OS_VM_MANAGEMENT_ADDRESS=$MGT_IP
|
||||||
if [ $OS_VM_MANAGEMENT_ADDRESS == "dhcp" ]; then
|
if [ $OS_VM_MANAGEMENT_ADDRESS == "dhcp" ]; then
|
||||||
OS_VM_MANAGEMENT_ADDRESS=$(find_ip_by_name $GUEST_NAME 2)
|
OS_VM_MANAGEMENT_ADDRESS=$(find_ip_by_name $GUEST_NAME $MGT_DEV_NR)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get hold of the Service IP of OpenStack VM
|
# Get hold of the Service IP of OpenStack VM
|
||||||
if [ $HOST_IP_IFACE == "eth2" ]; then
|
if [ $HOST_IP_IFACE == "eth${MGT_DEV_NR}" ]; then
|
||||||
OS_VM_SERVICES_ADDRESS=$MGT_IP
|
OS_VM_SERVICES_ADDRESS=$MGT_IP
|
||||||
if [ $MGT_IP == "dhcp" ]; then
|
if [ $MGT_IP == "dhcp" ]; then
|
||||||
OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME 2)
|
OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME $MGT_DEV_NR)
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
OS_VM_SERVICES_ADDRESS=$PUB_IP
|
OS_VM_SERVICES_ADDRESS=$PUB_IP
|
||||||
if [ $PUB_IP == "dhcp" ]; then
|
if [ $PUB_IP == "dhcp" ]; then
|
||||||
OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME 3)
|
OS_VM_SERVICES_ADDRESS=$(find_ip_by_name $GUEST_NAME $PUB_DEV_NR)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
auto lo
|
|
||||||
iface lo inet loopback
|
|
||||||
|
|
||||||
# If eth3 is static, the order should not matter
|
|
||||||
# and eth0 will have the default gateway. If not,
|
|
||||||
# we probably want the default gateway to be
|
|
||||||
# what is on the public interface. Hence changed
|
|
||||||
# the order here.
|
|
||||||
auto eth3
|
|
||||||
iface eth3 inet static
|
|
||||||
address @ETH3_IP@
|
|
||||||
netmask @ETH3_NETMASK@
|
|
||||||
|
|
||||||
auto eth1
|
|
||||||
iface eth1 inet static
|
|
||||||
address @ETH1_IP@
|
|
||||||
netmask @ETH1_NETMASK@
|
|
||||||
post-up ethtool -K eth1 tx off
|
|
||||||
|
|
||||||
auto eth2
|
|
||||||
iface eth2 inet static
|
|
||||||
address @ETH2_IP@
|
|
||||||
netmask @ETH2_NETMASK@
|
|
@ -30,32 +30,35 @@ XEN_INT_BRIDGE_OR_NET_NAME="OpenStack VM Integration Network"
|
|||||||
# VM Password
|
# VM Password
|
||||||
GUEST_PASSWORD=${GUEST_PASSWORD:-secrete}
|
GUEST_PASSWORD=${GUEST_PASSWORD:-secrete}
|
||||||
|
|
||||||
|
# Extracted variables for OpenStack VM network device numbers.
|
||||||
|
# Make sure, they form a continous sequence starting from 0
|
||||||
|
MGT_DEV_NR=0
|
||||||
|
VM_DEV_NR=1
|
||||||
|
PUB_DEV_NR=2
|
||||||
|
XEN_INT_DEV_NR=3
|
||||||
|
|
||||||
# Host Interface, i.e. the interface on the nova vm you want to expose the
|
# Host Interface, i.e. the interface on the nova vm you want to expose the
|
||||||
# services on. Usually eth2 (management network) or eth3 (public network) and
|
# services on. Usually the device connected to the management network or the
|
||||||
# not eth0 (private network with XenServer host) or eth1 (VM traffic network)
|
# one connected to the public network is used.
|
||||||
HOST_IP_IFACE=${HOST_IP_IFACE:-eth3}
|
HOST_IP_IFACE=${HOST_IP_IFACE:-"eth${MGT_DEV_NR}"}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Our nova host's network info
|
# Our nova host's network info
|
||||||
#
|
#
|
||||||
|
|
||||||
# Management network
|
# Management network
|
||||||
MGT_IP=${MGT_IP:-172.16.100.55}
|
MGT_IP=${MGT_IP:-dhcp}
|
||||||
MGT_NETMASK=${MGT_NETMASK:-255.255.255.0}
|
MGT_NETMASK=${MGT_NETMASK:-ignored}
|
||||||
|
|
||||||
# VM Network
|
# VM Network
|
||||||
VM_IP=${VM_IP:-10.255.255.255}
|
VM_IP=${VM_IP:-10.255.255.255}
|
||||||
VM_NETMASK=${VM_NETMASK:-255.255.255.0}
|
VM_NETMASK=${VM_NETMASK:-255.255.255.0}
|
||||||
|
|
||||||
# Public network
|
# Public network
|
||||||
PUB_IP=${PUB_IP:-192.168.1.55}
|
# Aligned with stack.sh - see FLOATING_RANGE
|
||||||
|
PUB_IP=${PUB_IP:-172.24.4.10}
|
||||||
PUB_NETMASK=${PUB_NETMASK:-255.255.255.0}
|
PUB_NETMASK=${PUB_NETMASK:-255.255.255.0}
|
||||||
|
|
||||||
# Decide if you should enable eth0,
|
|
||||||
# the guest installer network
|
|
||||||
# You need to disable this on xcp-xapi on Ubuntu 12.04
|
|
||||||
ENABLE_GI=true
|
|
||||||
|
|
||||||
# Ubuntu install settings
|
# Ubuntu install settings
|
||||||
UBUNTU_INST_RELEASE="oneiric"
|
UBUNTU_INST_RELEASE="oneiric"
|
||||||
UBUNTU_INST_TEMPLATE_NAME="Ubuntu 11.10 (64-bit) for DevStack"
|
UBUNTU_INST_TEMPLATE_NAME="Ubuntu 11.10 (64-bit) for DevStack"
|
||||||
@ -69,8 +72,11 @@ UBUNTU_INST_HTTP_DIRECTORY="/ubuntu"
|
|||||||
UBUNTU_INST_HTTP_PROXY=""
|
UBUNTU_INST_HTTP_PROXY=""
|
||||||
UBUNTU_INST_LOCALE="en_US"
|
UBUNTU_INST_LOCALE="en_US"
|
||||||
UBUNTU_INST_KEYBOARD="us"
|
UBUNTU_INST_KEYBOARD="us"
|
||||||
# network configuration for ubuntu netinstall
|
# network configuration for ubuntu netinstall.
|
||||||
UBUNTU_INST_IFACE="eth3"
|
# TODO(matelakat): get rid of legacy network interfaces
|
||||||
|
# specify "eth2" to use the management network
|
||||||
|
# specify "eth3" to use the public network
|
||||||
|
UBUNTU_INST_IFACE="eth2"
|
||||||
UBUNTU_INST_IP="dhcp"
|
UBUNTU_INST_IP="dhcp"
|
||||||
UBUNTU_INST_NAMESERVERS=""
|
UBUNTU_INST_NAMESERVERS=""
|
||||||
UBUNTU_INST_NETMASK=""
|
UBUNTU_INST_NETMASK=""
|
||||||
|
Loading…
Reference in New Issue
Block a user