Merge lp:~tr3buchet/nova/lp810563-ms into lp:~hudson-openstack/nova/milestone-proposed

Proposed by Trey Morris
Status: Merged
Approved by: Vish Ishaya
Approved revision: 1141
Merged at revision: 1143
Proposed branch: lp:~tr3buchet/nova/lp810563-ms
Merge into: lp:~hudson-openstack/nova/milestone-proposed
Diff against target: 241 lines (+87/-56)
5 files modified
bin/nova-manage (+71/-47)
nova/exception.py (+4/-0)
nova/network/manager.py (+10/-8)
nova/tests/fake_flags.py (+1/-0)
nova/virt/libvirt/vif.py (+1/-1)
To merge this branch: bzr merge lp:~tr3buchet/nova/lp810563-ms
Reviewer Review Type Date Requested Status
OpenStack release team Pending
Review via email: mp+69570@code.launchpad.net

Description of the change

updates handling of arguments in nova-manage network create.
updates a few of the arguments to nova-manage and related help.
updates nova-manage to raise proper exceptions.

updates network manager create_networks to handle ipv6 more correctly and efficiently.

flat_network_bridge FLAG now defaults to None.

bug810563
changes mirrored in a merge prop to trunk

To post a comment you must log in.
lp:~tr3buchet/nova/lp810563-ms updated
1141. By Trey Morris

