Monty Taylor 5e411fbce7
Fix use of new openstacksdk connection
We store the created conn on the instance, but we never pull it back off
if there is already one present.

Change-Id: I2d890dd206d4ddf67fa42d798e6fd2c652799785
2018-01-23 08:08:26 -06:00

87 lines
2.9 KiB
Python

# 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 openstack import connection
# NOTE(dtroyer): Attempt an import to detect if the SDK installed is new
# enough to not use Profile. If so, use that.
try:
from openstack.config import loader as config # noqa
profile = None
except ImportError:
from openstack import profile
from osc_lib import utils
from openstackclient.i18n import _
LOG = logging.getLogger(__name__)
DEFAULT_API_VERSION = '2.0'
API_VERSION_OPTION = 'os_network_api_version'
API_NAME = "network"
API_VERSIONS = {
"2.0": "openstack.connection.Connection",
"2": "openstack.connection.Connection",
}
def make_client(instance):
"""Returns a network proxy"""
if getattr(instance, "sdk_connection", None) is None:
if profile is None:
# If the installed OpenStackSDK is new enough to not require a
# Profile obejct and osc-lib is not new enough to have created
# it for us, make an SDK Connection.
# NOTE(dtroyer): This can be removed when this bit is in the
# released osc-lib in requirements.txt.
conn = connection.Connection(
config=instance._cli_options,
session=instance.session,
)
else:
# Fall back to the original Connection creation
prof = profile.Profile()
prof.set_region(API_NAME, instance.region_name)
prof.set_version(API_NAME, instance._api_version[API_NAME])
prof.set_interface(API_NAME, instance.interface)
conn = connection.Connection(
authenticator=instance.session.auth,
verify=instance.session.verify,
cert=instance.session.cert,
profile=prof,
)
instance.sdk_connection = conn
conn = instance.sdk_connection
LOG.debug('Connection: %s', conn)
LOG.debug('Network client initialized using OpenStack SDK: %s',
conn.network)
return conn.network
def build_option_parser(parser):
"""Hook to add global options"""
parser.add_argument(
'--os-network-api-version',
metavar='<network-api-version>',
default=utils.env('OS_NETWORK_API_VERSION'),
help=_("Network API version, default=%s "
"(Env: OS_NETWORK_API_VERSION)") % DEFAULT_API_VERSION
)
return parser