66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
|
# Copyright 2012 OpenStack Foundation
|
||
|
# 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.
|
||
|
|
||
|
"""
|
||
|
Network interface.
|
||
|
"""
|
||
|
from novaclient import base
|
||
|
from novaclient import exceptions
|
||
|
from novaclient.i18n import _
|
||
|
|
||
|
|
||
|
class Network(base.Resource):
|
||
|
"""
|
||
|
A network as defined in the Networking (Neutron) API.
|
||
|
"""
|
||
|
HUMAN_ID = True
|
||
|
NAME_ATTR = "name"
|
||
|
|
||
|
def __repr__(self):
|
||
|
return "<Network: %s>" % self.name
|
||
|
|
||
|
|
||
|
class NeutronManager(base.Manager):
|
||
|
"""A manager for name -> id lookups for neutron networks.
|
||
|
|
||
|
This uses neutron directly from service catalog. Do not use it
|
||
|
for anything else besides that. You have been warned.
|
||
|
"""
|
||
|
|
||
|
resource_class = Network
|
||
|
|
||
|
def find_network(self, name):
|
||
|
"""Find a network by name (user provided input)."""
|
||
|
|
||
|
with self.alternate_service_type(
|
||
|
'network', allowed_types=('network',)):
|
||
|
|
||
|
matches = self._list('/v2.0/networks?name=%s' % name, 'networks')
|
||
|
|
||
|
num_matches = len(matches)
|
||
|
if num_matches == 0:
|
||
|
msg = "No %s matching %s." % (
|
||
|
self.resource_class.__name__, name)
|
||
|
raise exceptions.NotFound(404, msg)
|
||
|
elif num_matches > 1:
|
||
|
msg = (_("Multiple %(class)s matches found for "
|
||
|
"'%(name)s', use an ID to be more specific.") %
|
||
|
{'class': self.resource_class.__name__.lower(),
|
||
|
'name': name})
|
||
|
raise exceptions.NoUniqueMatch(msg)
|
||
|
else:
|
||
|
matches[0].append_request_ids(matches.request_ids)
|
||
|
return matches[0]
|