fixed the ipv6 thingy

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/nova-manage'
2--- bin/nova-manage 2011-07-26 05:37:48 +0000
3+++ bin/nova-manage 2011-07-27 23:21:28 +0000
4@@ -631,40 +631,75 @@
5 """Class for managing networks."""
6
7 @args('--label', dest="label", metavar='<label>',
8- help='Label(ex: public)')
9- @args('--network', dest="fixed_range", metavar='<x.x.x.x/yy>',
10- help='Network')
11+ help='Label for network (ex: public)')
12+ @args('--fixed_range_v4', dest="fixed_range_v4", metavar='<x.x.x.x/yy>',
13+ help='IPv4 subnet (ex: 10.0.0.0/8)')
14 @args('--num_networks', dest="num_networks", metavar='<number>',
15- help='How many networks create')
16+ help='Number of networks to create')
17 @args('--network_size', dest="network_size", metavar='<number>',
18- help='How many hosts in network')
19+ help='Number of IPs per network')
20 @args('--vlan', dest="vlan_start", metavar='<vlan id>', help='vlan id')
21 @args('--vpn', dest="vpn_start", help='vpn start')
22- @args('--fixed_range_v6', dest="fixed_range_v6", help='fixed ipv6 range')
23+ @args('--fixed_range_v6', dest="fixed_range_v6",
24+ help='IPv6 subnet (ex: fe80::/64')
25 @args('--gateway_v6', dest="gateway_v6", help='ipv6 gateway')
26- @args('--flat_network_bridge', dest="flat_network_bridge",
27- metavar='<flat network bridge>', help='Flat_network_bridge')
28+ @args('--bridge', dest="bridge",
29+ metavar='<bridge>',
30+ help='VIFs on this network are connected to this bridge')
31 @args('--bridge_interface', dest="bridge_interface",
32- metavar='<bridge interface>', help='Bridge_interface')
33+ metavar='<bridge interface>',
34+ help='the bridge is connected to this interface')
35 @args('--multi_host', dest="multi_host", metavar="<'T'|'F'>",
36 help='Multi host')
37 @args('--dns1', dest="dns1", metavar="<DNS Address>", help='First DNS')
38 @args('--dns2', dest="dns2", metavar="<DNS Address>", help='Second DNS')
39- def create(self, label=None, fixed_range=None, num_networks=None,
40+ def create(self, label=None, fixed_range_v4=None, num_networks=None,
41 network_size=None, multi_host=None, vlan_start=None,
42 vpn_start=None, fixed_range_v6=None, gateway_v6=None,
43- flat_network_bridge=None, bridge_interface=None,
44- dns1=None, dns2=None):
45+ bridge=None, bridge_interface=None, dns1=None, dns2=None):
46 """Creates fixed ips for host by range"""
47+
48+ # check for certain required inputs
49 if not label:
50- msg = _('a label (ex: public) is required to create networks.')
51- print msg
52- raise TypeError(msg)
53- if not fixed_range:
54- msg = _('Fixed range in the form of 10.0.0.0/8 is '
55- 'required to create networks.')
56- print msg
57- raise TypeError(msg)
58+ raise exception.NetworkNotCreated(req='--label')
59+ if not fixed_range_v4:
60+ raise exception.NetworkNotCreated(req='--fixed_range_v4')
61+
62+ bridge = bridge or FLAGS.flat_network_bridge
63+ if not bridge:
64+ bridge_required = ['nova.network.manager.FlatManager',
65+ 'nova.network.manager.FlatDHCPManager']
66+ if FLAGS.network_manager in bridge_required:
67+ # TODO(tr3buchet) - swap print statement and following line for
68+ # raise statement in diablo 4
69+ print _('--bridge parameter required or FLAG '
70+ 'flat_network_bridge must be set to create networks\n'
71+ 'WARNING! ACHTUNG! Setting the bridge to br100 '
72+ 'automatically is deprecated and will be removed in '
73+ 'Diablo milestone 4. Prepare yourself accordingly.')
74+ time.sleep(10)
75+ bridge = 'br100'
76+ #raise exception.NetworkNotCreated(req='--bridge')
77+
78+ bridge_interface = bridge_interface or FLAGS.flat_interface or \
79+ FLAGS.vlan_interface
80+ if not bridge_interface:
81+ interface_required = ['nova.network.manager.FlatDHCPManager',
82+ 'nova.network.manager.VlanManager']
83+ if FLAGS.network_manager in interface_required:
84+ raise exception.NetworkNotCreated(req='--bridge_interface')
85+
86+ if FLAGS.use_ipv6:
87+ fixed_range_v6 = fixed_range_v6 or FLAGS.fixed_range_v6
88+ if not fixed_range_v6:
89+ raise exception.NetworkNotCreated(req='with use_ipv6, '
90+ '--fixed_range_v6')
91+ gateway_v6 = gateway_v6 or FLAGS.gateway_v6
92+ if not gateway_v6:
93+ raise exception.NetworkNotCreated(req='with use_ipv6, '
94+ '--gateway_v6')
95+
96+ # sanitize other input using FLAGS if necessary
97 if not num_networks:
98 num_networks = FLAGS.num_networks
99 if not network_size:
100@@ -677,36 +712,25 @@
101 vlan_start = FLAGS.vlan_start
102 if not vpn_start:
103 vpn_start = FLAGS.vpn_start
104- if not fixed_range_v6:
105- fixed_range_v6 = FLAGS.fixed_range_v6
106- if not flat_network_bridge:
107- flat_network_bridge = FLAGS.flat_network_bridge
108- if not bridge_interface:
109- bridge_interface = FLAGS.flat_interface or FLAGS.vlan_interface
110- if not gateway_v6:
111- gateway_v6 = FLAGS.gateway_v6
112 if not dns1 and FLAGS.flat_network_dns:
113 dns1 = FLAGS.flat_network_dns
114+
115+ # create the network
116 net_manager = utils.import_object(FLAGS.network_manager)
117-
118- try:
119- net_manager.create_networks(context.get_admin_context(),
120- label=label,
121- cidr=fixed_range,
122- multi_host=multi_host,
123- num_networks=int(num_networks),
124- network_size=int(network_size),
125- vlan_start=int(vlan_start),
126- vpn_start=int(vpn_start),
127- cidr_v6=fixed_range_v6,
128- gateway_v6=gateway_v6,
129- bridge=flat_network_bridge,
130- bridge_interface=bridge_interface,
131- dns1=dns1,
132- dns2=dns2)
133- except ValueError, e:
134- print e
135- raise e
136+ net_manager.create_networks(context.get_admin_context(),
137+ label=label,
138+ cidr=fixed_range_v4,
139+ multi_host=multi_host,
140+ num_networks=int(num_networks),
141+ network_size=int(network_size),
142+ vlan_start=int(vlan_start),
143+ vpn_start=int(vpn_start),
144+ cidr_v6=fixed_range_v6,
145+ gateway_v6=gateway_v6,
146+ bridge=bridge,
147+ bridge_interface=bridge_interface,
148+ dns1=dns1,
149+ dns2=dns2)
150
151 def list(self):
152 """List all created networks"""
153
154=== modified file 'nova/exception.py'
155--- nova/exception.py 2011-07-27 16:19:45 +0000
156+++ nova/exception.py 2011-07-27 23:21:28 +0000
157@@ -373,6 +373,10 @@
158 message = _("Cannot find SR to read/write VDI.")
159
160
161+class NetworkNotCreated(NovaException):
162+ message = _("%(req)s is required to create a network.")
163+
164+
165 class NetworkNotFound(NotFound):
166 message = _("Network %(network_id)s could not be found.")
167
168
169=== modified file 'nova/network/manager.py'
170--- nova/network/manager.py 2011-07-26 08:28:19 +0000
171+++ nova/network/manager.py 2011-07-27 23:21:28 +0000
172@@ -68,7 +68,7 @@
173
174
175 FLAGS = flags.FLAGS
176-flags.DEFINE_string('flat_network_bridge', 'br100',
177+flags.DEFINE_string('flat_network_bridge', None,
178 'Bridge for simple network instances')
179 flags.DEFINE_string('flat_network_dns', '8.8.4.4',
180 'Dns for simple network')
181@@ -614,12 +614,13 @@
182 bridge_interface, dns1=None, dns2=None, **kwargs):
183 """Create networks based on parameters."""
184 fixed_net = netaddr.IPNetwork(cidr)
185- fixed_net_v6 = netaddr.IPNetwork(cidr_v6)
186- significant_bits_v6 = 64
187- network_size_v6 = 1 << 64
188+ if FLAGS.use_ipv6:
189+ fixed_net_v6 = netaddr.IPNetwork(cidr_v6)
190+ significant_bits_v6 = 64
191+ network_size_v6 = 1 << 64
192+
193 for index in range(num_networks):
194 start = index * network_size
195- start_v6 = index * network_size_v6
196 significant_bits = 32 - int(math.log(network_size, 2))
197 cidr = '%s/%s' % (fixed_net[start], significant_bits)
198 project_net = netaddr.IPNetwork(cidr)
199@@ -640,6 +641,7 @@
200 net['label'] = label
201
202 if FLAGS.use_ipv6:
203+ start_v6 = index * network_size_v6
204 cidr_v6 = '%s/%s' % (fixed_net_v6[start_v6],
205 significant_bits_v6)
206 net['cidr_v6'] = cidr_v6
207@@ -720,9 +722,9 @@
208 """Basic network where no vlans are used.
209
210 FlatManager does not do any bridge or vlan creation. The user is
211- responsible for setting up whatever bridge is specified in
212- flat_network_bridge (br100 by default). This bridge needs to be created
213- on all compute hosts.
214+ responsible for setting up whatever bridges are specified when creating
215+ networks through nova-manage. This bridge needs to be created on all
216+ compute hosts.
217
218 The idea is to create a single network for the host with a command like:
219 nova-manage network create 192.168.0.0/24 1 256. Creating multiple
220
221=== modified file 'nova/tests/fake_flags.py'
222--- nova/tests/fake_flags.py 2011-06-24 12:01:51 +0000
223+++ nova/tests/fake_flags.py 2011-07-27 23:21:28 +0000
224@@ -42,3 +42,4 @@
225 FLAGS['verbose'].SetDefault(True)
226 FLAGS['sqlite_db'].SetDefault("tests.sqlite")
227 FLAGS['use_ipv6'].SetDefault(True)
228+FLAGS['flat_network_bridge'].SetDefault('br100')
229
230=== modified file 'nova/virt/libvirt/vif.py'
231--- nova/virt/libvirt/vif.py 2011-07-25 16:52:12 +0000
232+++ nova/virt/libvirt/vif.py 2011-07-27 23:21:28 +0000
233@@ -126,7 +126,7 @@
234 dev = "tap-%s" % vif_id
235 try:
236 utils.execute('sudo', 'ovs-vsctl', 'del-port',
237- FLAGS.flat_network_bridge, dev)
238+ network['bridge'], dev)
239 utils.execute('sudo', 'ip', 'link', 'delete', dev)
240 except:
241 LOG.warning(_("Failed while unplugging vif of instance '%s'"),

Subscribers

People subscribed via source and target branches