Don't remove top-container element in the adapter
Change-Id: I0b375b5c6f3575216cbecc59285a6980fbe14314 Signed-off-by: Rosario Di Somma <rosario.disomma@dreamhost.com>
This commit is contained in:
parent
479d9ac450
commit
bf5cd53cbf
@ -20,7 +20,6 @@ from six.moves import urllib
|
|||||||
|
|
||||||
from shade import _log
|
from shade import _log
|
||||||
from shade import exc
|
from shade import exc
|
||||||
from shade import meta
|
|
||||||
from shade import task_manager
|
from shade import task_manager
|
||||||
|
|
||||||
|
|
||||||
@ -124,58 +123,10 @@ class ShadeAdapter(adapter.Adapter):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
result_json = response.json()
|
result_json = response.json()
|
||||||
|
self._log_request_id(response, result_json)
|
||||||
except Exception:
|
except Exception:
|
||||||
return self._log_request_id(response)
|
return self._log_request_id(response)
|
||||||
|
return result_json
|
||||||
# Note(rods): this is just a temporary step needed until we
|
|
||||||
# don't update all the other REST API calls
|
|
||||||
if isinstance(result_json, dict):
|
|
||||||
for key in ['volumes', 'volume', 'volumeAttachment', 'backups',
|
|
||||||
'volume_types', 'volume_type_access', 'snapshots',
|
|
||||||
'network', 'networks', 'subnet', 'subnets',
|
|
||||||
'router', 'routers', 'floatingip', 'floatingips',
|
|
||||||
'floating_ip', 'floating_ips', 'port', 'ports',
|
|
||||||
'rule_types', 'policy', 'policies',
|
|
||||||
'bandwidth_limit_rule', 'bandwidth_limit_rules',
|
|
||||||
'stack', 'stacks', 'zones', 'events',
|
|
||||||
'security_group', 'security_groups',
|
|
||||||
'security_group_rule', 'security_group_rules',
|
|
||||||
'users', 'user', 'projects', 'tenants',
|
|
||||||
'project', 'tenant', 'servers', 'server',
|
|
||||||
'flavor', 'flavors', 'baymodels', 'aggregate',
|
|
||||||
'aggregates', 'availabilityZoneInfo',
|
|
||||||
'flavor_access', 'output', 'server_groups', 'domain',
|
|
||||||
'domains', 'service', 'OS-KSADM:service']:
|
|
||||||
if key in result_json.keys():
|
|
||||||
self._log_request_id(response)
|
|
||||||
return result_json
|
|
||||||
|
|
||||||
if isinstance(result_json, list):
|
|
||||||
self._log_request_id(response)
|
|
||||||
return meta.obj_list_to_munch(result_json)
|
|
||||||
|
|
||||||
result = None
|
|
||||||
if isinstance(result_json, dict):
|
|
||||||
# Wrap the keys() call in list() because in python3 keys returns
|
|
||||||
# a "dict_keys" iterator-like object rather than a list
|
|
||||||
json_keys = list(result_json.keys())
|
|
||||||
if len(json_keys) > 1 and result_key:
|
|
||||||
result = result_json[result_key]
|
|
||||||
elif len(json_keys) == 1:
|
|
||||||
result = result_json[json_keys[0]]
|
|
||||||
if result is None:
|
|
||||||
# Passthrough the whole body - sometimes (hi glance) things
|
|
||||||
# come through without a top-level container. Also, sometimes
|
|
||||||
# you need to deal with pagination
|
|
||||||
result = result_json
|
|
||||||
|
|
||||||
self._log_request_id(response, result)
|
|
||||||
|
|
||||||
if isinstance(result, list):
|
|
||||||
return meta.obj_list_to_munch(result)
|
|
||||||
elif isinstance(result, dict):
|
|
||||||
return meta.obj_to_munch(result)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def request(
|
def request(
|
||||||
self, url, method, run_async=False, error_message=None,
|
self, url, method, run_async=False, error_message=None,
|
||||||
|
@ -809,6 +809,16 @@ class OpenStackCloud(
|
|||||||
|
|
||||||
return filtered
|
return filtered
|
||||||
|
|
||||||
|
def _get_and_munchify(self, key, data):
|
||||||
|
"""Wrapper around meta.get_and_munchify.
|
||||||
|
|
||||||
|
Some of the methods expect a `meta` attribute to be passed in as
|
||||||
|
part of the method signature. In this methods the meta param is
|
||||||
|
overriding the meta module making the call to meta.get_and_munchify
|
||||||
|
to fail.
|
||||||
|
"""
|
||||||
|
return meta.get_and_munchify(key, data)
|
||||||
|
|
||||||
@_utils.cache_on_arguments()
|
@_utils.cache_on_arguments()
|
||||||
def list_projects(self, domain_id=None, name_or_id=None, filters=None):
|
def list_projects(self, domain_id=None, name_or_id=None, filters=None):
|
||||||
"""List projects.
|
"""List projects.
|
||||||
@ -841,7 +851,7 @@ class OpenStackCloud(
|
|||||||
data = self._identity_client.get(
|
data = self._identity_client.get(
|
||||||
'/{endpoint}'.format(endpoint=key), params=pushdown)
|
'/{endpoint}'.format(endpoint=key), params=pushdown)
|
||||||
projects = self._normalize_projects(
|
projects = self._normalize_projects(
|
||||||
meta.get_and_munchify(key, data))
|
self._get_and_munchify(key, data))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.log.debug("Failed to list projects", exc_info=True)
|
self.log.debug("Failed to list projects", exc_info=True)
|
||||||
raise OpenStackCloudException(str(e))
|
raise OpenStackCloudException(str(e))
|
||||||
@ -890,11 +900,11 @@ class OpenStackCloud(
|
|||||||
if self.cloud_config.get_api_version('identity') == '3':
|
if self.cloud_config.get_api_version('identity') == '3':
|
||||||
data = self._identity_client.patch(
|
data = self._identity_client.patch(
|
||||||
'/projects/' + proj['id'], json={'project': kwargs})
|
'/projects/' + proj['id'], json={'project': kwargs})
|
||||||
project = meta.get_and_munchify('project', data)
|
project = self._get_and_munchify('project', data)
|
||||||
else:
|
else:
|
||||||
data = self._identity_client.post(
|
data = self._identity_client.post(
|
||||||
'/tenants/' + proj['id'], json={'tenant': kwargs})
|
'/tenants/' + proj['id'], json={'tenant': kwargs})
|
||||||
project = meta.get_and_munchify('tenant', data)
|
project = self._get_and_munchify('tenant', data)
|
||||||
project = self._normalize_project(project)
|
project = self._normalize_project(project)
|
||||||
self.list_projects.invalidate(self)
|
self.list_projects.invalidate(self)
|
||||||
return project
|
return project
|
||||||
@ -915,7 +925,7 @@ class OpenStackCloud(
|
|||||||
'/{endpoint}'.format(endpoint=endpoint),
|
'/{endpoint}'.format(endpoint=endpoint),
|
||||||
json={key: project_ref})
|
json={key: project_ref})
|
||||||
project = self._normalize_project(
|
project = self._normalize_project(
|
||||||
meta.get_and_munchify(key, data))
|
self._get_and_munchify(key, data))
|
||||||
self.list_projects.invalidate(self)
|
self.list_projects.invalidate(self)
|
||||||
return project
|
return project
|
||||||
|
|
||||||
@ -959,7 +969,7 @@ class OpenStackCloud(
|
|||||||
"""
|
"""
|
||||||
data = self._identity_client.get('/users')
|
data = self._identity_client.get('/users')
|
||||||
return _utils.normalize_users(
|
return _utils.normalize_users(
|
||||||
meta.get_and_munchify('users', data))
|
self._get_and_munchify('users', data))
|
||||||
|
|
||||||
def search_users(self, name_or_id=None, filters=None):
|
def search_users(self, name_or_id=None, filters=None):
|
||||||
"""Search users.
|
"""Search users.
|
||||||
@ -1007,7 +1017,7 @@ class OpenStackCloud(
|
|||||||
error_message="Error getting user with ID {user_id}".format(
|
error_message="Error getting user with ID {user_id}".format(
|
||||||
user_id=user_id))
|
user_id=user_id))
|
||||||
|
|
||||||
user = meta.get_and_munchify('user', data)
|
user = self._get_and_munchify('user', data)
|
||||||
if user and normalize:
|
if user and normalize:
|
||||||
user = _utils.normalize_users(user)
|
user = _utils.normalize_users(user)
|
||||||
return user
|
return user
|
||||||
@ -1064,7 +1074,7 @@ class OpenStackCloud(
|
|||||||
error_msg = "Error in creating user {user}".format(user=name)
|
error_msg = "Error in creating user {user}".format(user=name)
|
||||||
data = self._identity_client.post('/users', json={'user': params},
|
data = self._identity_client.post('/users', json={'user': params},
|
||||||
error_message=error_msg)
|
error_message=error_msg)
|
||||||
user = meta.get_and_munchify('user', data)
|
user = self._get_and_munchify('user', data)
|
||||||
|
|
||||||
self.list_users.invalidate(self)
|
self.list_users.invalidate(self)
|
||||||
return _utils.normalize_users([user])[0]
|
return _utils.normalize_users([user])[0]
|
||||||
@ -1409,12 +1419,11 @@ class OpenStackCloud(
|
|||||||
@_utils.cache_on_arguments()
|
@_utils.cache_on_arguments()
|
||||||
def _nova_extensions(self):
|
def _nova_extensions(self):
|
||||||
extensions = set()
|
extensions = set()
|
||||||
|
data = self._compute_client.get(
|
||||||
for extension in self._compute_client.get(
|
'/extensions',
|
||||||
'/extensions',
|
error_message="Error fetching extension list for nova")
|
||||||
error_message="Error fetching extension list for nova"):
|
for extension in self._get_and_munchify('extensions', data):
|
||||||
extensions.add(extension['alias'])
|
extensions.add(extension['alias'])
|
||||||
|
|
||||||
return extensions
|
return extensions
|
||||||
|
|
||||||
def _has_nova_extension(self, extension_name):
|
def _has_nova_extension(self, extension_name):
|
||||||
@ -1427,12 +1436,11 @@ class OpenStackCloud(
|
|||||||
@_utils.cache_on_arguments()
|
@_utils.cache_on_arguments()
|
||||||
def _neutron_extensions(self):
|
def _neutron_extensions(self):
|
||||||
extensions = set()
|
extensions = set()
|
||||||
|
data = self._network_client.get(
|
||||||
for extension in self._network_client.get(
|
'/extensions.json',
|
||||||
'/extensions.json',
|
error_message="Error fetching extension list for neutron")
|
||||||
error_message="Error fetching extension list for neutron"):
|
for extension in self._get_and_munchify('extensions', data):
|
||||||
extensions.add(extension['alias'])
|
extensions.add(extension['alias'])
|
||||||
|
|
||||||
return extensions
|
return extensions
|
||||||
|
|
||||||
def _has_neutron_extension(self, extension_alias):
|
def _has_neutron_extension(self, extension_alias):
|
||||||
@ -1615,10 +1623,11 @@ class OpenStackCloud(
|
|||||||
:returns: A list of ``munch.Munch`` containing keypair info.
|
:returns: A list of ``munch.Munch`` containing keypair info.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
data = self._compute_client.get(
|
||||||
|
'/os-keypairs',
|
||||||
|
error_message="Error fetching keypair list")
|
||||||
return self._normalize_keypairs([
|
return self._normalize_keypairs([
|
||||||
k['keypair'] for k in self._compute_client.get(
|
k['keypair'] for k in self._get_and_munchify('keypairs', data)])
|
||||||
'/os-keypairs',
|
|
||||||
error_message="Error fetching keypair list")])
|
|
||||||
|
|
||||||
def list_networks(self, filters=None):
|
def list_networks(self, filters=None):
|
||||||
"""List all available networks.
|
"""List all available networks.
|
||||||
@ -1631,7 +1640,7 @@ class OpenStackCloud(
|
|||||||
if not filters:
|
if not filters:
|
||||||
filters = {}
|
filters = {}
|
||||||
data = self._network_client.get("/networks.json", params=filters)
|
data = self._network_client.get("/networks.json", params=filters)
|
||||||
return meta.get_and_munchify('networks', data)
|
return self._get_and_munchify('networks', data)
|
||||||
|
|
||||||
def list_routers(self, filters=None):
|
def list_routers(self, filters=None):
|
||||||
"""List all available routers.
|
"""List all available routers.
|
||||||
@ -1646,7 +1655,7 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.get(
|
data = self._network_client.get(
|
||||||
"/routers.json", params=filters,
|
"/routers.json", params=filters,
|
||||||
error_message="Error fetching router list")
|
error_message="Error fetching router list")
|
||||||
return meta.get_and_munchify('routers', data)
|
return self._get_and_munchify('routers', data)
|
||||||
|
|
||||||
def list_subnets(self, filters=None):
|
def list_subnets(self, filters=None):
|
||||||
"""List all available subnets.
|
"""List all available subnets.
|
||||||
@ -1659,7 +1668,7 @@ class OpenStackCloud(
|
|||||||
if not filters:
|
if not filters:
|
||||||
filters = {}
|
filters = {}
|
||||||
data = self._network_client.get("/subnets.json", params=filters)
|
data = self._network_client.get("/subnets.json", params=filters)
|
||||||
return meta.get_and_munchify('subnets', data)
|
return self._get_and_munchify('subnets', data)
|
||||||
|
|
||||||
def list_ports(self, filters=None):
|
def list_ports(self, filters=None):
|
||||||
"""List all available ports.
|
"""List all available ports.
|
||||||
@ -1695,7 +1704,7 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.get(
|
data = self._network_client.get(
|
||||||
"/ports.json", params=filters,
|
"/ports.json", params=filters,
|
||||||
error_message="Error fetching port list")
|
error_message="Error fetching port list")
|
||||||
return meta.get_and_munchify('ports', data)
|
return self._get_and_munchify('ports', data)
|
||||||
|
|
||||||
def list_qos_rule_types(self, filters=None):
|
def list_qos_rule_types(self, filters=None):
|
||||||
"""List all available QoS rule types.
|
"""List all available QoS rule types.
|
||||||
@ -1714,7 +1723,7 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.get(
|
data = self._network_client.get(
|
||||||
"/qos/rule-types.json", params=filters,
|
"/qos/rule-types.json", params=filters,
|
||||||
error_message="Error fetching QoS rule types list")
|
error_message="Error fetching QoS rule types list")
|
||||||
return meta.get_and_munchify('rule_types', data)
|
return self._get_and_munchify('rule_types', data)
|
||||||
|
|
||||||
def list_qos_policies(self, filters=None):
|
def list_qos_policies(self, filters=None):
|
||||||
"""List all available QoS policies.
|
"""List all available QoS policies.
|
||||||
@ -1732,7 +1741,7 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.get(
|
data = self._network_client.get(
|
||||||
"/qos/policies.json", params=filters,
|
"/qos/policies.json", params=filters,
|
||||||
error_message="Error fetching QoS policies list")
|
error_message="Error fetching QoS policies list")
|
||||||
return meta.get_and_munchify('policies', data)
|
return self._get_and_munchify('policies', data)
|
||||||
|
|
||||||
@_utils.cache_on_arguments(should_cache_fn=_no_pending_volumes)
|
@_utils.cache_on_arguments(should_cache_fn=_no_pending_volumes)
|
||||||
def list_volumes(self, cache=True):
|
def list_volumes(self, cache=True):
|
||||||
@ -1788,7 +1797,7 @@ class OpenStackCloud(
|
|||||||
# list volumes didn't complete succesfully so just return what
|
# list volumes didn't complete succesfully so just return what
|
||||||
# we found
|
# we found
|
||||||
return self._normalize_volumes(
|
return self._normalize_volumes(
|
||||||
meta.get_and_munchify(key=None, data=volumes))
|
self._get_and_munchify(key=None, data=volumes))
|
||||||
|
|
||||||
@_utils.cache_on_arguments()
|
@_utils.cache_on_arguments()
|
||||||
def list_volume_types(self, get_extra=True):
|
def list_volume_types(self, get_extra=True):
|
||||||
@ -1802,7 +1811,7 @@ class OpenStackCloud(
|
|||||||
params=dict(is_public='None'),
|
params=dict(is_public='None'),
|
||||||
error_message='Error fetching volume_type list')
|
error_message='Error fetching volume_type list')
|
||||||
return self._normalize_volume_types(
|
return self._normalize_volume_types(
|
||||||
meta.get_and_munchify('volume_types', data))
|
self._get_and_munchify('volume_types', data))
|
||||||
|
|
||||||
@_utils.cache_on_arguments()
|
@_utils.cache_on_arguments()
|
||||||
def list_availability_zone_names(self, unavailable=False):
|
def list_availability_zone_names(self, unavailable=False):
|
||||||
@ -1821,7 +1830,7 @@ class OpenStackCloud(
|
|||||||
"Availability zone list could not be fetched",
|
"Availability zone list could not be fetched",
|
||||||
exc_info=True)
|
exc_info=True)
|
||||||
return []
|
return []
|
||||||
zones = meta.get_and_munchify('availabilityZoneInfo', data)
|
zones = self._get_and_munchify('availabilityZoneInfo', data)
|
||||||
ret = []
|
ret = []
|
||||||
for zone in zones:
|
for zone in zones:
|
||||||
if zone['zoneState']['available'] or unavailable:
|
if zone['zoneState']['available'] or unavailable:
|
||||||
@ -1845,17 +1854,18 @@ class OpenStackCloud(
|
|||||||
'/flavors/detail', params=dict(is_public='None'),
|
'/flavors/detail', params=dict(is_public='None'),
|
||||||
error_message="Error fetching flavor list")
|
error_message="Error fetching flavor list")
|
||||||
flavors = self._normalize_flavors(
|
flavors = self._normalize_flavors(
|
||||||
meta.get_and_munchify('flavors', data))
|
self._get_and_munchify('flavors', data))
|
||||||
|
|
||||||
for flavor in flavors:
|
for flavor in flavors:
|
||||||
if not flavor.extra_specs and get_extra:
|
if not flavor.extra_specs and get_extra:
|
||||||
endpoint = "/flavors/{id}/os-extra_specs".format(
|
endpoint = "/flavors/{id}/os-extra_specs".format(
|
||||||
id=flavor.id)
|
id=flavor.id)
|
||||||
try:
|
try:
|
||||||
extra_specs = self._compute_client.get(
|
data = self._compute_client.get(
|
||||||
endpoint,
|
endpoint,
|
||||||
error_message="Error fetching flavor extra specs")
|
error_message="Error fetching flavor extra specs")
|
||||||
flavor.extra_specs = extra_specs
|
flavor.extra_specs = self._get_and_munchify(
|
||||||
|
'extra_specs', data)
|
||||||
except OpenStackCloudHTTPError as e:
|
except OpenStackCloudHTTPError as e:
|
||||||
flavor.extra_specs = {}
|
flavor.extra_specs = {}
|
||||||
self.log.debug(
|
self.log.debug(
|
||||||
@ -1876,7 +1886,7 @@ class OpenStackCloud(
|
|||||||
data = self._orchestration_client.get(
|
data = self._orchestration_client.get(
|
||||||
'/stacks', error_message="Error fetching stack list")
|
'/stacks', error_message="Error fetching stack list")
|
||||||
return self._normalize_stacks(
|
return self._normalize_stacks(
|
||||||
meta.get_and_munchify('stacks', data))
|
self._get_and_munchify('stacks', data))
|
||||||
|
|
||||||
def list_server_security_groups(self, server):
|
def list_server_security_groups(self, server):
|
||||||
"""List all security groups associated with the given server.
|
"""List all security groups associated with the given server.
|
||||||
@ -1892,7 +1902,7 @@ class OpenStackCloud(
|
|||||||
'/servers/{server_id}/os-security-groups'.format(
|
'/servers/{server_id}/os-security-groups'.format(
|
||||||
server_id=server['id']))
|
server_id=server['id']))
|
||||||
return self._normalize_secgroups(
|
return self._normalize_secgroups(
|
||||||
meta.get_and_munchify('security_groups', data))
|
self._get_and_munchify('security_groups', data))
|
||||||
|
|
||||||
def _get_server_security_groups(self, server, security_groups):
|
def _get_server_security_groups(self, server, security_groups):
|
||||||
if not self._has_secgroups():
|
if not self._has_secgroups():
|
||||||
@ -2010,14 +2020,14 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.get(
|
data = self._network_client.get(
|
||||||
'/security-groups.json', params=filters,
|
'/security-groups.json', params=filters,
|
||||||
error_message="Error fetching security group list")
|
error_message="Error fetching security group list")
|
||||||
return meta.get_and_munchify('security_groups', data)
|
return self._get_and_munchify('security_groups', data)
|
||||||
|
|
||||||
# Handle nova security groups
|
# Handle nova security groups
|
||||||
else:
|
else:
|
||||||
data = self._compute_client.get(
|
data = self._compute_client.get(
|
||||||
'/os-security-groups', params=filters)
|
'/os-security-groups', params=filters)
|
||||||
return self._normalize_secgroups(
|
return self._normalize_secgroups(
|
||||||
meta.get_and_munchify('security_groups', data))
|
self._get_and_munchify('security_groups', data))
|
||||||
|
|
||||||
def list_servers(self, detailed=False, all_projects=False, bare=False):
|
def list_servers(self, detailed=False, all_projects=False, bare=False):
|
||||||
"""List all available servers.
|
"""List all available servers.
|
||||||
@ -2066,7 +2076,7 @@ class OpenStackCloud(
|
|||||||
data = self._compute_client.get(
|
data = self._compute_client.get(
|
||||||
'/servers/detail', params=params, error_message=error_msg)
|
'/servers/detail', params=params, error_message=error_msg)
|
||||||
servers = self._normalize_servers(
|
servers = self._normalize_servers(
|
||||||
meta.get_and_munchify('servers', data))
|
self._get_and_munchify('servers', data))
|
||||||
return [
|
return [
|
||||||
self._expand_server(server, detailed, bare)
|
self._expand_server(server, detailed, bare)
|
||||||
for server in servers
|
for server in servers
|
||||||
@ -2081,7 +2091,7 @@ class OpenStackCloud(
|
|||||||
data = self._compute_client.get(
|
data = self._compute_client.get(
|
||||||
'/os-server-groups',
|
'/os-server-groups',
|
||||||
error_message="Error fetching server group list")
|
error_message="Error fetching server group list")
|
||||||
return meta.get_and_munchify('server_groups', data)
|
return self._get_and_munchify('server_groups', data)
|
||||||
|
|
||||||
def get_compute_limits(self, name_or_id=None):
|
def get_compute_limits(self, name_or_id=None):
|
||||||
""" Get compute limits for a project
|
""" Get compute limits for a project
|
||||||
@ -2105,8 +2115,8 @@ class OpenStackCloud(
|
|||||||
error_msg = "{msg} for the project: {project} ".format(
|
error_msg = "{msg} for the project: {project} ".format(
|
||||||
msg=error_msg, project=name_or_id)
|
msg=error_msg, project=name_or_id)
|
||||||
|
|
||||||
limits = self._compute_client.get('/limits', params=params)
|
data = self._compute_client.get('/limits', params=params)
|
||||||
|
limits = self._get_and_munchify('limits', data)
|
||||||
return self._normalize_compute_limits(limits, project_id=project_id)
|
return self._normalize_compute_limits(limits, project_id=project_id)
|
||||||
|
|
||||||
@_utils.cache_on_arguments(should_cache_fn=_no_pending_images)
|
@_utils.cache_on_arguments(should_cache_fn=_no_pending_images)
|
||||||
@ -2175,9 +2185,10 @@ class OpenStackCloud(
|
|||||||
raise OpenStackCloudUnavailableExtension(
|
raise OpenStackCloudUnavailableExtension(
|
||||||
'Floating IP pools extension is not available on target cloud')
|
'Floating IP pools extension is not available on target cloud')
|
||||||
|
|
||||||
pools = self._compute_client.get(
|
data = self._compute_client.get(
|
||||||
'os-floating-ip-pools',
|
'os-floating-ip-pools',
|
||||||
error_message="Error fetching floating IP pool list")
|
error_message="Error fetching floating IP pool list")
|
||||||
|
pools = self._get_and_munchify('floating_ip_pools', data)
|
||||||
return [{'name': p['name']} for p in pools]
|
return [{'name': p['name']} for p in pools]
|
||||||
|
|
||||||
def _list_floating_ips(self, filters=None):
|
def _list_floating_ips(self, filters=None):
|
||||||
@ -2260,14 +2271,14 @@ class OpenStackCloud(
|
|||||||
if not filters:
|
if not filters:
|
||||||
filters = {}
|
filters = {}
|
||||||
data = self._network_client.get('/floatingips.json', params=filters)
|
data = self._network_client.get('/floatingips.json', params=filters)
|
||||||
return meta.get_and_munchify('floatingips', data)
|
return self._get_and_munchify('floatingips', data)
|
||||||
|
|
||||||
def _nova_list_floating_ips(self):
|
def _nova_list_floating_ips(self):
|
||||||
try:
|
try:
|
||||||
data = self._compute_client.get('/os-floating-ips')
|
data = self._compute_client.get('/os-floating-ips')
|
||||||
except OpenStackCloudURINotFound:
|
except OpenStackCloudURINotFound:
|
||||||
return []
|
return []
|
||||||
return meta.get_and_munchify('floating_ips', data)
|
return self._get_and_munchify('floating_ips', data)
|
||||||
|
|
||||||
def use_external_network(self):
|
def use_external_network(self):
|
||||||
return self._use_external_network
|
return self._use_external_network
|
||||||
@ -2853,7 +2864,7 @@ class OpenStackCloud(
|
|||||||
data = self._compute_client.post(
|
data = self._compute_client.post(
|
||||||
'/servers/{server}/action'.format(server=server['id']),
|
'/servers/{server}/action'.format(server=server['id']),
|
||||||
json={'os-getConsoleOutput': {'length': length}})
|
json={'os-getConsoleOutput': {'length': length}})
|
||||||
return meta.get_and_munchify('output', data)
|
return self._get_and_munchify('output', data)
|
||||||
except OpenStackCloudBadRequest:
|
except OpenStackCloudBadRequest:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
@ -2902,7 +2913,7 @@ class OpenStackCloud(
|
|||||||
|
|
||||||
def get_server_by_id(self, id):
|
def get_server_by_id(self, id):
|
||||||
data = self._compute_client.get('/servers/{id}'.format(id=id))
|
data = self._compute_client.get('/servers/{id}'.format(id=id))
|
||||||
server = meta.get_and_munchify('server', data)
|
server = self._get_and_munchify('server', data)
|
||||||
return meta.add_server_interfaces(self, self._normalize_server(server))
|
return meta.add_server_interfaces(self, self._normalize_server(server))
|
||||||
|
|
||||||
def get_server_group(self, name_or_id=None, filters=None):
|
def get_server_group(self, name_or_id=None, filters=None):
|
||||||
@ -3048,7 +3059,7 @@ class OpenStackCloud(
|
|||||||
data = self._orchestration_client.get(
|
data = self._orchestration_client.get(
|
||||||
'/stacks/{name_or_id}'.format(name_or_id=name_or_id),
|
'/stacks/{name_or_id}'.format(name_or_id=name_or_id),
|
||||||
error_message="Error fetching stack")
|
error_message="Error fetching stack")
|
||||||
stack = meta.get_and_munchify('stack', data)
|
stack = self._get_and_munchify('stack', data)
|
||||||
# Treat DELETE_COMPLETE stacks as a NotFound
|
# Treat DELETE_COMPLETE stacks as a NotFound
|
||||||
if stack['stack_status'] == 'DELETE_COMPLETE':
|
if stack['stack_status'] == 'DELETE_COMPLETE':
|
||||||
return []
|
return []
|
||||||
@ -3073,10 +3084,12 @@ class OpenStackCloud(
|
|||||||
}
|
}
|
||||||
if public_key:
|
if public_key:
|
||||||
keypair['public_key'] = public_key
|
keypair['public_key'] = public_key
|
||||||
return self._normalize_keypair(self._compute_client.post(
|
data = self._compute_client.post(
|
||||||
'/os-keypairs',
|
'/os-keypairs',
|
||||||
json={'keypair': keypair},
|
json={'keypair': keypair},
|
||||||
error_message="Unable to create keypair {name}".format(name=name)))
|
error_message="Unable to create keypair {name}".format(name=name))
|
||||||
|
return self._normalize_keypair(
|
||||||
|
self._get_and_munchify('keypair', data))
|
||||||
|
|
||||||
def delete_keypair(self, name):
|
def delete_keypair(self, name):
|
||||||
"""Delete a keypair.
|
"""Delete a keypair.
|
||||||
@ -3145,7 +3158,7 @@ class OpenStackCloud(
|
|||||||
|
|
||||||
# Reset cache so the new network is picked up
|
# Reset cache so the new network is picked up
|
||||||
self._reset_network_caches()
|
self._reset_network_caches()
|
||||||
return meta.get_and_munchify('network', data)
|
return self._get_and_munchify('network', data)
|
||||||
|
|
||||||
def delete_network(self, name_or_id):
|
def delete_network(self, name_or_id):
|
||||||
"""Delete a network.
|
"""Delete a network.
|
||||||
@ -3204,7 +3217,7 @@ class OpenStackCloud(
|
|||||||
|
|
||||||
data = self._network_client.post("/qos/policies.json",
|
data = self._network_client.post("/qos/policies.json",
|
||||||
json={'policy': policy})
|
json={'policy': policy})
|
||||||
return meta.get_and_munchify('policy', data)
|
return self._get_and_munchify('policy', data)
|
||||||
|
|
||||||
def update_qos_policy(self, name_or_id, policy_name=None,
|
def update_qos_policy(self, name_or_id, policy_name=None,
|
||||||
description=None, shared=None, default=None):
|
description=None, shared=None, default=None):
|
||||||
@ -3254,7 +3267,7 @@ class OpenStackCloud(
|
|||||||
"/qos/policies/{policy_id}.json".format(
|
"/qos/policies/{policy_id}.json".format(
|
||||||
policy_id=curr_policy['id']),
|
policy_id=curr_policy['id']),
|
||||||
json={'policy': policy})
|
json={'policy': policy})
|
||||||
return meta.get_and_munchify('policy', data)
|
return self._get_and_munchify('policy', data)
|
||||||
|
|
||||||
def delete_qos_policy(self, name_or_id):
|
def delete_qos_policy(self, name_or_id):
|
||||||
"""Delete a QoS policy.
|
"""Delete a QoS policy.
|
||||||
@ -3328,7 +3341,7 @@ class OpenStackCloud(
|
|||||||
params=filters,
|
params=filters,
|
||||||
error_message="Error fetching QoS bandwith limit rules from "
|
error_message="Error fetching QoS bandwith limit rules from "
|
||||||
"{policy}".format(policy=policy['id']))
|
"{policy}".format(policy=policy['id']))
|
||||||
return meta.get_and_munchify('bandwidth_limit_rules', data)
|
return self._get_and_munchify('bandwidth_limit_rules', data)
|
||||||
|
|
||||||
def get_qos_bandwidth_limit_rule(self, policy_name_or_id, rule_id):
|
def get_qos_bandwidth_limit_rule(self, policy_name_or_id, rule_id):
|
||||||
"""Get a QoS bandwidth limit rule by name or ID.
|
"""Get a QoS bandwidth limit rule by name or ID.
|
||||||
@ -3357,7 +3370,7 @@ class OpenStackCloud(
|
|||||||
error_message="Error fetching QoS bandwith limit rule {rule_id} "
|
error_message="Error fetching QoS bandwith limit rule {rule_id} "
|
||||||
"from {policy}".format(rule_id=rule_id,
|
"from {policy}".format(rule_id=rule_id,
|
||||||
policy=policy['id']))
|
policy=policy['id']))
|
||||||
return meta.get_and_munchify('bandwidth_limit_rule', data)
|
return self._get_and_munchify('bandwidth_limit_rule', data)
|
||||||
|
|
||||||
def create_qos_bandwidth_limit_rule(self, policy_name_or_id, max_kbps=None,
|
def create_qos_bandwidth_limit_rule(self, policy_name_or_id, max_kbps=None,
|
||||||
max_burst_kbps=None, direction=None):
|
max_burst_kbps=None, direction=None):
|
||||||
@ -3401,7 +3414,7 @@ class OpenStackCloud(
|
|||||||
"/qos/policies/{policy_id}/bandwidth_limit_rules".format(
|
"/qos/policies/{policy_id}/bandwidth_limit_rules".format(
|
||||||
policy_id=policy['id']),
|
policy_id=policy['id']),
|
||||||
json={'bandwidth_limit_rule': rule})
|
json={'bandwidth_limit_rule': rule})
|
||||||
return meta.get_and_munchify('bandwidth_limit_rule', data)
|
return self._get_and_munchify('bandwidth_limit_rule', data)
|
||||||
|
|
||||||
def update_qos_bandwidth_limit_rule(self, policy_name_or_id, rule_id,
|
def update_qos_bandwidth_limit_rule(self, policy_name_or_id, rule_id,
|
||||||
max_kbps=None, max_burst_kbps=None,
|
max_kbps=None, max_burst_kbps=None,
|
||||||
@ -3458,7 +3471,7 @@ class OpenStackCloud(
|
|||||||
"/qos/policies/{policy_id}/bandwidth_limit_rules/{rule_id}.json".
|
"/qos/policies/{policy_id}/bandwidth_limit_rules/{rule_id}.json".
|
||||||
format(policy_id=policy['id'], rule_id=rule_id),
|
format(policy_id=policy['id'], rule_id=rule_id),
|
||||||
json={'bandwidth_limit_rule': rule})
|
json={'bandwidth_limit_rule': rule})
|
||||||
return meta.get_and_munchify('bandwidth_limit_rule', data)
|
return self._get_and_munchify('bandwidth_limit_rule', data)
|
||||||
|
|
||||||
def delete_qos_bandwidth_limit_rule(self, policy_name_or_id, rule_id):
|
def delete_qos_bandwidth_limit_rule(self, policy_name_or_id, rule_id):
|
||||||
"""Delete a QoS bandwidth limit rule.
|
"""Delete a QoS bandwidth limit rule.
|
||||||
@ -3650,7 +3663,7 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.post(
|
data = self._network_client.post(
|
||||||
"/routers.json", json={"router": router},
|
"/routers.json", json={"router": router},
|
||||||
error_message="Error creating router {0}".format(name))
|
error_message="Error creating router {0}".format(name))
|
||||||
return meta.get_and_munchify('router', data)
|
return self._get_and_munchify('router', data)
|
||||||
|
|
||||||
def update_router(self, name_or_id, name=None, admin_state_up=None,
|
def update_router(self, name_or_id, name=None, admin_state_up=None,
|
||||||
ext_gateway_net_id=None, enable_snat=None,
|
ext_gateway_net_id=None, enable_snat=None,
|
||||||
@ -3701,7 +3714,7 @@ class OpenStackCloud(
|
|||||||
"/routers/{router_id}.json".format(router_id=curr_router['id']),
|
"/routers/{router_id}.json".format(router_id=curr_router['id']),
|
||||||
json={"router": router},
|
json={"router": router},
|
||||||
error_message="Error updating router {0}".format(name_or_id))
|
error_message="Error updating router {0}".format(name_or_id))
|
||||||
return meta.get_and_munchify('router', data)
|
return self._get_and_munchify('router', data)
|
||||||
|
|
||||||
def delete_router(self, name_or_id):
|
def delete_router(self, name_or_id):
|
||||||
"""Delete a logical router.
|
"""Delete a logical router.
|
||||||
@ -4068,7 +4081,7 @@ class OpenStackCloud(
|
|||||||
def _upload_image_from_volume(
|
def _upload_image_from_volume(
|
||||||
self, name, volume_id, allow_duplicates,
|
self, name, volume_id, allow_duplicates,
|
||||||
container_format, disk_format, wait, timeout):
|
container_format, disk_format, wait, timeout):
|
||||||
response = self._volume_client.post(
|
data = self._volume_client.post(
|
||||||
'/volumes/{id}/action'.format(id=volume_id),
|
'/volumes/{id}/action'.format(id=volume_id),
|
||||||
json={
|
json={
|
||||||
'os-volume_upload_image': {
|
'os-volume_upload_image': {
|
||||||
@ -4076,6 +4089,8 @@ class OpenStackCloud(
|
|||||||
'image_name': name,
|
'image_name': name,
|
||||||
'container_format': container_format,
|
'container_format': container_format,
|
||||||
'disk_format': disk_format}})
|
'disk_format': disk_format}})
|
||||||
|
response = self._get_and_munchify('os-volume_upload_image', data)
|
||||||
|
|
||||||
if not wait:
|
if not wait:
|
||||||
return self.get_image(response['image_id'])
|
return self.get_image(response['image_id'])
|
||||||
try:
|
try:
|
||||||
@ -4092,13 +4107,13 @@ class OpenStackCloud(
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
def _upload_image_put_v2(self, name, image_data, meta, **image_kwargs):
|
def _upload_image_put_v2(self, name, image_data, meta, **image_kwargs):
|
||||||
|
|
||||||
properties = image_kwargs.pop('properties', {})
|
properties = image_kwargs.pop('properties', {})
|
||||||
|
|
||||||
image_kwargs.update(self._make_v2_image_params(meta, properties))
|
image_kwargs.update(self._make_v2_image_params(meta, properties))
|
||||||
image_kwargs['name'] = name
|
image_kwargs['name'] = name
|
||||||
|
|
||||||
image = self._image_client.post('/images', json=image_kwargs)
|
data = self._image_client.post('/images', json=image_kwargs)
|
||||||
|
image = self._get_and_munchify(key=None, data=data)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._image_client.put(
|
self._image_client.put(
|
||||||
@ -4201,7 +4216,8 @@ class OpenStackCloud(
|
|||||||
import_from='{container}/{name}'.format(
|
import_from='{container}/{name}'.format(
|
||||||
container=container, name=name),
|
container=container, name=name),
|
||||||
image_properties=dict(name=name)))
|
image_properties=dict(name=name)))
|
||||||
glance_task = self._image_client.post('/tasks', json=task_args)
|
data = self._image_client.post('/tasks', json=task_args)
|
||||||
|
glance_task = self._get_and_munchify(key=None, data=data)
|
||||||
self.list_images.invalidate(self)
|
self.list_images.invalidate(self)
|
||||||
if wait:
|
if wait:
|
||||||
start = time.time()
|
start = time.time()
|
||||||
@ -4211,8 +4227,9 @@ class OpenStackCloud(
|
|||||||
"Timeout waiting for the image to import."):
|
"Timeout waiting for the image to import."):
|
||||||
try:
|
try:
|
||||||
if image_id is None:
|
if image_id is None:
|
||||||
status = self._image_client.get(
|
data = self._image_client.get(
|
||||||
'/tasks/{id}'.format(id=glance_task.id))
|
'/tasks/{id}'.format(id=glance_task.id))
|
||||||
|
status = self._get_and_munchify('images', data=data)
|
||||||
except OpenStackCloudHTTPError as e:
|
except OpenStackCloudHTTPError as e:
|
||||||
if e.response.status_code == 503:
|
if e.response.status_code == 503:
|
||||||
# Clear the exception so that it doesn't linger
|
# Clear the exception so that it doesn't linger
|
||||||
@ -4348,7 +4365,7 @@ class OpenStackCloud(
|
|||||||
'/volumes',
|
'/volumes',
|
||||||
json=dict(payload),
|
json=dict(payload),
|
||||||
error_message='Error in creating volume')
|
error_message='Error in creating volume')
|
||||||
volume = meta.get_and_munchify('volume', data)
|
volume = self._get_and_munchify('volume', data)
|
||||||
self.list_volumes.invalidate(self)
|
self.list_volumes.invalidate(self)
|
||||||
|
|
||||||
if volume['status'] == 'error':
|
if volume['status'] == 'error':
|
||||||
@ -4558,7 +4575,7 @@ class OpenStackCloud(
|
|||||||
"Error in attaching volume %s" % volume['id']
|
"Error in attaching volume %s" % volume['id']
|
||||||
)
|
)
|
||||||
return self._normalize_volume_attachment(
|
return self._normalize_volume_attachment(
|
||||||
meta.get_and_munchify('volumeAttachment', data))
|
self._get_and_munchify('volumeAttachment', data))
|
||||||
|
|
||||||
def _get_volume_kwargs(self, kwargs):
|
def _get_volume_kwargs(self, kwargs):
|
||||||
name = kwargs.pop('name', kwargs.pop('display_name', None))
|
name = kwargs.pop('name', kwargs.pop('display_name', None))
|
||||||
@ -4602,12 +4619,12 @@ class OpenStackCloud(
|
|||||||
kwargs = self._get_volume_kwargs(kwargs)
|
kwargs = self._get_volume_kwargs(kwargs)
|
||||||
payload = {'volume_id': volume_id, 'force': force}
|
payload = {'volume_id': volume_id, 'force': force}
|
||||||
payload.update(kwargs)
|
payload.update(kwargs)
|
||||||
snapshot = self._volume_client.post(
|
data = self._volume_client.post(
|
||||||
'/snapshots',
|
'/snapshots',
|
||||||
json=dict(snapshot=payload),
|
json=dict(snapshot=payload),
|
||||||
error_message="Error creating snapshot of volume "
|
error_message="Error creating snapshot of volume "
|
||||||
"{volume_id}".format(volume_id=volume_id))
|
"{volume_id}".format(volume_id=volume_id))
|
||||||
|
snapshot = self._get_and_munchify('snapshot', data)
|
||||||
if wait:
|
if wait:
|
||||||
snapshot_id = snapshot['id']
|
snapshot_id = snapshot['id']
|
||||||
for count in _utils._iterate_timeout(
|
for count in _utils._iterate_timeout(
|
||||||
@ -4637,11 +4654,12 @@ class OpenStackCloud(
|
|||||||
param: snapshot_id: ID of the volume snapshot.
|
param: snapshot_id: ID of the volume snapshot.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
snapshot = self._volume_client.get(
|
data = self._volume_client.get(
|
||||||
'/snapshots/{snapshot_id}'.format(snapshot_id=snapshot_id),
|
'/snapshots/{snapshot_id}'.format(snapshot_id=snapshot_id),
|
||||||
error_message="Error getting snapshot "
|
error_message="Error getting snapshot "
|
||||||
"{snapshot_id}".format(snapshot_id=snapshot_id))
|
"{snapshot_id}".format(snapshot_id=snapshot_id))
|
||||||
return self._normalize_volume(snapshot)
|
return self._normalize_volume(
|
||||||
|
self._get_and_munchify('snapshot', data))
|
||||||
|
|
||||||
def get_volume_snapshot(self, name_or_id, filters=None):
|
def get_volume_snapshot(self, name_or_id, filters=None):
|
||||||
"""Get a volume by name or ID.
|
"""Get a volume by name or ID.
|
||||||
@ -4695,10 +4713,11 @@ class OpenStackCloud(
|
|||||||
'force': force,
|
'force': force,
|
||||||
}
|
}
|
||||||
|
|
||||||
backup = self._volume_client.post(
|
data = self._volume_client.post(
|
||||||
'/backups', json=dict(backup=payload),
|
'/backups', json=dict(backup=payload),
|
||||||
error_message="Error creating backup of volume "
|
error_message="Error creating backup of volume "
|
||||||
"{volume_id}".format(volume_id=volume_id))
|
"{volume_id}".format(volume_id=volume_id))
|
||||||
|
backup = self._get_and_munchify('backup', data)
|
||||||
|
|
||||||
if wait:
|
if wait:
|
||||||
backup_id = backup['id']
|
backup_id = backup['id']
|
||||||
@ -4737,7 +4756,7 @@ class OpenStackCloud(
|
|||||||
endpoint,
|
endpoint,
|
||||||
params=search_opts,
|
params=search_opts,
|
||||||
error_message="Error getting a list of snapshots")
|
error_message="Error getting a list of snapshots")
|
||||||
return meta.get_and_munchify('snapshots', data)
|
return self._get_and_munchify('snapshots', data)
|
||||||
|
|
||||||
def list_volume_backups(self, detailed=True, search_opts=None):
|
def list_volume_backups(self, detailed=True, search_opts=None):
|
||||||
"""
|
"""
|
||||||
@ -4760,7 +4779,7 @@ class OpenStackCloud(
|
|||||||
data = self._volume_client.get(
|
data = self._volume_client.get(
|
||||||
endpoint, params=search_opts,
|
endpoint, params=search_opts,
|
||||||
error_message="Error getting a list of backups")
|
error_message="Error getting a list of backups")
|
||||||
return meta.get_and_munchify('backups', data)
|
return self._get_and_munchify('backups', data)
|
||||||
|
|
||||||
def delete_volume_backup(self, name_or_id=None, force=False, wait=False,
|
def delete_volume_backup(self, name_or_id=None, force=False, wait=False,
|
||||||
timeout=None):
|
timeout=None):
|
||||||
@ -5084,7 +5103,7 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.post(
|
data = self._network_client.post(
|
||||||
"/floatingips.json", json={"floatingip": kwargs})
|
"/floatingips.json", json={"floatingip": kwargs})
|
||||||
return self._normalize_floating_ip(
|
return self._normalize_floating_ip(
|
||||||
meta.get_and_munchify('floatingip', data))
|
self._get_and_munchify('floatingip', data))
|
||||||
|
|
||||||
def _neutron_create_floating_ip(
|
def _neutron_create_floating_ip(
|
||||||
self, network_name_or_id=None, server=None,
|
self, network_name_or_id=None, server=None,
|
||||||
@ -5173,11 +5192,11 @@ class OpenStackCloud(
|
|||||||
|
|
||||||
data = self._compute_client.post(
|
data = self._compute_client.post(
|
||||||
'/os-floating-ips', json=dict(pool=pool))
|
'/os-floating-ips', json=dict(pool=pool))
|
||||||
pool_ip = meta.get_and_munchify('floating_ip', data)
|
pool_ip = self._get_and_munchify('floating_ip', data)
|
||||||
# TODO(mordred) Remove this - it's just for compat
|
# TODO(mordred) Remove this - it's just for compat
|
||||||
data = self._compute_client.get('/os-floating-ips/{id}'.format(
|
data = self._compute_client.get('/os-floating-ips/{id}'.format(
|
||||||
id=pool_ip['id']))
|
id=pool_ip['id']))
|
||||||
return meta.get_and_munchify('floating_ip', data)
|
return self._get_and_munchify('floating_ip', data)
|
||||||
|
|
||||||
def delete_floating_ip(self, floating_ip_id, retry=1):
|
def delete_floating_ip(self, floating_ip_id, retry=1):
|
||||||
"""Deallocate a floating IP from a project.
|
"""Deallocate a floating IP from a project.
|
||||||
@ -6089,7 +6108,7 @@ class OpenStackCloud(
|
|||||||
with _utils.shade_exceptions("Error in creating instance"):
|
with _utils.shade_exceptions("Error in creating instance"):
|
||||||
data = self._compute_client.post(
|
data = self._compute_client.post(
|
||||||
endpoint, json={'server': kwargs})
|
endpoint, json={'server': kwargs})
|
||||||
server = meta.get_and_munchify('server', data)
|
server = self._get_and_munchify('server', data)
|
||||||
admin_pass = server.get('adminPass') or kwargs.get('admin_pass')
|
admin_pass = server.get('adminPass') or kwargs.get('admin_pass')
|
||||||
if not wait:
|
if not wait:
|
||||||
# This is a direct get call to skip the list_servers
|
# This is a direct get call to skip the list_servers
|
||||||
@ -6211,7 +6230,7 @@ class OpenStackCloud(
|
|||||||
'/servers/{server_id}/action'.format(server_id=server_id),
|
'/servers/{server_id}/action'.format(server_id=server_id),
|
||||||
error_message="Error in rebuilding instance",
|
error_message="Error in rebuilding instance",
|
||||||
json={'rebuild': kwargs})
|
json={'rebuild': kwargs})
|
||||||
server = meta.get_and_munchify('server', data)
|
server = self._get_and_munchify('server', data)
|
||||||
if not wait:
|
if not wait:
|
||||||
return self._expand_server(
|
return self._expand_server(
|
||||||
self._normalize_server(server), bare=bare, detailed=detailed)
|
self._normalize_server(server), bare=bare, detailed=detailed)
|
||||||
@ -6421,7 +6440,7 @@ class OpenStackCloud(
|
|||||||
error_message="Error updating server {0}".format(name_or_id),
|
error_message="Error updating server {0}".format(name_or_id),
|
||||||
json={'server': kwargs})
|
json={'server': kwargs})
|
||||||
server = self._normalize_server(
|
server = self._normalize_server(
|
||||||
meta.get_and_munchify('server', data))
|
self._get_and_munchify('server', data))
|
||||||
return self._expand_server(server, bare=bare, detailed=detailed)
|
return self._expand_server(server, bare=bare, detailed=detailed)
|
||||||
|
|
||||||
def create_server_group(self, name, policies):
|
def create_server_group(self, name, policies):
|
||||||
@ -6434,7 +6453,7 @@ class OpenStackCloud(
|
|||||||
|
|
||||||
:raises: OpenStackCloudException on operation error.
|
:raises: OpenStackCloudException on operation error.
|
||||||
"""
|
"""
|
||||||
return self._compute_client.post(
|
data = self._compute_client.post(
|
||||||
'/os-server-groups',
|
'/os-server-groups',
|
||||||
json={
|
json={
|
||||||
'server_group': {
|
'server_group': {
|
||||||
@ -6442,6 +6461,7 @@ class OpenStackCloud(
|
|||||||
'policies': policies}},
|
'policies': policies}},
|
||||||
error_message="Unable to create server group {name}".format(
|
error_message="Unable to create server group {name}".format(
|
||||||
name=name))
|
name=name))
|
||||||
|
return self._get_and_munchify('server_group', data)
|
||||||
|
|
||||||
def delete_server_group(self, name_or_id):
|
def delete_server_group(self, name_or_id):
|
||||||
"""Delete a server group.
|
"""Delete a server group.
|
||||||
@ -7083,7 +7103,7 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.post("/subnets.json",
|
data = self._network_client.post("/subnets.json",
|
||||||
json={"subnet": subnet})
|
json={"subnet": subnet})
|
||||||
|
|
||||||
return meta.get_and_munchify('subnet', data)
|
return self._get_and_munchify('subnet', data)
|
||||||
|
|
||||||
def delete_subnet(self, name_or_id):
|
def delete_subnet(self, name_or_id):
|
||||||
"""Delete a subnet.
|
"""Delete a subnet.
|
||||||
@ -7192,7 +7212,7 @@ class OpenStackCloud(
|
|||||||
data = self._network_client.put(
|
data = self._network_client.put(
|
||||||
"/subnets/{subnet_id}.json".format(subnet_id=curr_subnet['id']),
|
"/subnets/{subnet_id}.json".format(subnet_id=curr_subnet['id']),
|
||||||
json={"subnet": subnet})
|
json={"subnet": subnet})
|
||||||
return meta.get_and_munchify('subnet', data)
|
return self._get_and_munchify('subnet', data)
|
||||||
|
|
||||||
@_utils.valid_kwargs('name', 'admin_state_up', 'mac_address', 'fixed_ips',
|
@_utils.valid_kwargs('name', 'admin_state_up', 'mac_address', 'fixed_ips',
|
||||||
'subnet_id', 'ip_address', 'security_groups',
|
'subnet_id', 'ip_address', 'security_groups',
|
||||||
@ -7257,7 +7277,7 @@ class OpenStackCloud(
|
|||||||
"/ports.json", json={'port': kwargs},
|
"/ports.json", json={'port': kwargs},
|
||||||
error_message="Error creating port for network {0}".format(
|
error_message="Error creating port for network {0}".format(
|
||||||
network_id))
|
network_id))
|
||||||
return meta.get_and_munchify('port', data)
|
return self._get_and_munchify('port', data)
|
||||||
|
|
||||||
@_utils.valid_kwargs('name', 'admin_state_up', 'fixed_ips',
|
@_utils.valid_kwargs('name', 'admin_state_up', 'fixed_ips',
|
||||||
'security_groups', 'allowed_address_pairs',
|
'security_groups', 'allowed_address_pairs',
|
||||||
@ -7321,7 +7341,7 @@ class OpenStackCloud(
|
|||||||
"/ports/{port_id}.json".format(port_id=port['id']),
|
"/ports/{port_id}.json".format(port_id=port['id']),
|
||||||
json={"port": kwargs},
|
json={"port": kwargs},
|
||||||
error_message="Error updating port {0}".format(name_or_id))
|
error_message="Error updating port {0}".format(name_or_id))
|
||||||
return meta.get_and_munchify('port', data)
|
return self._get_and_munchify('port', data)
|
||||||
|
|
||||||
def delete_port(self, name_or_id):
|
def delete_port(self, name_or_id):
|
||||||
"""Delete a port
|
"""Delete a port
|
||||||
@ -7380,7 +7400,7 @@ class OpenStackCloud(
|
|||||||
data = self._compute_client.post(
|
data = self._compute_client.post(
|
||||||
'/os-security-groups', json=security_group_json)
|
'/os-security-groups', json=security_group_json)
|
||||||
return self._normalize_secgroup(
|
return self._normalize_secgroup(
|
||||||
meta.get_and_munchify('security_group', data))
|
self._get_and_munchify('security_group', data))
|
||||||
|
|
||||||
def delete_security_group(self, name_or_id):
|
def delete_security_group(self, name_or_id):
|
||||||
"""Delete a security group
|
"""Delete a security group
|
||||||
@ -7457,7 +7477,7 @@ class OpenStackCloud(
|
|||||||
'/os-security-groups/{id}'.format(id=group['id']),
|
'/os-security-groups/{id}'.format(id=group['id']),
|
||||||
json={'security-group': kwargs})
|
json={'security-group': kwargs})
|
||||||
return self._normalize_secgroup(
|
return self._normalize_secgroup(
|
||||||
meta.get_and_munchify('security_group', data))
|
self._get_and_munchify('security_group', data))
|
||||||
|
|
||||||
def create_security_group_rule(self,
|
def create_security_group_rule(self,
|
||||||
secgroup_name_or_id,
|
secgroup_name_or_id,
|
||||||
@ -7591,7 +7611,7 @@ class OpenStackCloud(
|
|||||||
'/os-security-group-rules', json=security_group_rule_dict
|
'/os-security-group-rules', json=security_group_rule_dict
|
||||||
)
|
)
|
||||||
return self._normalize_secgroup_rule(
|
return self._normalize_secgroup_rule(
|
||||||
meta.get_and_munchify('security_group_rule', data))
|
self._get_and_munchify('security_group_rule', data))
|
||||||
|
|
||||||
def delete_security_group_rule(self, rule_id):
|
def delete_security_group_rule(self, rule_id):
|
||||||
"""Delete a security group rule
|
"""Delete a security group rule
|
||||||
@ -7634,7 +7654,7 @@ class OpenStackCloud(
|
|||||||
data = self._dns_client.get(
|
data = self._dns_client.get(
|
||||||
"/zones",
|
"/zones",
|
||||||
error_message="Error fetching zones list")
|
error_message="Error fetching zones list")
|
||||||
return meta.get_and_munchify('zones', data)
|
return self._get_and_munchify('zones', data)
|
||||||
|
|
||||||
def get_zone(self, name_or_id, filters=None):
|
def get_zone(self, name_or_id, filters=None):
|
||||||
"""Get a zone by name or ID.
|
"""Get a zone by name or ID.
|
||||||
@ -7699,7 +7719,7 @@ class OpenStackCloud(
|
|||||||
data = self._dns_client.post(
|
data = self._dns_client.post(
|
||||||
"/zones", json=zone,
|
"/zones", json=zone,
|
||||||
error_message="Unable to create zone {name}".format(name=name))
|
error_message="Unable to create zone {name}".format(name=name))
|
||||||
return meta.get_and_munchify(key=None, data=data)
|
return self._get_and_munchify(key=None, data=data)
|
||||||
|
|
||||||
@_utils.valid_kwargs('email', 'description', 'ttl', 'masters')
|
@_utils.valid_kwargs('email', 'description', 'ttl', 'masters')
|
||||||
def update_zone(self, name_or_id, **kwargs):
|
def update_zone(self, name_or_id, **kwargs):
|
||||||
@ -7725,7 +7745,7 @@ class OpenStackCloud(
|
|||||||
data = self._dns_client.patch(
|
data = self._dns_client.patch(
|
||||||
"/zones/{zone_id}".format(zone_id=zone['id']), json=kwargs,
|
"/zones/{zone_id}".format(zone_id=zone['id']), json=kwargs,
|
||||||
error_message="Error updating zone {0}".format(name_or_id))
|
error_message="Error updating zone {0}".format(name_or_id))
|
||||||
return meta.get_and_munchify(key=None, data=data)
|
return self._get_and_munchify(key=None, data=data)
|
||||||
|
|
||||||
def delete_zone(self, name_or_id):
|
def delete_zone(self, name_or_id):
|
||||||
"""Delete a zone.
|
"""Delete a zone.
|
||||||
@ -7897,7 +7917,7 @@ class OpenStackCloud(
|
|||||||
data = self._container_infra_client.get(
|
data = self._container_infra_client.get(
|
||||||
'/baymodels/detail')
|
'/baymodels/detail')
|
||||||
return self._normalize_cluster_templates(
|
return self._normalize_cluster_templates(
|
||||||
meta.get_and_munchify('baymodels', data))
|
self._get_and_munchify('baymodels', data))
|
||||||
list_baymodels = list_cluster_templates
|
list_baymodels = list_cluster_templates
|
||||||
|
|
||||||
def search_cluster_templates(
|
def search_cluster_templates(
|
||||||
|
@ -1817,9 +1817,10 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
|
|||||||
:returns: A list of hypervisor ``munch.Munch``.
|
:returns: A list of hypervisor ``munch.Munch``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return self._compute_client.get(
|
data = self._compute_client.get(
|
||||||
'/os-hypervisors/detail',
|
'/os-hypervisors/detail',
|
||||||
error_message="Error fetching hypervisor list")
|
error_message="Error fetching hypervisor list")
|
||||||
|
return meta.get_and_munchify('hypervisors', data)
|
||||||
|
|
||||||
def search_aggregates(self, name_or_id=None, filters=None):
|
def search_aggregates(self, name_or_id=None, filters=None):
|
||||||
"""Seach host aggregates.
|
"""Seach host aggregates.
|
||||||
@ -2101,8 +2102,9 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
|
|||||||
proj = self.get_project(name_or_id)
|
proj = self.get_project(name_or_id)
|
||||||
if not proj:
|
if not proj:
|
||||||
raise OpenStackCloudException("project does not exist")
|
raise OpenStackCloudException("project does not exist")
|
||||||
return self._compute_client.get(
|
data = self._compute_client.get(
|
||||||
'/os-quota-sets/{project}'.format(project=proj.id))
|
'/os-quota-sets/{project}'.format(project=proj.id))
|
||||||
|
return meta.get_and_munchify('quota_set', data)
|
||||||
|
|
||||||
def delete_compute_quotas(self, name_or_id):
|
def delete_compute_quotas(self, name_or_id):
|
||||||
""" Delete quota for a project
|
""" Delete quota for a project
|
||||||
@ -2174,13 +2176,13 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
|
|||||||
raise OpenStackCloudException("project does not exist: {}".format(
|
raise OpenStackCloudException("project does not exist: {}".format(
|
||||||
name=proj.id))
|
name=proj.id))
|
||||||
|
|
||||||
usage = self._compute_client.get(
|
data = self._compute_client.get(
|
||||||
'/os-simple-tenant-usage/{project}'.format(project=proj.id),
|
'/os-simple-tenant-usage/{project}'.format(project=proj.id),
|
||||||
params=dict(start=start.isoformat(), end=end.isoformat()),
|
params=dict(start=start.isoformat(), end=end.isoformat()),
|
||||||
error_message="Unable to get usage for project: {name}".format(
|
error_message="Unable to get usage for project: {name}".format(
|
||||||
name=proj.id))
|
name=proj.id))
|
||||||
|
return self._normalize_compute_usage(
|
||||||
return self._normalize_compute_usage(usage)
|
meta.get_and_munchify('tenant_usage', data))
|
||||||
|
|
||||||
def set_volume_quotas(self, name_or_id, **kwargs):
|
def set_volume_quotas(self, name_or_id, **kwargs):
|
||||||
""" Set a volume quota in a project
|
""" Set a volume quota in a project
|
||||||
@ -2214,9 +2216,10 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
|
|||||||
if not proj:
|
if not proj:
|
||||||
raise OpenStackCloudException("project does not exist")
|
raise OpenStackCloudException("project does not exist")
|
||||||
|
|
||||||
return self._volume_client.get(
|
data = self._volume_client.get(
|
||||||
'/os-quota-sets/{tenant_id}'.format(tenant_id=proj.id),
|
'/os-quota-sets/{tenant_id}'.format(tenant_id=proj.id),
|
||||||
error_message="cinder client call failed")
|
error_message="cinder client call failed")
|
||||||
|
return meta.get_and_munchify('quota_set', data)
|
||||||
|
|
||||||
def delete_volume_quotas(self, name_or_id):
|
def delete_volume_quotas(self, name_or_id):
|
||||||
""" Delete volume quotas for a project
|
""" Delete volume quotas for a project
|
||||||
@ -2266,10 +2269,11 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
|
|||||||
proj = self.get_project(name_or_id)
|
proj = self.get_project(name_or_id)
|
||||||
if not proj:
|
if not proj:
|
||||||
raise OpenStackCloudException("project does not exist")
|
raise OpenStackCloudException("project does not exist")
|
||||||
return self._network_client.get(
|
data = self._network_client.get(
|
||||||
'/quotas/{project_id}.json'.format(project_id=proj.id),
|
'/quotas/{project_id}.json'.format(project_id=proj.id),
|
||||||
error_message=("Error fetching Neutron's quota for "
|
error_message=("Error fetching Neutron's quota for "
|
||||||
"project {0}".format(proj.id)))
|
"project {0}".format(proj.id)))
|
||||||
|
return meta.get_and_munchify('quota', data)
|
||||||
|
|
||||||
def delete_network_quotas(self, name_or_id):
|
def delete_network_quotas(self, name_or_id):
|
||||||
""" Delete network quotas for a project
|
""" Delete network quotas for a project
|
||||||
@ -2295,5 +2299,6 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
|
|||||||
:raises: OpenStackCloudException on operation error.
|
:raises: OpenStackCloudException on operation error.
|
||||||
"""
|
"""
|
||||||
with _utils.shade_exceptions("Error fetching Magnum services list"):
|
with _utils.shade_exceptions("Error fetching Magnum services list"):
|
||||||
|
data = self._container_infra_client.get('/mservices')
|
||||||
return self._normalize_magnum_services(
|
return self._normalize_magnum_services(
|
||||||
self._container_infra_client.get('/mservices'))
|
meta.get_and_munchify('mservices', data))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user