From 848de98876aecd084bb568907c3b121a7f5e38f0 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 12:45:53 -0500 Subject: allow 2 dns servers to be specified on network create --- bin/nova-manage | 15 ++++++++++++--- nova/db/sqlalchemy/models.py | 1 + nova/network/manager.py | 10 +++++++--- nova/tests/__init__.py | 3 ++- nova/tests/test_network.py | 2 ++ 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/bin/nova-manage b/bin/nova-manage index b6029bb52..11d254597 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -566,12 +566,14 @@ 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, + dns=None, dns2=None): """Creates fixed ips for host by range arguments: label, fixed_range, [num_networks=FLAG], [network_size=FLAG], [multi_host=FLAG], [vlan_start=FLAG], [vpn_start=FLAG], [fixed_range_v6=FLAG], [gateway_v6=FLAG], [flat_network_bridge=FLAG], [bridge_interface=FLAG] + [dns=FLAG], [dns2] If you wish to use a later argument fill in the gaps with ""s Ex: network create private 10.0.0.0/8 1 16 T "" "" "" "" xenbr1 eth1 network create private 10.0.0.0/8 1 16 @@ -605,6 +607,8 @@ class NetworkCommands(object): bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface if not gateway_v6: gateway_v6 = FLAGS.gateway_v6 + if not dns: + dns = FLAGS.flat_network_dns net_manager = utils.import_object(FLAGS.network_manager) try: @@ -619,17 +623,21 @@ class NetworkCommands(object): cidr_v6=fixed_range_v6, gateway_v6=gateway_v6, bridge=flat_network_bridge, - bridge_interface=bridge_interface) + bridge_interface=bridge_interface, + dns=dns, + 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'), + _('DNS2'), _('VlanID'), 'project') for network in db.network_get_all(context.get_admin_context()): @@ -637,6 +645,7 @@ class NetworkCommands(object): network.netmask, network.dhcp_start, network.dns, + network.dns2, network.vlan, network.project_id) diff --git a/nova/db/sqlalchemy/models.py b/nova/db/sqlalchemy/models.py index 45e0f89c9..2393cf40a 100644 --- a/nova/db/sqlalchemy/models.py +++ b/nova/db/sqlalchemy/models.py @@ -556,6 +556,7 @@ class Network(BASE, NovaBase): gateway = Column(String(255)) broadcast = Column(String(255)) dns = 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 34001657b..a5cf644ab 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -481,6 +481,9 @@ class NetworkManager(manager.SchedulerDependentManager): # TODO(tr3buchet): handle ip6 routes here as well if network['gateway_v6']: info['gateway6'] = network['gateway_v6'] + if network['dns2']: + info['dns'].append(network['dns2']) + network_info.append((network_dict, info)) return network_info @@ -591,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, dns, dns2=None, **kwargs): """Create networks based on parameters.""" fixed_net = netaddr.IPNetwork(cidr) fixed_net_v6 = netaddr.IPNetwork(cidr_v6) @@ -606,7 +609,8 @@ class NetworkManager(manager.SchedulerDependentManager): net = {} net['bridge'] = bridge net['bridge_interface'] = bridge_interface - net['dns'] = FLAGS.flat_network_dns + net['dns'] = dns + net['dns2'] = dns2 net['cidr'] = cidr net['multi_host'] = multi_host net['netmask'] = str(project_net.netmask) @@ -636,6 +640,7 @@ class NetworkManager(manager.SchedulerDependentManager): if kwargs.get('vpn', False): # this bit here is for vlan-manager del net['dns'] + del net['dns2'] vlan = kwargs['vlan_start'] + index net['vpn_private_address'] = str(project_net[2]) net['dhcp_start'] = str(project_net[3]) @@ -755,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) diff --git a/nova/tests/__init__.py b/nova/tests/__init__.py index 7df6c06eb..49c1ccc56 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, + dns=FLAGS.flat_network_dns) for net in db.network_get_all(ctxt): network.set_network_host(ctxt, net) diff --git a/nova/tests/test_network.py b/nova/tests/test_network.py index 7cc174842..9fefc6959 100644 --- a/nova/tests/test_network.py +++ b/nova/tests/test_network.py @@ -56,6 +56,7 @@ networks = [{'id': 0, 'gateway': '192.168.0.1', 'broadcast': '192.168.0.255', 'dns': '192.168.0.1', + 'dns2': '192.168.0.2', 'vlan': None, 'host': None, 'project_id': 'fake_project', @@ -74,6 +75,7 @@ networks = [{'id': 0, 'gateway': '192.168.1.1', 'broadcast': '192.168.1.255', 'dns': '192.168.0.1', + 'dns2': '192.168.0.2', 'vlan': None, 'host': None, 'project_id': 'fake_project', -- cgit From d04b90ef23bd2e02e762ed22bce8729a2c619cf6 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 12:46:18 -0500 Subject: allow 2 dns servers to be specified on network create --- .../migrate_repo/versions/034_secondary_dns.py | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 nova/db/sqlalchemy/migrate_repo/versions/034_secondary_dns.py diff --git a/nova/db/sqlalchemy/migrate_repo/versions/034_secondary_dns.py b/nova/db/sqlalchemy/migrate_repo/versions/034_secondary_dns.py new file mode 100644 index 000000000..d9f82d796 --- /dev/null +++ b/nova/db/sqlalchemy/migrate_repo/versions/034_secondary_dns.py @@ -0,0 +1,36 @@ +# 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.create_column(dns2) + + +def downgrade(migrate_engine): + meta.bind = migrate_engine + + networks = Table('networks', meta, autoload=True) + networks.drop_column(dns2) -- cgit From 419b928ea2eb71fdcda66b4c83717120309ff36a Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 15:26:48 -0500 Subject: only use the flag if it evaluates true --- bin/nova-manage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/nova-manage b/bin/nova-manage index 11d254597..c5ea30fcd 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -607,7 +607,7 @@ class NetworkCommands(object): bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface if not gateway_v6: gateway_v6 = FLAGS.gateway_v6 - if not dns: + if not dns and FLAGS.flat_network_dns: dns = FLAGS.flat_network_dns net_manager = utils.import_object(FLAGS.network_manager) -- cgit From b346a456e9189f95780bf9c9d061969319a6b427 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 16:03:28 -0500 Subject: only include dns entries if they are not None in the database --- nova/network/manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nova/network/manager.py b/nova/network/manager.py index a5cf644ab..7b36c61a3 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -474,13 +474,15 @@ 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['dns']: + info['dns'].append(network['dns']) if network['dns2']: info['dns'].append(network['dns2']) -- cgit From 99d13a49fe32d22e0ed1642fcd790d45a8c201a3 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 16:09:43 -0500 Subject: rename in preperation for trunk merge --- .../migrate_repo/versions/034_secondary_dns.py | 36 ---------------------- .../migrate_repo/versions/035_secondary_dns.py | 36 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 36 deletions(-) delete mode 100644 nova/db/sqlalchemy/migrate_repo/versions/034_secondary_dns.py create mode 100644 nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py diff --git a/nova/db/sqlalchemy/migrate_repo/versions/034_secondary_dns.py b/nova/db/sqlalchemy/migrate_repo/versions/034_secondary_dns.py deleted file mode 100644 index d9f82d796..000000000 --- a/nova/db/sqlalchemy/migrate_repo/versions/034_secondary_dns.py +++ /dev/null @@ -1,36 +0,0 @@ -# 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.create_column(dns2) - - -def downgrade(migrate_engine): - meta.bind = migrate_engine - - networks = Table('networks', meta, autoload=True) - networks.drop_column(dns2) 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..d9f82d796 --- /dev/null +++ b/nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py @@ -0,0 +1,36 @@ +# 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.create_column(dns2) + + +def downgrade(migrate_engine): + meta.bind = migrate_engine + + networks = Table('networks', meta, autoload=True) + networks.drop_column(dns2) -- cgit From 2b03601d6659376ebfcdcade1937ec85e262c3b8 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 16:15:18 -0500 Subject: add in the right number of fields --- bin/nova-manage | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/nova-manage b/bin/nova-manage index c5ea30fcd..ece63e54d 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -641,7 +641,8 @@ class NetworkCommands(object): _('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, -- cgit From f087db34b840a74f9ba093128808230fd97ea9ec Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Thu, 21 Jul 2011 16:20:32 -0500 Subject: pep8 --- nova/tests/api/openstack/test_versions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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", - } + }, ], }, ] -- cgit From e54f0cb05a3e10ad4234c672e2096da2a3eaa2da Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Fri, 22 Jul 2011 16:47:37 -0500 Subject: default to None in the method signature --- bin/nova-manage | 12 ++++++------ .../db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py | 2 ++ nova/db/sqlalchemy/models.py | 2 +- nova/network/manager.py | 10 +++++----- nova/tests/test_network.py | 4 ++-- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/bin/nova-manage b/bin/nova-manage index ece63e54d..e97596a54 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -567,7 +567,7 @@ class NetworkCommands(object): 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, - dns=None, dns2=None): + dns1=None, dns2=None): """Creates fixed ips for host by range arguments: label, fixed_range, [num_networks=FLAG], [network_size=FLAG], [multi_host=FLAG], [vlan_start=FLAG], @@ -607,8 +607,8 @@ class NetworkCommands(object): bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface if not gateway_v6: gateway_v6 = FLAGS.gateway_v6 - if not dns and FLAGS.flat_network_dns: - dns = FLAGS.flat_network_dns + if not dns1 and FLAGS.flat_network_dns: + dns1 = FLAGS.flat_network_dns net_manager = utils.import_object(FLAGS.network_manager) try: @@ -624,7 +624,7 @@ class NetworkCommands(object): gateway_v6=gateway_v6, bridge=flat_network_bridge, bridge_interface=bridge_interface, - dns=dns, + dns1=dns1, dns2=dns2) except ValueError, e: print e @@ -636,7 +636,7 @@ class NetworkCommands(object): _('network'), _('netmask'), _('start address'), - _('DNS'), + _('DNS1'), _('DNS2'), _('VlanID'), 'project') @@ -645,7 +645,7 @@ class NetworkCommands(object): 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 index d9f82d796..c938eb716 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py @@ -26,6 +26,7 @@ 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) @@ -33,4 +34,5 @@ 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 cf00177c4..7e35c2cba 100644 --- a/nova/db/sqlalchemy/models.py +++ b/nova/db/sqlalchemy/models.py @@ -556,7 +556,7 @@ 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) diff --git a/nova/network/manager.py b/nova/network/manager.py index a11d9a5ed..3b3f524c4 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -480,8 +480,8 @@ class NetworkManager(manager.SchedulerDependentManager): # TODO(tr3buchet): handle ip6 routes here as well if network['gateway_v6']: info['gateway6'] = network['gateway_v6'] - if network['dns']: - info['dns'].append(network['dns']) + if network['dns1']: + info['dns'].append(network['dns1']) if network['dns2']: info['dns'].append(network['dns2']) @@ -595,7 +595,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, dns, dns2=None, **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) @@ -610,7 +610,7 @@ class NetworkManager(manager.SchedulerDependentManager): net = {} net['bridge'] = bridge net['bridge_interface'] = bridge_interface - net['dns'] = dns + net['dns1'] = dns1 net['dns2'] = dns2 net['cidr'] = cidr net['multi_host'] = multi_host @@ -640,7 +640,7 @@ 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]) diff --git a/nova/tests/test_network.py b/nova/tests/test_network.py index c37e30c05..fbe7d769e 100644 --- a/nova/tests/test_network.py +++ b/nova/tests/test_network.py @@ -55,7 +55,7 @@ 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, @@ -74,7 +74,7 @@ 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, -- cgit From e92595896531d56ce38169468a740b98624cb714 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Fri, 22 Jul 2011 17:01:35 -0500 Subject: pass in the right argument --- nova/tests/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nova/tests/__init__.py b/nova/tests/__init__.py index 49c1ccc56..720d5b0e6 100644 --- a/nova/tests/__init__.py +++ b/nova/tests/__init__.py @@ -68,7 +68,7 @@ def setup(): bridge_interface=bridge_interface, vpn_start=FLAGS.vpn_start, vlan_start=FLAGS.vlan_start, - dns=FLAGS.flat_network_dns) + dns1=FLAGS.flat_network_dns) for net in db.network_get_all(ctxt): network.set_network_host(ctxt, net) -- cgit From 5593006970e56c7f53ce946cf234af7c8bd07690 Mon Sep 17 00:00:00 2001 From: Jason Koelker Date: Fri, 22 Jul 2011 17:02:31 -0500 Subject: docstring update --- bin/nova-manage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/nova-manage b/bin/nova-manage index e97596a54..7477c213d 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -573,7 +573,7 @@ class NetworkCommands(object): [network_size=FLAG], [multi_host=FLAG], [vlan_start=FLAG], [vpn_start=FLAG], [fixed_range_v6=FLAG], [gateway_v6=FLAG], [flat_network_bridge=FLAG], [bridge_interface=FLAG] - [dns=FLAG], [dns2] + [dns1=FLAG], [dns2] If you wish to use a later argument fill in the gaps with ""s Ex: network create private 10.0.0.0/8 1 16 T "" "" "" "" xenbr1 eth1 network create private 10.0.0.0/8 1 16 -- cgit