~ubuntu-branches/ubuntu/vivid/neutron/vivid-updates

« back to all changes in this revision

Viewing changes to neutron/plugins/nec/db/router.py

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2015-03-30 11:17:19 UTC
  • mfrom: (1.1.21)
  • Revision ID: package-import@ubuntu.com-20150330111719-h0gx7233p4jkkgfh
Tags: 1:2015.1~b3-0ubuntu1
* New upstream milestone release:
  - d/control: Align version requirements with upstream.
  - d/control: Add new dependency on oslo-log.
  - d/p/*: Rebase.
  - d/control,d/neutron-plugin-hyperv*: Dropped, decomposed into
    separate project upstream.
  - d/control,d/neutron-plugin-openflow*: Dropped, decomposed into
    separate project upstream.
  - d/neutron-common.install: Add neutron-rootwrap-daemon and 
    neutron-keepalived-state-change binaries.
  - d/rules: Ignore neutron-hyperv-agent when installing; only for Windows.
  - d/neutron-plugin-cisco.install: Drop neutron-cisco-cfg-agent as
    decomposed into separate project upstream.
  - d/neutron-plugin-vmware.install: Drop neutron-check-nsx-config and
    neutron-nsx-manage as decomposed into separate project upstream.
  - d/control: Add dependency on python-neutron-fwaas to neutron-l3-agent.
* d/pydist-overrides: Add overrides for oslo packages.
* d/control: Fixup type in package description (LP: #1263539).
* d/p/fixup-driver-test-execution.patch: Cherry pick fix from upstream VCS
  to support unit test exection in out-of-tree vendor drivers.
* d/neutron-common.postinst: Allow general access to /etc/neutron but limit
  access to root/neutron to /etc/neutron/neutron.conf to support execution
  of unit tests in decomposed vendor drivers.
* d/control: Add dependency on python-neutron-fwaas to neutron-l3-agent
  package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2013 NEC Corporation.  All rights reserved.
2
 
#
3
 
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
4
 
#    not use this file except in compliance with the License. You may obtain
5
 
#    a copy of the License at
6
 
#
7
 
#         http://www.apache.org/licenses/LICENSE-2.0
8
 
#
9
 
#    Unless required by applicable law or agreed to in writing, software
10
 
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11
 
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12
 
#    License for the specific language governing permissions and limitations
13
 
#    under the License.
14
 
 
15
 
import sqlalchemy as sa
16
 
from sqlalchemy import orm
17
 
from sqlalchemy.orm import exc as sa_exc
18
 
 
19
 
from neutron.db import l3_db
20
 
from neutron.db import models_v2
21
 
from neutron.openstack.common import log as logging
22
 
 
23
 
LOG = logging.getLogger(__name__)
24
 
 
25
 
 
26
 
class RouterProvider(models_v2.model_base.BASEV2):
27
 
    """Represents a binding of router_id to provider."""
28
 
    provider = sa.Column(sa.String(255))
29
 
    router_id = sa.Column(sa.String(36),
30
 
                          sa.ForeignKey('routers.id', ondelete="CASCADE"),
31
 
                          primary_key=True)
32
 
 
33
 
    router = orm.relationship(l3_db.Router, uselist=False,
34
 
                              backref=orm.backref('provider', uselist=False,
35
 
                                                  lazy='joined',
36
 
                                                  cascade='delete'))
37
 
 
38
 
 
39
 
def _get_router_providers_query(query, provider=None, router_ids=None):
40
 
    if provider:
41
 
        query = query.filter_by(provider=provider)
42
 
    if router_ids:
43
 
        column = RouterProvider.router_id
44
 
        query = query.filter(column.in_(router_ids))
45
 
    return query
46
 
 
47
 
 
48
 
def get_router_providers(session, provider=None, router_ids=None):
49
 
    """Retrieve a list of a pair of router ID and its provider."""
50
 
    query = session.query(RouterProvider)
51
 
    query = _get_router_providers_query(query, provider, router_ids)
52
 
    return [{'provider': router.provider, 'router_id': router.router_id}
53
 
            for router in query]
54
 
 
55
 
 
56
 
def get_routers_by_provider(session, provider, router_ids=None):
57
 
    """Retrieve a list of router IDs with the given provider."""
58
 
    query = session.query(RouterProvider.router_id)
59
 
    query = _get_router_providers_query(query, provider, router_ids)
60
 
    return [router[0] for router in query]
61
 
 
62
 
 
63
 
def get_router_count_by_provider(session, provider, tenant_id=None):
64
 
    """Return the number of routers with the given provider."""
65
 
    query = session.query(RouterProvider).filter_by(provider=provider)
66
 
    if tenant_id:
67
 
        query = (query.join('router').
68
 
                 filter(l3_db.Router.tenant_id == tenant_id))
69
 
    return query.count()
70
 
 
71
 
 
72
 
def get_provider_by_router(session, router_id):
73
 
    """Retrieve a provider of the given router."""
74
 
    try:
75
 
        binding = (session.query(RouterProvider).
76
 
                   filter_by(router_id=router_id).
77
 
                   one())
78
 
    except sa_exc.NoResultFound:
79
 
        return None
80
 
    return binding.provider
81
 
 
82
 
 
83
 
def add_router_provider_binding(session, provider, router_id):
84
 
    """Add a router provider association."""
85
 
    LOG.debug("Add provider binding "
86
 
              "(router=%(router_id)s, provider=%(provider)s)",
87
 
              {'router_id': router_id, 'provider': provider})
88
 
    binding = RouterProvider(provider=provider, router_id=router_id)
89
 
    session.add(binding)
90
 
    return binding