summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLvov Maxim <usrleon@gmail.com>2011-07-25 17:35:26 +0400
committerLvov Maxim <usrleon@gmail.com>2011-07-25 17:35:26 +0400
commit48b0d1aa5bf6f5634b288c41bc872465a890ef30 (patch)
tree22e756347c5469f8150cbf0a630d5204ec3b0f95
parent9088c9b51a0884b3ce1689dcebc28e985000d267 (diff)
parent1a18ea6d738b513e03e3f0eddfb9f01dff9addca (diff)
merge with trunk, resolve conflicts
-rwxr-xr-xbin/nova-manage21
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py38
-rw-r--r--nova/db/sqlalchemy/models.py3
-rw-r--r--nova/network/manager.py21
-rw-r--r--nova/tests/__init__.py3
-rw-r--r--nova/tests/api/openstack/test_versions.py4
-rw-r--r--nova/tests/test_network.py6
-rw-r--r--nova/virt/libvirt/netutils.py7
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']