diff options
| author | Lvov Maxim <usrleon@gmail.com> | 2011-07-25 17:35:26 +0400 |
|---|---|---|
| committer | Lvov Maxim <usrleon@gmail.com> | 2011-07-25 17:35:26 +0400 |
| commit | 48b0d1aa5bf6f5634b288c41bc872465a890ef30 (patch) | |
| tree | 22e756347c5469f8150cbf0a630d5204ec3b0f95 | |
| parent | 9088c9b51a0884b3ce1689dcebc28e985000d267 (diff) | |
| parent | 1a18ea6d738b513e03e3f0eddfb9f01dff9addca (diff) | |
merge with trunk, resolve conflicts
| -rwxr-xr-x | bin/nova-manage | 21 | ||||
| -rw-r--r-- | nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py | 38 | ||||
| -rw-r--r-- | nova/db/sqlalchemy/models.py | 3 | ||||
| -rw-r--r-- | nova/network/manager.py | 21 | ||||
| -rw-r--r-- | nova/tests/__init__.py | 3 | ||||
| -rw-r--r-- | nova/tests/api/openstack/test_versions.py | 4 | ||||
| -rw-r--r-- | nova/tests/test_network.py | 6 | ||||
| -rw-r--r-- | nova/virt/libvirt/netutils.py | 7 |
8 files changed, 82 insertions, 21 deletions
diff --git a/bin/nova-manage b/bin/nova-manage index e77e3a244..8165665cc 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -617,7 +617,8 @@ class NetworkCommands(object): def create(self, label=None, fixed_range=None, num_networks=None, network_size=None, multi_host=None, vlan_start=None, vpn_start=None, fixed_range_v6=None, gateway_v6=None, - flat_network_bridge=None, bridge_interface=None): + flat_network_bridge=None, bridge_interface=None, + dns1=None, dns2=None): """Creates fixed ips for host by range""" if not label: msg = _('a label (ex: public) is required to create networks.') @@ -648,6 +649,8 @@ class NetworkCommands(object): bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface if not gateway_v6: gateway_v6 = FLAGS.gateway_v6 + if not dns1 and FLAGS.flat_network_dns: + dns1 = FLAGS.flat_network_dns net_manager = utils.import_object(FLAGS.network_manager) try: @@ -662,24 +665,30 @@ class NetworkCommands(object): cidr_v6=fixed_range_v6, gateway_v6=gateway_v6, bridge=flat_network_bridge, - bridge_interface=bridge_interface) + bridge_interface=bridge_interface, + dns1=dns1, + dns2=dns2) except ValueError, e: print e raise e def list(self): """List all created networks""" - print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % (_('network'), + print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % ( + _('network'), _('netmask'), _('start address'), - _('DNS'), + _('DNS1'), + _('DNS2'), _('VlanID'), 'project') for network in db.network_get_all(context.get_admin_context()): - print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % (network.cidr, + print "%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" % ( + network.cidr, network.netmask, network.dhcp_start, - network.dns, + network.dns1, + network.dns2, network.vlan, network.project_id) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py b/nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py new file mode 100644 index 000000000..c938eb716 --- /dev/null +++ b/nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py @@ -0,0 +1,38 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright (c) 2011 OpenStack, LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from sqlalchemy import Column, Table, MetaData, Boolean, String + +meta = MetaData() + +dns2 = Column('dns2', String(255)) + + +def upgrade(migrate_engine): + meta.bind = migrate_engine + + networks = Table('networks', meta, autoload=True) + networks.c.dns.alter(Column('dns1', String(255))) + networks.create_column(dns2) + + +def downgrade(migrate_engine): + meta.bind = migrate_engine + + networks = Table('networks', meta, autoload=True) + networks.c.dns1.alter(Column('dns', String(255))) + networks.drop_column(dns2) diff --git a/nova/db/sqlalchemy/models.py b/nova/db/sqlalchemy/models.py index c1150f7ca..7e35c2cba 100644 --- a/nova/db/sqlalchemy/models.py +++ b/nova/db/sqlalchemy/models.py @@ -556,7 +556,8 @@ class Network(BASE, NovaBase): bridge_interface = Column(String(255)) gateway = Column(String(255)) broadcast = Column(String(255)) - dns = Column(String(255)) + dns1 = Column(String(255)) + dns2 = Column(String(255)) vlan = Column(Integer) vpn_public_address = Column(String(255)) diff --git a/nova/network/manager.py b/nova/network/manager.py index 75c3f668d..4f984296c 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -370,8 +370,7 @@ class NetworkManager(manager.SchedulerDependentManager): try: networks = self.db.network_get_all(context) except exception.NoNetworksFound: - # we don't care if no networks are found - pass + return [] # return only networks which are not vlan networks return [network for network in networks if @@ -473,13 +472,18 @@ class NetworkManager(manager.SchedulerDependentManager): 'broadcast': network['broadcast'], 'mac': vif['address'], 'rxtx_cap': flavor['rxtx_cap'], - 'dns': [network['dns']], + 'dns': [], 'ips': [ip_dict(ip) for ip in network_IPs]} if network['cidr_v6']: info['ip6s'] = [ip6_dict()] # TODO(tr3buchet): handle ip6 routes here as well if network['gateway_v6']: info['gateway6'] = network['gateway_v6'] + if network['dns1']: + info['dns'].append(network['dns1']) + if network['dns2']: + info['dns'].append(network['dns2']) + network_info.append((network_dict, info)) return network_info @@ -590,7 +594,7 @@ class NetworkManager(manager.SchedulerDependentManager): def create_networks(self, context, label, cidr, multi_host, num_networks, network_size, cidr_v6, gateway_v6, bridge, - bridge_interface, **kwargs): + bridge_interface, dns1=None, dns2=None, **kwargs): """Create networks based on parameters.""" fixed_net = netaddr.IPNetwork(cidr) fixed_net_v6 = netaddr.IPNetwork(cidr_v6) @@ -605,7 +609,8 @@ class NetworkManager(manager.SchedulerDependentManager): net = {} net['bridge'] = bridge net['bridge_interface'] = bridge_interface - net['dns'] = FLAGS.flat_network_dns + net['dns1'] = dns1 + net['dns2'] = dns2 net['cidr'] = cidr net['multi_host'] = multi_host net['netmask'] = str(project_net.netmask) @@ -634,7 +639,8 @@ class NetworkManager(manager.SchedulerDependentManager): if kwargs.get('vpn', False): # this bit here is for vlan-manager - del net['dns'] + del net['dns1'] + del net['dns2'] vlan = kwargs['vlan_start'] + index net['vpn_private_address'] = str(project_net[2]) net['dhcp_start'] = str(project_net[3]) @@ -754,7 +760,6 @@ class FlatManager(NetworkManager): """Setup Network on this host.""" net = {} net['injected'] = FLAGS.flat_injected - net['dns'] = FLAGS.flat_network_dns self.db.network_update(context, network_ref['id'], net) @@ -893,7 +898,6 @@ class VlanManager(RPCAllocateFixedIP, FloatingIP, NetworkManager): def _setup_network(self, context, network_ref): """Sets up network on this host.""" - network_ref['dhcp_server'] = self._get_dhcp_ip(context, network_ref) if not network_ref['vpn_public_address']: net = {} address = FLAGS.vpn_ip @@ -901,6 +905,7 @@ class VlanManager(RPCAllocateFixedIP, FloatingIP, NetworkManager): network_ref = db.network_update(context, network_ref['id'], net) else: address = network_ref['vpn_public_address'] + network_ref['dhcp_server'] = self._get_dhcp_ip(context, network_ref) self.driver.ensure_vlan_bridge(network_ref['vlan'], network_ref['bridge'], network_ref['bridge_interface'], diff --git a/nova/tests/__init__.py b/nova/tests/__init__.py index 7df6c06eb..720d5b0e6 100644 --- a/nova/tests/__init__.py +++ b/nova/tests/__init__.py @@ -67,7 +67,8 @@ def setup(): bridge=FLAGS.flat_network_bridge, bridge_interface=bridge_interface, vpn_start=FLAGS.vpn_start, - vlan_start=FLAGS.vlan_start) + vlan_start=FLAGS.vlan_start, + dns1=FLAGS.flat_network_dns) for net in db.network_get_all(ctxt): network.set_network_host(ctxt, net) diff --git a/nova/tests/api/openstack/test_versions.py b/nova/tests/api/openstack/test_versions.py index 0eae18a62..da964ee1f 100644 --- a/nova/tests/api/openstack/test_versions.py +++ b/nova/tests/api/openstack/test_versions.py @@ -174,7 +174,7 @@ class VersionsTest(test.TestCase): { "rel": "self", "href": "http://test/2.7.1", - } + }, ], }, ] @@ -204,7 +204,7 @@ class VersionsTest(test.TestCase): { "rel": "self", "href": "http://test/2.9.8", - } + }, ], }, ] diff --git a/nova/tests/test_network.py b/nova/tests/test_network.py index d30c5e9e5..fbe7d769e 100644 --- a/nova/tests/test_network.py +++ b/nova/tests/test_network.py @@ -55,7 +55,8 @@ networks = [{'id': 0, 'bridge_interface': 'fake_fa0', 'gateway': '192.168.0.1', 'broadcast': '192.168.0.255', - 'dns': '192.168.0.1', + 'dns1': '192.168.0.1', + 'dns2': '192.168.0.2', 'vlan': None, 'host': None, 'project_id': 'fake_project', @@ -73,7 +74,8 @@ networks = [{'id': 0, 'bridge_interface': 'fake_fa1', 'gateway': '192.168.1.1', 'broadcast': '192.168.1.255', - 'dns': '192.168.0.1', + 'dns1': '192.168.0.1', + 'dns2': '192.168.0.2', 'vlan': None, 'host': None, 'project_id': 'fake_project', diff --git a/nova/virt/libvirt/netutils.py b/nova/virt/libvirt/netutils.py index 8d36c0a05..041eacb2d 100644 --- a/nova/virt/libvirt/netutils.py +++ b/nova/virt/libvirt/netutils.py @@ -91,9 +91,14 @@ def get_network_info(instance): 'broadcast': network['broadcast'], 'mac': vif['address'], 'rxtx_cap': flavor['rxtx_cap'], - 'dns': [network['dns']], + 'dns': [], 'ips': [ip_dict(ip) for ip in network_ips]} + if network['dns1']: + mapping['dns'].append(network['dns1']) + if network['dns2']: + mapping['dns'].append(network['dns2']) + if FLAGS.use_ipv6: mapping['ip6s'] = [ip6_dict()] mapping['gateway6'] = network['gateway_v6'] |
