cdac869412
I'm guessing we should do this for everyone, but we have volume on the brain right now. Rackspace is in the weird situation where they do support v2 but only have v1 in the catalog (wut) So we need to override the block-storage enpdoint by config. To do that, we need to actually honor the config setting over here in OSC. NOTE: We need to systemically overhaul how we're injesting config over here - because there's too much variation. But we can leave that for another day. Story: 2007459 Task: 39137 Change-Id: Ifddf1ddd5abaa768ab18049c09d18bc269f3a4f5
95 lines
2.8 KiB
Python
95 lines
2.8 KiB
Python
# Copyright 2012-2013 OpenStack Foundation
|
|
#
|
|
# 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.
|
|
#
|
|
|
|
import logging
|
|
|
|
from osc_lib import utils
|
|
|
|
from openstackclient.i18n import _
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
DEFAULT_API_VERSION = '3'
|
|
API_VERSION_OPTION = 'os_volume_api_version'
|
|
API_NAME = "volume"
|
|
API_VERSIONS = {
|
|
"1": "cinderclient.v1.client.Client",
|
|
"2": "cinderclient.v2.client.Client",
|
|
"3": "cinderclient.v3.client.Client",
|
|
}
|
|
|
|
|
|
def make_client(instance):
|
|
"""Returns a volume service client."""
|
|
|
|
# Defer client imports until we actually need them
|
|
from cinderclient import extension
|
|
from cinderclient.v3.contrib import list_extensions
|
|
from cinderclient.v3 import volume_snapshots
|
|
from cinderclient.v3 import volumes
|
|
|
|
# Try a small import to check if cinderclient v1 is supported
|
|
try:
|
|
from cinderclient.v1 import services # noqa
|
|
except Exception:
|
|
del API_VERSIONS['1']
|
|
|
|
if instance._api_version[API_NAME] == '1':
|
|
# Monkey patch for v1 cinderclient
|
|
volumes.Volume.NAME_ATTR = 'display_name'
|
|
volume_snapshots.Snapshot.NAME_ATTR = 'display_name'
|
|
|
|
volume_client = utils.get_client_class(
|
|
API_NAME,
|
|
instance._api_version[API_NAME],
|
|
API_VERSIONS
|
|
)
|
|
LOG.debug('Instantiating volume client: %s', volume_client)
|
|
|
|
# Set client http_log_debug to True if verbosity level is high enough
|
|
http_log_debug = utils.get_effective_log_level() <= logging.DEBUG
|
|
|
|
extensions = [extension.Extension('list_extensions', list_extensions)]
|
|
|
|
# Remember interface only if it is set
|
|
kwargs = utils.build_kwargs_dict('endpoint_type', instance.interface)
|
|
|
|
endpoint_override = instance.sdk_connection.config.get_endpoint(
|
|
'block-storage')
|
|
|
|
client = volume_client(
|
|
session=instance.session,
|
|
extensions=extensions,
|
|
http_log_debug=http_log_debug,
|
|
region_name=instance.region_name,
|
|
endpoint_override=endpoint_override,
|
|
**kwargs
|
|
)
|
|
|
|
return client
|
|
|
|
|
|
def build_option_parser(parser):
|
|
"""Hook to add global options"""
|
|
parser.add_argument(
|
|
'--os-volume-api-version',
|
|
metavar='<volume-api-version>',
|
|
default=utils.env('OS_VOLUME_API_VERSION'),
|
|
help=_('Volume API version, default=%s '
|
|
'(Env: OS_VOLUME_API_VERSION)') % DEFAULT_API_VERSION
|
|
)
|
|
return parser
|