openstacksdk/shade/__init__.py
Ricardo Carrillo Cruz c7f8a88886 Pass specific cloud to openstack_clouds function
The openstack_clouds function gets all the clouds defined in
the clouds.yaml.
For clouds with multiple regions, it will return an OpenStackCloud
object for each one of the regions tied to the cloud.
This change allows to pass an specific cloud in case the user
wants to pull a single clouds with multiple regions from clouds.yaml.

Change-Id: I41512825cac99fae80c61b3a61248442dcd637c7
2016-03-18 21:04:31 +00:00

103 lines
3.4 KiB
Python

# Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
#
# 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
import warnings
import keystoneauth1.exceptions
import os_client_config
import pbr.version
import requestsexceptions
from shade.exc import * # noqa
from shade.openstackcloud import OpenStackCloud
from shade.operatorcloud import OperatorCloud
from shade import _log
__version__ = pbr.version.VersionInfo('shade').version_string()
if requestsexceptions.SubjectAltNameWarning:
warnings.filterwarnings(
'ignore', category=requestsexceptions.SubjectAltNameWarning)
def simple_logging(debug=False, http_debug=False):
if http_debug:
debug = True
if debug:
log_level = logging.DEBUG
else:
log_level = logging.INFO
if http_debug:
# Enable HTTP level tracing
log = _log.setup_logging('keystoneauth')
log.addHandler(logging.StreamHandler())
log.setLevel(log_level)
log = _log.setup_logging('shade')
log.addHandler(logging.StreamHandler())
log.setLevel(log_level)
# Suppress warning about keystoneauth loggers
log = _log.setup_logging('keystoneauth.identity.base')
log = _log.setup_logging('keystoneauth.identity.generic.base')
def openstack_clouds(config=None, debug=False, cloud=None):
if not config:
config = os_client_config.OpenStackConfig()
try:
if cloud is None:
return [
OpenStackCloud(
cloud=f.name, debug=debug,
cloud_config=f,
**f.config)
for f in config.get_all_clouds()
]
else:
return [
OpenStackCloud(
cloud=f.name, debug=debug,
cloud_config=f,
**f.config)
for f in config.get_all_clouds()
if f.name == cloud
]
except keystoneauth1.exceptions.auth_plugins.NoMatchingPlugin as e:
raise OpenStackCloudException(
"Invalid cloud configuration: {exc}".format(exc=str(e)))
def openstack_cloud(config=None, **kwargs):
if not config:
config = os_client_config.OpenStackConfig()
try:
cloud_config = config.get_one_cloud(**kwargs)
except keystoneauth1.exceptions.auth_plugins.NoMatchingPlugin as e:
raise OpenStackCloudException(
"Invalid cloud configuration: {exc}".format(exc=str(e)))
return OpenStackCloud(cloud_config=cloud_config)
def operator_cloud(config=None, **kwargs):
if 'interface' not in kwargs:
kwargs['interface'] = 'admin'
if not config:
config = os_client_config.OpenStackConfig()
try:
cloud_config = config.get_one_cloud(**kwargs)
except keystoneauth1.exceptions.auth_plugins.NoMatchingPlugin as e:
raise OpenStackCloudException(
"Invalid cloud configuration: {exc}".format(exc=str(e)))
return OperatorCloud(cloud_config=cloud_config)