summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2010-11-18 00:11:45 +0000
committerVishvananda Ishaya <vishvananda@gmail.com>2010-11-18 00:11:45 +0000
commit659058bef7913254eca63e7f67a5d74ffe146e57 (patch)
tree44afec574a9555f6ce6c520241e2a1d830bb003f
parentff9b3b49090773070439d37df3149727fc7d3988 (diff)
fixes flatdhcp, updates nova.sh, allows for empty bridge device
-rwxr-xr-xcontrib/nova.sh28
-rw-r--r--nova/network/linux_net.py7
-rw-r--r--nova/network/manager.py24
3 files changed, 39 insertions, 20 deletions
diff --git a/contrib/nova.sh b/contrib/nova.sh
index 9bc36d6fb..abb8c7de0 100755
--- a/contrib/nova.sh
+++ b/contrib/nova.sh
@@ -17,11 +17,16 @@ if [ ! -n "$HOST_IP" ]; then
# you should explicitly set HOST_IP in your environment
HOST_IP=`ifconfig | grep -m 1 'inet addr:'| cut -d: -f2 | awk '{print $1}'`
fi
-TEST=0
-USE_MYSQL=0
-MYSQL_PASS=nova
-USE_LDAP=0
-LIBVIRT_TYPE=qemu
+
+USE_MYSQL=${USE_MYSQL:-0}
+MYSQL_PASS=${MYSQL_PASS:-nova}
+TEST=${TEST:-0}
+USE_LDAP=${USE_LDAP:-0}
+LIBVIRT_TYPE=${LIBVIRT_TYPE:-qemu}
+NET_MAN=${NET_MAN:-VlanManager}
+# NOTE(vish): If you are using FlatDHCP make sure that this is not your
+# public interface. You can comment it out for local usage
+BRIDGE_DEV=eth0
if [ "$USE_MYSQL" == 1 ]; then
SQL_CONN=mysql://root:$MYSQL_PASS@localhost/nova
@@ -41,6 +46,7 @@ cat >/etc/nova/nova-manage.conf << NOVA_CONF_EOF
--nodaemon
--dhcpbridge_flagfile=/etc/nova/nova-manage.conf
--FAKE_subdomain=ec2
+--network_manager=nova.network.manager.$NET_MAN
--cc_host=$HOST_IP
--routing_source_ip=$HOST_IP
--sql_connection=$SQL_CONN
@@ -48,6 +54,10 @@ cat >/etc/nova/nova-manage.conf << NOVA_CONF_EOF
--libvirt_type=$LIBVIRT_TYPE
NOVA_CONF_EOF
+if [ -n "$BRIDGE_DEV" ]; then
+ echo "--bridge_dev=$BRIDGE_DEV" >>/etc/nova/nova-manage.conf
+fi
+
if [ "$CMD" == "branch" ]; then
sudo apt-get install -y bzr
rm -rf $NOVA_DIR
@@ -65,6 +75,8 @@ if [ "$CMD" == "install" ]; then
sudo apt-get install -y dnsmasq open-iscsi kpartx kvm gawk iptables ebtables
sudo apt-get install -y user-mode-linux kvm libvirt-bin
sudo apt-get install -y screen iscsitarget euca2ools vlan curl rabbitmq-server
+ echo "ISCSITARGET_ENABLE=true" | sudo tee /etc/default/iscsitarget
+ sudo /etc/init.d/iscsitarget restart
sudo modprobe kvm
sudo /etc/init.d/libvirt-bin restart
sudo apt-get install -y python-twisted python-sqlalchemy python-mox python-greenlet python-carrot
@@ -123,8 +135,8 @@ if [ "$CMD" == "run" ]; then
$NOVA_DIR/bin/nova-manage project create admin admin
# export environment variables for project 'admin' and user 'admin'
$NOVA_DIR/bin/nova-manage project environment admin admin $NOVA_DIR/novarc
- # create 3 small networks
- $NOVA_DIR/bin/nova-manage network create 10.0.0.0/8 3 16
+ # create a small network
+ $NOVA_DIR/bin/nova-manage network create 10.0.0.0/8 1 32
# nova api crashes if we start it with a regular screen command,
# so send the start command by forcing text into the window.
@@ -135,7 +147,7 @@ if [ "$CMD" == "run" ]; then
screen_it scheduler "$NOVA_DIR/bin/nova-scheduler --flagfile=/etc/nova/nova-manage.conf"
screen_it volume "$NOVA_DIR/bin/nova-volume --flagfile=/etc/nova/nova-manage.conf"
screen_it test ". $NOVA_DIR/novarc"
- screen -x
+ screen -S nova -x
fi
if [ "$CMD" == "run" ] || [ "$CMD" == "terminate" ]; then
diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py
index 7b323efa1..68037ed9a 100644
--- a/nova/network/linux_net.py
+++ b/nova/network/linux_net.py
@@ -42,7 +42,7 @@ flags.DEFINE_string('networks_path', utils.abspath('../networks'),
'Location to keep network config files')
flags.DEFINE_string('public_interface', 'vlan1',
'Interface for public IP addresses')
-flags.DEFINE_string('bridge_dev', 'eth0',
+flags.DEFINE_string('bridge_dev', None,
'network device for bridges')
flags.DEFINE_string('dhcpbridge', _bin_file('nova-dhcpbridge'),
'location of nova-dhcpbridge')
@@ -142,12 +142,13 @@ def ensure_vlan(vlan_num):
def ensure_bridge(bridge, interface, net_attrs=None):
"""Create a bridge unless it already exists"""
if not _device_exists(bridge):
- logging.debug("Starting Bridge inteface for %s", interface)
+ logging.debug("Starting Bridge interface for %s", interface)
_execute("sudo brctl addbr %s" % bridge)
_execute("sudo brctl setfd %s 0" % bridge)
# _execute("sudo brctl setageing %s 10" % bridge)
_execute("sudo brctl stp %s off" % bridge)
- _execute("sudo brctl addif %s %s" % (bridge, interface))
+ if interface:
+ _execute("sudo brctl addif %s %s" % (bridge, interface))
if net_attrs:
_execute("sudo ifconfig %s %s broadcast %s netmask %s up" % \
(bridge,
diff --git a/nova/network/manager.py b/nova/network/manager.py
index b033bb0a4..96f8cf50b 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -63,7 +63,7 @@ flags.DEFINE_string('flat_network_bridge', 'br100',
'Bridge for simple network instances')
flags.DEFINE_string('flat_network_dns', '8.8.4.4',
'Dns for simple network')
-flags.DEFINE_string('flat_network_dhcp_start', '192.168.0.2',
+flags.DEFINE_string('flat_network_dhcp_start', '10.0.0.2',
'Dhcp start for FlatDhcp')
flags.DEFINE_integer('vlan_start', 100, 'First VLAN for private networks')
flags.DEFINE_integer('num_networks', 1000, 'Number of networks to support')
@@ -285,6 +285,7 @@ class FlatManager(NetworkManager):
cidr = "%s/%s" % (fixed_net[start], significant_bits)
project_net = IPy.IP(cidr)
net = {}
+ net['bridge'] = FLAGS.flat_network_bridge
net['cidr'] = cidr
net['netmask'] = str(project_net.netmask())
net['gateway'] = str(project_net[1])
@@ -307,17 +308,23 @@ class FlatManager(NetworkManager):
"""Called when this host becomes the host for a network."""
net = {}
net['injected'] = True
- net['bridge'] = FLAGS.flat_network_bridge
net['dns'] = FLAGS.flat_network_dns
self.db.network_update(context, network_id, net)
-class FlatDHCPManager(NetworkManager):
+class FlatDHCPManager(FlatManager):
"""Flat networking with dhcp."""
+ def setup_compute_network(self, context, instance_id):
+ """Sets up matching network for compute hosts."""
+ network_ref = db.network_get_by_instance(context, instance_id)
+ self.driver.ensure_bridge(network_ref['bridge'],
+ FLAGS.bridge_dev,
+ network_ref)
+
def setup_fixed_ip(self, context, address):
"""Setup dhcp for this network."""
- network_ref = db.fixed_ip_get_by_address(context, address)
+ network_ref = db.fixed_ip_get_network(context, address)
self.driver.update_dhcp(context, network_ref['id'])
def deallocate_fixed_ip(self, context, address, *args, **kwargs):
@@ -326,11 +333,10 @@ class FlatDHCPManager(NetworkManager):
def _on_set_network_host(self, context, network_id):
"""Called when this host becomes the host for a project."""
- super(FlatDHCPManager, self)._on_set_network_host(context, network_id)
- network_ref = self.db.network_get(context, network_id)
- self.db.network_update(context,
- network_id,
- {'dhcp_start': FLAGS.flat_network_dhcp_start})
+ net = {}
+ net['dhcp_start'] = FLAGS.flat_network_dhcp_start
+ self.db.network_update(context, network_id, net)
+ network_ref = db.network_get(context, network_id)
self.driver.ensure_bridge(network_ref['bridge'],
FLAGS.bridge_dev,
network_ref)