From 5c812bbdc15e0cf974026fcfaacd54e7a9f144cc Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Tue, 26 Jul 2011 21:29:24 +0000 Subject: cherry-pick tr3buchet's fix for milestone branch --- nova/compute/manager.py | 2 +- nova/network/api.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'nova') diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 31627fe3b..893c18aef 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -868,7 +868,7 @@ class ComputeManager(manager.SchedulerDependentManager): """ self.network_api.add_fixed_ip_to_instance(context, instance_id, - network_id) + self.host, network_id) self.inject_network_info(context, instance_id) self.reset_network(context, instance_id) diff --git a/nova/network/api.py b/nova/network/api.py index 33a9fe239..247768722 100644 --- a/nova/network/api.py +++ b/nova/network/api.py @@ -164,9 +164,10 @@ class API(base.Base): {'method': 'deallocate_for_instance', 'args': args}) - def add_fixed_ip_to_instance(self, context, instance_id, network_id): + def add_fixed_ip_to_instance(self, context, instance_id, host, network_id): """Adds a fixed ip to instance from specified network.""" args = {'instance_id': instance_id, + 'host': host, 'network_id': network_id} rpc.cast(context, FLAGS.network_topic, {'method': 'add_fixed_ip_to_instance', -- cgit From a0b536064620e4d18ab00c1154ec3b597ab16a67 Mon Sep 17 00:00:00 2001 From: Trey Morris Date: Wed, 27 Jul 2011 11:44:14 -0500 Subject: updated nova-manage create network. better help, handling of required args, and exceptions. Also updated FLAG flat_network_bridge to default to None --- nova/exception.py | 4 ++++ nova/network/manager.py | 8 ++++---- nova/tests/fake_flags.py | 1 + nova/virt/libvirt/vif.py | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) (limited to 'nova') diff --git a/nova/exception.py b/nova/exception.py index 38e705417..637cad7ee 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -372,6 +372,10 @@ class StorageRepositoryNotFound(NotFound): message = _("Cannot find SR to read/write VDI.") +class NetworkNotCreated(NovaException): + message = _("A %(req)s is required to create a network.") + + class NetworkNotFound(NotFound): message = _("Network %(network_id)s could not be found.") diff --git a/nova/network/manager.py b/nova/network/manager.py index 6f7573f66..77572b73d 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -68,7 +68,7 @@ LOG = logging.getLogger("nova.network.manager") FLAGS = flags.FLAGS -flags.DEFINE_string('flat_network_bridge', 'br100', +flags.DEFINE_string('flat_network_bridge', None, 'Bridge for simple network instances') flags.DEFINE_string('flat_network_dns', '8.8.4.4', 'Dns for simple network') @@ -720,9 +720,9 @@ class FlatManager(NetworkManager): """Basic network where no vlans are used. FlatManager does not do any bridge or vlan creation. The user is - responsible for setting up whatever bridge is specified in - flat_network_bridge (br100 by default). This bridge needs to be created - on all compute hosts. + responsible for setting up whatever bridges are specified when creating + networks through nova-manage. This bridge needs to be created on all + compute hosts. The idea is to create a single network for the host with a command like: nova-manage network create 192.168.0.0/24 1 256. Creating multiple diff --git a/nova/tests/fake_flags.py b/nova/tests/fake_flags.py index 2297d2f0e..073216495 100644 --- a/nova/tests/fake_flags.py +++ b/nova/tests/fake_flags.py @@ -42,3 +42,4 @@ FLAGS['iscsi_num_targets'].SetDefault(8) FLAGS['verbose'].SetDefault(True) FLAGS['sqlite_db'].SetDefault("tests.sqlite") FLAGS['use_ipv6'].SetDefault(True) +FLAGS['flat_network_bridge'].SetDefault('br100') diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index 24d45d1a7..eef582fac 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -126,7 +126,7 @@ class LibvirtOpenVswitchDriver(VIFDriver): dev = "tap-%s" % vif_id try: utils.execute('sudo', 'ovs-vsctl', 'del-port', - FLAGS.flat_network_bridge, dev) + network['bridge'], dev) utils.execute('sudo', 'ip', 'link', 'delete', dev) except: LOG.warning(_("Failed while unplugging vif of instance '%s'"), -- cgit From 2b0134bdfa73e7eb616414b3f8cd1b5ed99b8283 Mon Sep 17 00:00:00 2001 From: Trey Morris Date: Wed, 27 Jul 2011 13:49:36 -0500 Subject: added ipv6 requirements to nova-manage network create. changed --network to --fixed_range_v4 --- nova/exception.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova') diff --git a/nova/exception.py b/nova/exception.py index 637cad7ee..ca2ba3c96 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -373,7 +373,7 @@ class StorageRepositoryNotFound(NotFound): class NetworkNotCreated(NovaException): - message = _("A %(req)s is required to create a network.") + message = _("%(req)s is required to create a network.") class NetworkNotFound(NotFound): -- cgit From 047c0e993e1dd63a2a6ad75ee40b892c0cd1aa25 Mon Sep 17 00:00:00 2001 From: Trey Morris Date: Wed, 27 Jul 2011 14:07:31 -0500 Subject: updated handling of v6 in network manager create_networks to it can receive None for v6 args --- nova/network/manager.py | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'nova') diff --git a/nova/network/manager.py b/nova/network/manager.py index 77572b73d..dbcc76771 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -613,17 +613,31 @@ class NetworkManager(manager.SchedulerDependentManager): network_size, cidr_v6, gateway_v6, bridge, bridge_interface, dns1=None, dns2=None, **kwargs): """Create networks based on parameters.""" + net_v6 = {} + if FLAGS.use_ipv6: + project_net_v6 = netaddr.IPNetwork(cidr_v6) + significant_bits_v6 = 64 + network_size_v6 = 1 << 64 + start_v6 = index * network_size_v6 + cidr_v6 = '%s/%s' % (project_net_v6[start_v6], + significant_bits_v6) + net_v6['cidr_v6'] = cidr_v6 + + if gateway_v6: + # use a pre-defined gateway if one is provided + net_v6['gateway_v6'] = str(gateway_v6) + else: + net_v6['gateway_v6'] = str(project_net_v6[1]) + + net_v6['netmask_v6'] = str(project_net_v6._prefixlen) + fixed_net = netaddr.IPNetwork(cidr) - fixed_net_v6 = netaddr.IPNetwork(cidr_v6) - significant_bits_v6 = 64 - network_size_v6 = 1 << 64 for index in range(num_networks): start = index * network_size - start_v6 = index * network_size_v6 significant_bits = 32 - int(math.log(network_size, 2)) cidr = '%s/%s' % (fixed_net[start], significant_bits) project_net = netaddr.IPNetwork(cidr) - net = {} + net = dict(net_v6) net['bridge'] = bridge net['bridge_interface'] = bridge_interface net['dns1'] = dns1 @@ -639,21 +653,6 @@ class NetworkManager(manager.SchedulerDependentManager): else: net['label'] = label - if FLAGS.use_ipv6: - cidr_v6 = '%s/%s' % (fixed_net_v6[start_v6], - significant_bits_v6) - net['cidr_v6'] = cidr_v6 - - project_net_v6 = netaddr.IPNetwork(cidr_v6) - - if gateway_v6: - # use a pre-defined gateway if one is provided - net['gateway_v6'] = str(gateway_v6) - else: - net['gateway_v6'] = str(project_net_v6[1]) - - net['netmask_v6'] = str(project_net_v6._prefixlen) - if kwargs.get('vpn', False): # this bit here is for vlan-manager del net['dns1'] -- cgit From 92f82f620182eab0d5e6dffc8629ec0e25c52303 Mon Sep 17 00:00:00 2001 From: Trey Morris Date: Wed, 27 Jul 2011 14:35:39 -0500 Subject: oops! moved ipv6 block back into the for loop in network manager create_networks --- nova/network/manager.py | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) (limited to 'nova') diff --git a/nova/network/manager.py b/nova/network/manager.py index dbcc76771..34b26d728 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -613,31 +613,13 @@ class NetworkManager(manager.SchedulerDependentManager): network_size, cidr_v6, gateway_v6, bridge, bridge_interface, dns1=None, dns2=None, **kwargs): """Create networks based on parameters.""" - net_v6 = {} - if FLAGS.use_ipv6: - project_net_v6 = netaddr.IPNetwork(cidr_v6) - significant_bits_v6 = 64 - network_size_v6 = 1 << 64 - start_v6 = index * network_size_v6 - cidr_v6 = '%s/%s' % (project_net_v6[start_v6], - significant_bits_v6) - net_v6['cidr_v6'] = cidr_v6 - - if gateway_v6: - # use a pre-defined gateway if one is provided - net_v6['gateway_v6'] = str(gateway_v6) - else: - net_v6['gateway_v6'] = str(project_net_v6[1]) - - net_v6['netmask_v6'] = str(project_net_v6._prefixlen) - fixed_net = netaddr.IPNetwork(cidr) for index in range(num_networks): start = index * network_size significant_bits = 32 - int(math.log(network_size, 2)) cidr = '%s/%s' % (fixed_net[start], significant_bits) project_net = netaddr.IPNetwork(cidr) - net = dict(net_v6) + net = {} net['bridge'] = bridge net['bridge_interface'] = bridge_interface net['dns1'] = dns1 @@ -653,6 +635,23 @@ class NetworkManager(manager.SchedulerDependentManager): else: net['label'] = label + if FLAGS.use_ipv6: + project_net_v6 = netaddr.IPNetwork(cidr_v6) + significant_bits_v6 = 64 + network_size_v6 = 1 << 64 + start_v6 = index * network_size_v6 + cidr_v6 = '%s/%s' % (project_net_v6[start_v6], + significant_bits_v6) + net['cidr_v6'] = cidr_v6 + + if gateway_v6: + # use a pre-defined gateway if one is provided + net['gateway_v6'] = str(gateway_v6) + else: + net['gateway_v6'] = str(project_net_v6[1]) + + net['netmask_v6'] = str(project_net_v6._prefixlen) + if kwargs.get('vpn', False): # this bit here is for vlan-manager del net['dns1'] -- cgit From 7d02bd555d7519d485d00e02136d26a6e4e7096e Mon Sep 17 00:00:00 2001 From: Josh Kearney Date: Wed, 27 Jul 2011 15:22:51 -0500 Subject: Drop FK before dropping instance_id column. --- .../migrate_repo/versions/034_change_instance_id_in_migrations.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'nova') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py b/nova/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py index b002ba064..9a447c270 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py @@ -17,6 +17,7 @@ from sqlalchemy import Column, Integer, String, MetaData, Table + meta = MetaData() @@ -33,6 +34,11 @@ def upgrade(migrate_engine): meta.bind = migrate_engine migrations = Table('migrations', meta, autoload=True) migrations.create_column(instance_uuid) + + if migrate_engine.name == "mysql": + migrate_engine.execute("ALTER TABLE migrations DROP FOREIGN KEY " \ + "`migrations_ibfk_1`;") + migrations.c.instance_id.drop() -- cgit From 0b4e10a48e2aaa816ce4ca4565068d1655ad53ef Mon Sep 17 00:00:00 2001 From: Josh Kearney Date: Wed, 27 Jul 2011 16:34:55 -0500 Subject: Fail silently. --- .../migrate_repo/versions/034_change_instance_id_in_migrations.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'nova') diff --git a/nova/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py b/nova/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py index 9a447c270..4e8eaf0fd 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py @@ -36,8 +36,11 @@ def upgrade(migrate_engine): migrations.create_column(instance_uuid) if migrate_engine.name == "mysql": - migrate_engine.execute("ALTER TABLE migrations DROP FOREIGN KEY " \ - "`migrations_ibfk_1`;") + try: + migrate_engine.execute("ALTER TABLE migrations DROP FOREIGN KEY " \ + "`migrations_ibfk_1`;") + except Exception: # Don't care, just fail silently. + pass migrations.c.instance_id.drop() -- cgit From 45ff96e29669c5650873b0a7ddcf52160eddd27c Mon Sep 17 00:00:00 2001 From: Trey Morris Date: Wed, 27 Jul 2011 17:58:13 -0500 Subject: fixed create_networks ipv6 management --- nova/network/manager.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'nova') diff --git a/nova/network/manager.py b/nova/network/manager.py index 34b26d728..37f8ea25d 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -614,6 +614,11 @@ class NetworkManager(manager.SchedulerDependentManager): bridge_interface, dns1=None, dns2=None, **kwargs): """Create networks based on parameters.""" fixed_net = netaddr.IPNetwork(cidr) + if FLAGS.use_ipv6: + fixed_net_v6 = netaddr.IPNetwork(cidr_v6) + significant_bits_v6 = 64 + network_size_v6 = 1 << 64 + for index in range(num_networks): start = index * network_size significant_bits = 32 - int(math.log(network_size, 2)) @@ -636,14 +641,12 @@ class NetworkManager(manager.SchedulerDependentManager): net['label'] = label if FLAGS.use_ipv6: - project_net_v6 = netaddr.IPNetwork(cidr_v6) - significant_bits_v6 = 64 - network_size_v6 = 1 << 64 - start_v6 = index * network_size_v6 - cidr_v6 = '%s/%s' % (project_net_v6[start_v6], + cidr_v6 = '%s/%s' % (fixed_net_v6[start_v6], significant_bits_v6) net['cidr_v6'] = cidr_v6 + project_net_v6 = netaddr.IPNetwork(cidr_v6) + if gateway_v6: # use a pre-defined gateway if one is provided net['gateway_v6'] = str(gateway_v6) -- cgit From 7f5437a435cb7d98c65749488b9a45bfb8bd6fec Mon Sep 17 00:00:00 2001 From: Trey Morris Date: Wed, 27 Jul 2011 18:00:45 -0500 Subject: forgot a line --- nova/network/manager.py | 1 + 1 file changed, 1 insertion(+) (limited to 'nova') diff --git a/nova/network/manager.py b/nova/network/manager.py index 37f8ea25d..4a3791d8a 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -641,6 +641,7 @@ class NetworkManager(manager.SchedulerDependentManager): net['label'] = label if FLAGS.use_ipv6: + start_v6 = index * network_size_v6 cidr_v6 = '%s/%s' % (fixed_net_v6[start_v6], significant_bits_v6) net['cidr_v6'] = cidr_v6 -- cgit