~ubuntu-branches/ubuntu/raring/quantum/raring

« back to all changes in this revision

Viewing changes to quantum/plugins/cisco/models/virt_phy_sw_v2.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2012-09-21 13:01:18 UTC
  • mto: This revision was merged to the branch mainline in revision 24.
  • Revision ID: package-import@ubuntu.com-20120921130118-6x31znohp1psfc74
Tags: upstream-2012.2~rc2
ImportĀ upstreamĀ versionĀ 2012.2~rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
import inspect
22
22
import logging
23
23
 
 
24
from quantum.db import l3_db
24
25
from quantum.manager import QuantumManager
25
26
from quantum.openstack.common import importutils
26
27
from quantum.plugins.cisco.common import cisco_constants as const
163
164
            else:
164
165
                return func(*args)
165
166
 
 
167
    def _get_segmentation_id(self, network_id):
 
168
        binding_seg_id = odb.get_network_binding(None, network_id)
 
169
        return binding_seg_id.segmentation_id
 
170
 
 
171
    def _get_all_segmentation_ids(self):
 
172
        vlan_ids = cdb.get_ovs_vlans()
 
173
        vlanids = ''
 
174
        for v_id in vlan_ids:
 
175
            if int(v_id) > 0:
 
176
                vlanids = str(v_id) + ',' + vlanids
 
177
        return vlanids.strip(',')
 
178
 
 
179
    def _validate_vlan_id(self, vlan_id):
 
180
        if vlan_id and int(vlan_id) > 1:
 
181
            return True
 
182
        else:
 
183
            return False
 
184
 
166
185
    def create_network(self, context, network):
167
186
        """
168
187
        Perform this operation in the context of the configured device
174
193
            ovs_output = self._invoke_plugin_per_device(const.VSWITCH_PLUGIN,
175
194
                                                        self._func_name(),
176
195
                                                        args)
177
 
            vlan_id = odb.get_vlan(ovs_output[0]['id'])
 
196
            vlan_id = self._get_segmentation_id(ovs_output[0]['id'])
 
197
            if not self._validate_vlan_id(vlan_id):
 
198
                return ovs_output[0]
178
199
            vlan_name = conf.VLAN_NAME_PREFIX + str(vlan_id)
179
 
            vlan_ids = odb.get_vlans()
180
 
            vlanids = ''
181
 
            for v_id in vlan_ids:
182
 
                vlanids = str(v_id[0]) + ',' + vlanids
183
 
            vlanids = vlanids.strip(',')
 
200
            vlanids = self._get_all_segmentation_ids()
184
201
            args = [ovs_output[0]['tenant_id'], ovs_output[0]['name'],
185
202
                    ovs_output[0]['id'], vlan_name, vlan_id,
186
203
                    {'vlan_ids':vlanids}]
202
219
            args = [context, networks]
203
220
            ovs_output = self._plugins[
204
221
                const.VSWITCH_PLUGIN].create_network_bulk(context, networks)
205
 
            vlan_ids = odb.get_vlans()
206
 
            vlanids = ''
207
 
            for v_id in vlan_ids:
208
 
                vlanids = str(v_id[0]) + ',' + vlanids
209
 
            vlanids = vlanids.strip(',')
210
222
            LOG.debug("ovs_output: %s\n " % ovs_output)
 
223
            vlanids = self._get_all_segmentation_ids()
211
224
            ovs_networks = ovs_output
212
225
            for ovs_network in ovs_networks:
213
 
                vlan_id = odb.get_vlan(ovs_network['id'])
 
226
                vlan_id = self._get_segmentation_id(ovs_network['id'])
214
227
                vlan_name = conf.VLAN_NAME_PREFIX + str(vlan_id)
215
228
                args = [ovs_network['tenant_id'], ovs_network['name'],
216
229
                        ovs_network['id'], vlan_name, vlan_id,
232
245
        ovs_output = self._invoke_plugin_per_device(const.VSWITCH_PLUGIN,
233
246
                                                    self._func_name(),
234
247
                                                    args)
235
 
        vlan_id = odb.get_vlan(ovs_output[0]['id'])
236
 
        vlan_ids = ','.join(str(vlan[0]) for vlan in odb.get_vlans())
 
248
        vlan_id = self._get_segmentation_id(ovs_output[0]['id'])
 
249
        if not self._validate_vlan_id(vlan_id):
 
250
            return ovs_output[0]
 
251
        vlanids = self._get_all_segmentation_ids()
237
252
        args = [ovs_output[0]['tenant_id'], id, {'vlan_id': vlan_id},
238
253
                {'net_admin_state': ovs_output[0]['admin_state_up']},
239
 
                {'vlan_ids': vlan_ids}]
 
254
                {'vlan_ids': vlanids}]
240
255
        nexus_output = self._invoke_plugin_per_device(const.NEXUS_PLUGIN,
241
256
                                                      self._func_name(),
242
257
                                                      args)
251
266
            base_plugin_ref = QuantumManager.get_plugin()
252
267
            n = base_plugin_ref.get_network(context, id)
253
268
            tenant_id = n['tenant_id']
254
 
            vlan_id = odb.get_vlan(id)
255
 
            output = []
 
269
            vlan_id = self._get_segmentation_id(id)
 
270
            args = [context, id]
 
271
            ovs_output = self._invoke_plugin_per_device(const.VSWITCH_PLUGIN,
 
272
                                                        self._func_name(),
 
273
                                                        args)
256
274
            args = [tenant_id, id, {const.VLANID:vlan_id},
257
275
                    {const.CONTEXT:context},
258
276
                    {const.BASE_PLUGIN_REF:base_plugin_ref}]
259
 
            nexus_output = self._invoke_plugin_per_device(const.NEXUS_PLUGIN,
260
 
                                                          self._func_name(),
261
 
                                                          args)
262
 
            args = [context, id]
263
 
            ovs_output = self._invoke_plugin_per_device(const.VSWITCH_PLUGIN,
264
 
                                                        self._func_name(),
265
 
                                                        args)
 
277
            if self._validate_vlan_id(vlan_id):
 
278
                self._invoke_plugin_per_device(const.NEXUS_PLUGIN,
 
279
                                               self._func_name(), args)
266
280
            return ovs_output[0]
267
281
        except:
268
282
            raise