Skip to content

Instantly share code, notes, and snippets.

@ziadsawalha
Created April 29, 2014 22:18
Show Gist options
  • Save ziadsawalha/ea9e3ec8944814139129 to your computer and use it in GitHub Desktop.
Save ziadsawalha/ea9e3ec8944814139129 to your computer and use it in GitHub Desktop.
def _safe_context_region(region=None, context=None):
"""Value to use when no region is specified."""
context = context or identity
ret = region or settings.get("region")
if not ret:
# Nothing specified; get the default from the identity object.
ret = context.get_default_region()
if not ret:
# Use the first available region
try:
ret = regions[0]
except IndexError:
ret = ""
return ret
def connect_to_cloudservers(region=None, context=None, **kwargs):
"""Creates a client for working with cloud servers."""
if context:
auth_plugin = context
region = _safe_context_region(region=region, context=context)
id_type = None
else:
_cs_auth_plugin.discover_auth_systems()
id_type = get_setting("identity_type")
if id_type != "keystone":
auth_plugin = _cs_auth_plugin.load_plugin(id_type)
else:
auth_plugin = None
region = _safe_region(region=region)
context = context or identity
mgt_url = _get_service_endpoint(context, "compute", region)
cloudservers = None
if not mgt_url:
# Service is not available
return
insecure = not get_setting("verify_ssl")
cloudservers = _cs_client.Client(context.username, context.password,
project_id=context.tenant_id, auth_url=context.auth_endpoint,
auth_system=id_type, region_name=region, service_type="compute",
auth_plugin=auth_plugin, insecure=insecure,
http_log_debug=_http_debug, **kwargs)
agt = cloudservers.client.USER_AGENT
cloudservers.client.USER_AGENT = _make_agent_name(agt)
cloudservers.client.management_url = mgt_url
cloudservers.client.auth_token = context.token
cloudservers.exceptions = _cs_exceptions
# Add some convenience methods
cloudservers.list_images = cloudservers.images.list
cloudservers.list_flavors = cloudservers.flavors.list
cloudservers.list = cloudservers.servers.list
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment