cloud: Replace use of aliased exceptions
Change-Id: I273e7554af766b15deb5ac8f38a6793b119a3bb9 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
parent
e2940efea6
commit
621b561c6c
@ -17,7 +17,7 @@ import warnings
|
||||
import jsonpatch
|
||||
|
||||
from openstack.baremetal.v1._proxy import Proxy
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack import warnings as os_warnings
|
||||
|
||||
|
||||
@ -86,7 +86,7 @@ class BaremetalCloudMixin:
|
||||
"""
|
||||
try:
|
||||
return self.baremetal.find_node(name_or_id, ignore_missing=False)
|
||||
except exc.OpenStackCloudResourceNotFound:
|
||||
except exceptions.NotFoundException:
|
||||
return None
|
||||
|
||||
def get_machine_by_mac(self, mac):
|
||||
@ -130,7 +130,7 @@ class BaremetalCloudMixin:
|
||||
# we need to move the machine back to manageable first.
|
||||
if node.provision_state == 'available':
|
||||
if node.instance_id:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Refusing to inspect available machine %(node)s "
|
||||
"which is associated with an instance "
|
||||
"(instance_uuid %(inst)s)"
|
||||
@ -146,7 +146,7 @@ class BaremetalCloudMixin:
|
||||
)
|
||||
|
||||
if node.provision_state not in ('manageable', 'inspect failed'):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Machine %(node)s must be in 'manageable', 'inspect failed' "
|
||||
"or 'available' provision state to start inspection, the "
|
||||
"current state is %(state)s"
|
||||
@ -215,29 +215,24 @@ class BaremetalCloudMixin:
|
||||
]
|
||||
|
||||
Alternatively, you can provide an array of MAC addresses.
|
||||
|
||||
:param wait: Boolean value, defaulting to false, to wait for the node
|
||||
to reach the available state where the node can be provisioned. It
|
||||
must be noted, when set to false, the method will still wait for
|
||||
locks to clear before sending the next required command.
|
||||
|
||||
:param timeout: Integer value, defautling to 3600 seconds, for the wait
|
||||
state to reach completion.
|
||||
|
||||
:param lock_timeout: Integer value, defaulting to 600 seconds, for
|
||||
locks to clear.
|
||||
|
||||
:param provision_state: The expected provision state, one of "enroll"
|
||||
"manageable" or "available". Using "available" results in automated
|
||||
cleaning.
|
||||
|
||||
:param kwargs: Key value pairs to be passed to the Ironic API,
|
||||
including uuid, name, chassis_uuid, driver_info, properties.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:rtype: :class:`~openstack.baremetal.v1.node.Node`.
|
||||
:returns: Current state of the node.
|
||||
:rtype: :class:`~openstack.baremetal.v1.node.Node`.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if provision_state not in ('enroll', 'manageable', 'available'):
|
||||
raise ValueError(
|
||||
@ -301,14 +296,13 @@ class BaremetalCloudMixin:
|
||||
:param nics: An array of strings that consist of MAC addresses
|
||||
to be removed.
|
||||
:param string uuid: The UUID of the node to be deleted.
|
||||
|
||||
:param wait: DEPRECATED, do not use.
|
||||
|
||||
:param timeout: Integer value, representing seconds with a default
|
||||
value of 600, which controls the maximum amount of time to block
|
||||
until a lock is released on machine.
|
||||
|
||||
:raises: OpenStackCloudException on operation failure.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
failure.
|
||||
"""
|
||||
if wait is not None:
|
||||
warnings.warn(
|
||||
@ -319,7 +313,7 @@ class BaremetalCloudMixin:
|
||||
machine = self.get_machine(uuid)
|
||||
invalid_states = ['active', 'cleaning', 'clean wait', 'clean failed']
|
||||
if machine['provision_state'] in invalid_states:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Error unregistering node '%s' due to current provision "
|
||||
"state '%s'" % (uuid, machine['provision_state'])
|
||||
)
|
||||
@ -330,8 +324,8 @@ class BaremetalCloudMixin:
|
||||
# failure, and resubitted the request in python-ironicclient.
|
||||
try:
|
||||
self.baremetal.wait_for_node_reservation(machine, timeout)
|
||||
except exc.OpenStackCloudException as e:
|
||||
raise exc.OpenStackCloudException(
|
||||
except exceptions.SDKException as e:
|
||||
raise exceptions.SDKException(
|
||||
"Error unregistering node '%s': Exception occured while"
|
||||
" waiting to be able to proceed: %s" % (machine['uuid'], e)
|
||||
)
|
||||
@ -375,10 +369,10 @@ class BaremetalCloudMixin:
|
||||
'value': 'administrator'
|
||||
})
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:returns: Current state of the node.
|
||||
:rtype: :class:`~openstack.baremetal.v1.node.Node`.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return self.baremetal.patch_node(name_or_id, patch)
|
||||
|
||||
@ -391,16 +385,16 @@ class BaremetalCloudMixin:
|
||||
:param string name_or_id: A machine name or UUID to be updated.
|
||||
:param attrs: Attributes to updated on the machine.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:returns: Dictionary containing a machine sub-dictonary consisting
|
||||
of the updated data returned from the API update operation, and a
|
||||
list named changes which contains all of the API paths that
|
||||
received updates.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
machine = self.get_machine(name_or_id)
|
||||
if not machine:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Machine update failed to find Machine: %s. " % name_or_id
|
||||
)
|
||||
|
||||
@ -411,7 +405,7 @@ class BaremetalCloudMixin:
|
||||
machine._to_munch(), new_config
|
||||
)
|
||||
except Exception as e:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Machine update failed - Error generating JSON patch object "
|
||||
"for submission to the API. Machine: %s Error: %s"
|
||||
% (name_or_id, e)
|
||||
@ -504,10 +498,10 @@ class BaremetalCloudMixin:
|
||||
representing the amount of time to wait for the desire end state to
|
||||
be reached.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:returns: Current state of the machine upon exit of the method.
|
||||
:rtype: :class:`~openstack.baremetal.v1.node.Node`.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
node = self.baremetal.set_node_provision_state(
|
||||
name_or_id,
|
||||
@ -534,9 +528,9 @@ class BaremetalCloudMixin:
|
||||
the baremetal API to allow for notation as to why the node is in
|
||||
maintenance state.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:returns: None
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if state:
|
||||
self.baremetal.set_node_maintenance(name_or_id, reason)
|
||||
@ -554,9 +548,9 @@ class BaremetalCloudMixin:
|
||||
:param string name_or_id: The Name or UUID value representing the
|
||||
baremetal node.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:returns: None
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
self.baremetal.unset_node_maintenance(name_or_id)
|
||||
|
||||
@ -568,9 +562,9 @@ class BaremetalCloudMixin:
|
||||
:params string name_or_id: A string representing the baremetal
|
||||
node to have power turned to an "on" state.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:returns: None
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
self.baremetal.set_node_power_state(name_or_id, 'power on')
|
||||
|
||||
@ -582,9 +576,9 @@ class BaremetalCloudMixin:
|
||||
:params string name_or_id: A string representing the baremetal
|
||||
node to have power turned to an "off" state.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:returns:
|
||||
:returns: None
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
self.baremetal.set_node_power_state(name_or_id, 'power off')
|
||||
|
||||
@ -598,9 +592,9 @@ class BaremetalCloudMixin:
|
||||
:params string name_or_id: A string representing the baremetal
|
||||
node to have power turned to an "off" state.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:returns: None
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
self.baremetal.set_node_power_state(name_or_id, 'rebooting')
|
||||
|
||||
@ -637,7 +631,8 @@ class BaremetalCloudMixin:
|
||||
|
||||
DEPRECATED, use ``wait_for_node_reservation`` on the `baremetal` proxy.
|
||||
|
||||
:raises: OpenStackCloudException upon client failure.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` upon client
|
||||
failure.
|
||||
:returns: None
|
||||
"""
|
||||
warnings.warn(
|
||||
|
@ -15,7 +15,6 @@ import warnings
|
||||
from openstack.block_storage.v3._proxy import Proxy
|
||||
from openstack.block_storage.v3 import quota_set as _qs
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack import warnings as os_warnings
|
||||
|
||||
@ -134,9 +133,12 @@ class BlockStorageCloudMixin:
|
||||
:param bootable: (optional) Make this volume bootable. If set, wait
|
||||
will also be set to true.
|
||||
:param kwargs: Keyword arguments as expected for cinder client.
|
||||
|
||||
:returns: The created volume ``Volume`` object.
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if bootable is not None:
|
||||
wait = True
|
||||
@ -144,7 +146,7 @@ class BlockStorageCloudMixin:
|
||||
if image:
|
||||
image_obj = self.get_image(image)
|
||||
if not image_obj:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Image {image} was requested as the basis for a new"
|
||||
" volume, but was not found on the cloud".format(
|
||||
image=image
|
||||
@ -157,7 +159,7 @@ class BlockStorageCloudMixin:
|
||||
volume = self.block_storage.create_volume(**kwargs)
|
||||
|
||||
if volume['status'] == 'error':
|
||||
raise exc.OpenStackCloudException("Error in creating volume")
|
||||
raise exceptions.SDKException("Error in creating volume")
|
||||
|
||||
if wait:
|
||||
self.block_storage.wait_for_status(volume, wait=timeout)
|
||||
@ -177,9 +179,7 @@ class BlockStorageCloudMixin:
|
||||
|
||||
volume = self.get_volume(name_or_id)
|
||||
if not volume:
|
||||
raise exc.OpenStackCloudException(
|
||||
"Volume %s not found." % name_or_id
|
||||
)
|
||||
raise exceptions.SDKException("Volume %s not found." % name_or_id)
|
||||
|
||||
volume = self.block_storage.update_volume(volume, **kwargs)
|
||||
|
||||
@ -192,15 +192,17 @@ class BlockStorageCloudMixin:
|
||||
:param bool bootable: Whether the volume should be bootable.
|
||||
(Defaults to True)
|
||||
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:returns: None
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
volume = self.get_volume(name_or_id)
|
||||
|
||||
if not volume:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Volume {name_or_id} does not exist".format(
|
||||
name_or_id=name_or_id
|
||||
)
|
||||
@ -222,9 +224,12 @@ class BlockStorageCloudMixin:
|
||||
:param timeout: Seconds to wait for volume deletion. None is forever.
|
||||
:param force: Force delete volume even if the volume is in deleting
|
||||
or error_deleting state.
|
||||
|
||||
:returns: True if deletion was successful, else False.
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
volume = self.block_storage.find_volume(name_or_id)
|
||||
|
||||
@ -272,7 +277,7 @@ class BlockStorageCloudMixin:
|
||||
if name_or_id:
|
||||
project = self.get_project(name_or_id)
|
||||
if not project:
|
||||
raise exc.OpenStackCloudException("project does not exist")
|
||||
raise exceptions.SDKException("project does not exist")
|
||||
params['project'] = project
|
||||
return self.block_storage.get_limits(**params)
|
||||
|
||||
@ -317,9 +322,12 @@ class BlockStorageCloudMixin:
|
||||
:param volume: The volume dict to detach.
|
||||
:param wait: If true, waits for volume to be detached.
|
||||
:param timeout: Seconds to wait for volume detachment. None is forever.
|
||||
|
||||
:returns: None
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
self.compute.delete_volume_attachment(
|
||||
server=server['id'],
|
||||
@ -354,19 +362,22 @@ class BlockStorageCloudMixin:
|
||||
:param device: The device name where the volume will attach.
|
||||
:param wait: If true, waits for volume to be attached.
|
||||
:param timeout: Seconds to wait for volume attachment. None is forever.
|
||||
|
||||
:returns: a volume attachment object.
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
dev = self.get_volume_attach_device(volume, server['id'])
|
||||
if dev:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Volume %s already attached to server %s on device %s"
|
||||
% (volume['id'], server['id'], dev)
|
||||
)
|
||||
|
||||
if volume['status'] != 'available':
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Volume %s is not available. Status is '%s'"
|
||||
% (volume['id'], volume['status'])
|
||||
)
|
||||
@ -422,9 +433,12 @@ class BlockStorageCloudMixin:
|
||||
:param wait: If true, waits for volume snapshot to be created.
|
||||
:param timeout: Seconds to wait for volume snapshot creation. None is
|
||||
forever.
|
||||
|
||||
:returns: The created volume ``Snapshot`` object.
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
kwargs = self._get_volume_kwargs(kwargs)
|
||||
payload = {'volume_id': volume_id, 'force': force}
|
||||
@ -500,9 +514,12 @@ class BlockStorageCloudMixin:
|
||||
forever.
|
||||
:param incremental: If set to true, the backup will be incremental.
|
||||
:param snapshot_id: The UUID of the source snapshot to back up.
|
||||
|
||||
:returns: The created volume ``Backup`` object.
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
payload = {
|
||||
'name': name,
|
||||
@ -596,12 +613,14 @@ class BlockStorageCloudMixin:
|
||||
:param force: Allow delete in state other than error or available.
|
||||
:param wait: If true, waits for volume backup to be deleted.
|
||||
:param timeout: Seconds to wait for volume backup deletion. None is
|
||||
forever.
|
||||
:returns: True if deletion was successful, else False.
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
"""
|
||||
forever.
|
||||
|
||||
:returns: True if deletion was successful, else False.
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
volume_backup = self.get_volume_backup(name_or_id)
|
||||
|
||||
if not volume_backup:
|
||||
@ -627,9 +646,12 @@ class BlockStorageCloudMixin:
|
||||
:param wait: If true, waits for volume snapshot to be deleted.
|
||||
:param timeout: Seconds to wait for volume snapshot deletion. None is
|
||||
forever.
|
||||
|
||||
:returns: True if deletion was successful, else False.
|
||||
:raises: OpenStackCloudTimeout if wait time exceeded.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||
exceeded.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
volumesnapshot = self.get_volume_snapshot(name_or_id)
|
||||
|
||||
@ -764,11 +786,12 @@ class BlockStorageCloudMixin:
|
||||
|
||||
:param name_or_id: Name or unique ID of the volume type.
|
||||
:returns: A volume ``Type`` object if found, else None.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
volume_type = self.get_volume_type(name_or_id)
|
||||
if not volume_type:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"VolumeType not found: %s" % name_or_id
|
||||
)
|
||||
|
||||
@ -781,12 +804,14 @@ class BlockStorageCloudMixin:
|
||||
|
||||
:param name_or_id: ID or name of a volume_type
|
||||
:param project_id: A project id
|
||||
|
||||
:returns: None
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
volume_type = self.get_volume_type(name_or_id)
|
||||
if not volume_type:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"VolumeType not found: %s" % name_or_id
|
||||
)
|
||||
|
||||
@ -797,12 +822,14 @@ class BlockStorageCloudMixin:
|
||||
|
||||
:param name_or_id: ID or name of a volume_type
|
||||
:param project_id: A project id
|
||||
|
||||
:returns: None
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
volume_type = self.get_volume_type(name_or_id)
|
||||
if not volume_type:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"VolumeType not found: %s" % name_or_id
|
||||
)
|
||||
self.block_storage.remove_type_access(volume_type, project_id)
|
||||
@ -812,9 +839,10 @@ class BlockStorageCloudMixin:
|
||||
|
||||
:param name_or_id: project name or id
|
||||
:param kwargs: key/value pairs of quota name and quota value
|
||||
|
||||
:returns: None
|
||||
:raises: OpenStackCloudException if the resource to set the
|
||||
quota does not exist.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the resource to
|
||||
set the quota does not exist.
|
||||
"""
|
||||
|
||||
proj = self.identity.find_project(name_or_id, ignore_missing=False)
|
||||
@ -827,8 +855,10 @@ class BlockStorageCloudMixin:
|
||||
"""Get volume quotas for a project
|
||||
|
||||
:param name_or_id: project name or id
|
||||
|
||||
:returns: A volume ``QuotaSet`` object with the quotas
|
||||
:raises: OpenStackCloudException if it's not a valid project
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if it's not a
|
||||
valid project
|
||||
"""
|
||||
proj = self.identity.find_project(name_or_id, ignore_missing=False)
|
||||
|
||||
@ -838,9 +868,10 @@ class BlockStorageCloudMixin:
|
||||
"""Delete volume quotas for a project
|
||||
|
||||
:param name_or_id: project name or id
|
||||
|
||||
:returns: The deleted volume ``QuotaSet`` object.
|
||||
:raises: OpenStackCloudException if it's not a valid project or the
|
||||
call failed
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if it's not a
|
||||
valid project or the call failed
|
||||
"""
|
||||
proj = self.identity.find_project(name_or_id, ignore_missing=False)
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
|
||||
|
||||
class CoeCloudMixin:
|
||||
@ -20,8 +20,8 @@ class CoeCloudMixin:
|
||||
|
||||
:returns: A list of container infrastructure management ``Cluster``
|
||||
objects.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(self.container_infrastructure_management.clusters())
|
||||
|
||||
@ -35,8 +35,8 @@ class CoeCloudMixin:
|
||||
|
||||
:returns: A list of container infrastructure management ``Cluster``
|
||||
objects.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
coe_clusters = self.list_coe_clusters()
|
||||
return _utils._filter_list(coe_clusters, name_or_id, filters)
|
||||
@ -77,11 +77,10 @@ class CoeCloudMixin:
|
||||
:param string cluster_template_id: ID of the cluster template to use.
|
||||
:param dict kwargs: Any other arguments to pass in.
|
||||
|
||||
:returns: a dict containing the cluster description
|
||||
:returns: The created container infrastructure management ``Cluster``
|
||||
object.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
cluster = self.container_infrastructure_management.create_cluster(
|
||||
name=name,
|
||||
@ -95,10 +94,11 @@ class CoeCloudMixin:
|
||||
"""Delete a COE cluster.
|
||||
|
||||
:param name_or_id: Name or unique ID of the cluster.
|
||||
|
||||
:returns: True if the delete succeeded, False if the
|
||||
cluster was not found.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
cluster = self.get_coe_cluster(name_or_id)
|
||||
@ -122,11 +122,12 @@ class CoeCloudMixin:
|
||||
|
||||
:returns: The updated cluster ``Cluster`` object.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
cluster = self.get_coe_cluster(name_or_id)
|
||||
if not cluster:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"COE cluster %s not found." % name_or_id
|
||||
)
|
||||
|
||||
@ -158,8 +159,8 @@ class CoeCloudMixin:
|
||||
certificate that client will use to communicate with the cluster.
|
||||
|
||||
:returns: a dict representing the signed certs.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return self.container_infrastructure_management.create_cluster_certificate( # noqa: E501
|
||||
cluster_uuid=cluster_id, csr=csr
|
||||
@ -172,9 +173,8 @@ class CoeCloudMixin:
|
||||
ClusterTemplates are always returned with full details.
|
||||
|
||||
:returns: a list of dicts containing the cluster template details.
|
||||
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(
|
||||
self.container_infrastructure_management.cluster_templates()
|
||||
@ -191,9 +191,8 @@ class CoeCloudMixin:
|
||||
detailed output.
|
||||
|
||||
:returns: a list of dict containing the cluster templates
|
||||
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException`: if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
cluster_templates = self.list_cluster_templates(detail=detail)
|
||||
return _utils._filter_list(cluster_templates, name_or_id, filters)
|
||||
@ -240,9 +239,8 @@ class CoeCloudMixin:
|
||||
Other arguments will be passed in kwargs.
|
||||
|
||||
:returns: a dict containing the cluster template description
|
||||
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
cluster_template = (
|
||||
self.container_infrastructure_management.create_cluster_template(
|
||||
@ -260,10 +258,11 @@ class CoeCloudMixin:
|
||||
"""Delete a cluster template.
|
||||
|
||||
:param name_or_id: Name or unique ID of the cluster template.
|
||||
|
||||
:returns: True if the delete succeeded, False if the
|
||||
cluster template was not found.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
cluster_template = self.get_cluster_template(name_or_id)
|
||||
@ -287,12 +286,12 @@ class CoeCloudMixin:
|
||||
:param name_or_id: Name or ID of the cluster template being updated.
|
||||
|
||||
:returns: an update cluster template.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
cluster_template = self.get_cluster_template(name_or_id)
|
||||
if not cluster_template:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Cluster template %s not found." % name_or_id
|
||||
)
|
||||
|
||||
@ -306,8 +305,9 @@ class CoeCloudMixin:
|
||||
|
||||
def list_magnum_services(self):
|
||||
"""List all Magnum services.
|
||||
:returns: a list of dicts containing the service details.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:returns: a list of dicts containing the service details.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return list(self.container_infrastructure_management.services())
|
||||
|
@ -99,8 +99,9 @@ class ComputeCloudMixin:
|
||||
:param string include: If given, will return a flavor whose name
|
||||
contains this string as a substring.
|
||||
:param get_extra:
|
||||
|
||||
:returns: A compute ``Flavor`` object.
|
||||
:raises: :class:`~openstack.exceptions.OpenStackCloudException` if no
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if no
|
||||
matching flavour could be found.
|
||||
"""
|
||||
flavors = self.list_flavors(get_extra=get_extra)
|
||||
@ -109,7 +110,7 @@ class ComputeCloudMixin:
|
||||
not include or include in flavor['name']
|
||||
):
|
||||
return flavor
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Could not find a flavor with {ram} and '{include}'".format(
|
||||
ram=ram, include=include
|
||||
)
|
||||
@ -175,10 +176,11 @@ class ComputeCloudMixin:
|
||||
|
||||
:param name_or_id: Name or unique ID of the server group(s).
|
||||
:param filters: A dict containing additional filters to use.
|
||||
|
||||
:returns: A list of compute ``ServerGroup`` objects matching the search
|
||||
criteria.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
server_groups = self.list_server_groups()
|
||||
return _utils._filter_list(server_groups, name_or_id, filters)
|
||||
@ -283,7 +285,8 @@ class ComputeCloudMixin:
|
||||
|
||||
:returns: False if server or security groups are undefined, True
|
||||
otherwise.
|
||||
:raises: ``OpenStackCloudException``, on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
server, security_groups = self._get_server_security_groups(
|
||||
server, security_groups
|
||||
@ -306,7 +309,8 @@ class ComputeCloudMixin:
|
||||
|
||||
:returns: False if server or security groups are undefined, True
|
||||
otherwise.
|
||||
:raises: ``OpenStackCloudException``, on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
server, security_groups = self._get_server_security_groups(
|
||||
server, security_groups
|
||||
@ -378,16 +382,18 @@ class ComputeCloudMixin:
|
||||
|
||||
:param name_or_id: (optional) project name or ID to get limits for
|
||||
if different from the current project
|
||||
:raises: OpenStackCloudException if it's not a valid project
|
||||
|
||||
:returns: A compute
|
||||
:class:`~openstack.compute.v2.limits.Limits.AbsoluteLimits` object.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if it's not a
|
||||
valid project
|
||||
"""
|
||||
params = {}
|
||||
project_id = None
|
||||
if name_or_id:
|
||||
proj = self.get_project(name_or_id)
|
||||
if not proj:
|
||||
raise exc.OpenStackCloudException("project does not exist")
|
||||
raise exceptions.SDKException("project does not exist")
|
||||
project_id = proj.id
|
||||
params['tenant_id'] = project_id
|
||||
return self.compute.get_limits(**params).absolute
|
||||
@ -468,21 +474,21 @@ class ComputeCloudMixin:
|
||||
|
||||
:returns: A string containing the text of the console log or an
|
||||
empty string if the cloud does not support console logs.
|
||||
:raises: OpenStackCloudException if an invalid server argument is given
|
||||
or if something else unforseen happens
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if an invalid
|
||||
server argument is given or if something else unforseen happens
|
||||
"""
|
||||
|
||||
if not isinstance(server, dict):
|
||||
server = self.get_server(server, bare=True)
|
||||
|
||||
if not server:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Console log requested for invalid server"
|
||||
)
|
||||
|
||||
try:
|
||||
return self._get_server_console_output(server['id'], length)
|
||||
except exc.OpenStackCloudBadRequest:
|
||||
except exceptions.BadRequestException:
|
||||
return ""
|
||||
|
||||
def _get_server_console_output(self, server_id, length=None):
|
||||
@ -582,8 +588,10 @@ class ComputeCloudMixin:
|
||||
|
||||
:param name: Name of the keypair being created.
|
||||
:param public_key: Public key for the new keypair.
|
||||
|
||||
:returns: The created compute ``Keypair`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
keypair = {
|
||||
'name': name,
|
||||
@ -598,8 +606,8 @@ class ComputeCloudMixin:
|
||||
:param name: Name of the keypair to delete.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
try:
|
||||
self.compute.delete_keypair(name, ignore_missing=False)
|
||||
@ -630,13 +638,15 @@ class ComputeCloudMixin:
|
||||
:param wait: If true, waits for image to be created.
|
||||
:param timeout: Seconds to wait for image creation. None is forever.
|
||||
:param metadata: Metadata to give newly-created image entity
|
||||
|
||||
:returns: The created image ``Image`` object.
|
||||
:raises: OpenStackCloudException if there are problems uploading
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if there are
|
||||
problems uploading
|
||||
"""
|
||||
if not isinstance(server, dict):
|
||||
server_obj = self.get_server(server, bare=True)
|
||||
if not server_obj:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Server {server} could not be found and therefore"
|
||||
" could not be snapshotted.".format(server=server)
|
||||
)
|
||||
@ -800,8 +810,10 @@ class ComputeCloudMixin:
|
||||
:param group: ServerGroup dict, name or id to boot the server in.
|
||||
If a group is provided in both scheduler_hints and in the group
|
||||
param, the group param will win. (Optional, defaults to None)
|
||||
|
||||
:returns: The created compute ``Server`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
# TODO(shade) Image is optional but flavor is not - yet flavor comes
|
||||
# after image in the argument list. Doh.
|
||||
@ -840,7 +852,7 @@ class ComputeCloudMixin:
|
||||
if group:
|
||||
group_obj = self.get_server_group(group)
|
||||
if not group_obj:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Server Group {group} was requested but was not found"
|
||||
" on the cloud".format(group=group)
|
||||
)
|
||||
@ -856,7 +868,7 @@ class ComputeCloudMixin:
|
||||
# Be nice and help the user out
|
||||
kwargs['nics'] = [kwargs['nics']]
|
||||
else:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'nics parameter to create_server takes a list of dicts.'
|
||||
' Got: {nics}'.format(nics=kwargs['nics'])
|
||||
)
|
||||
@ -871,7 +883,7 @@ class ComputeCloudMixin:
|
||||
else:
|
||||
network_obj = self.get_network(name_or_id=net_name)
|
||||
if not network_obj:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Network {network} is not a valid network in'
|
||||
' {cloud}:{region}'.format(
|
||||
network=network,
|
||||
@ -899,7 +911,7 @@ class ComputeCloudMixin:
|
||||
net_name = nic.pop('net-name')
|
||||
nic_net = self.get_network(net_name)
|
||||
if not nic_net:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Requested network {net} could not be found.".format(
|
||||
net=net_name
|
||||
)
|
||||
@ -908,7 +920,7 @@ class ComputeCloudMixin:
|
||||
for ip_key in ('v4-fixed-ip', 'v6-fixed-ip', 'fixed_ip'):
|
||||
fixed_ip = nic.pop(ip_key, None)
|
||||
if fixed_ip and net.get('fixed_ip'):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Only one of v4-fixed-ip, v6-fixed-ip or fixed_ip"
|
||||
" may be given"
|
||||
)
|
||||
@ -923,7 +935,7 @@ class ComputeCloudMixin:
|
||||
utils.require_microversion(self.compute, '2.42')
|
||||
net['tag'] = nic.pop('tag')
|
||||
if nic:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Additional unsupported keys given for server network"
|
||||
" creation: {keys}".format(keys=nic.keys())
|
||||
)
|
||||
@ -1018,7 +1030,7 @@ class ComputeCloudMixin:
|
||||
if boot_volume:
|
||||
volume = self.get_volume(boot_volume)
|
||||
if not volume:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Volume {boot_volume} is not a valid volume'
|
||||
' in {cloud}:{region}'.format(
|
||||
boot_volume=boot_volume,
|
||||
@ -1041,7 +1053,7 @@ class ComputeCloudMixin:
|
||||
else:
|
||||
image_obj = self.get_image(image)
|
||||
if not image_obj:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Image {image} is not a valid image in'
|
||||
' {cloud}:{region}'.format(
|
||||
image=image,
|
||||
@ -1074,7 +1086,7 @@ class ComputeCloudMixin:
|
||||
for volume in volumes:
|
||||
volume_obj = self.get_volume(volume)
|
||||
if not volume_obj:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Volume {volume} is not a valid volume'
|
||||
' in {cloud}:{region}'.format(
|
||||
volume=volume,
|
||||
@ -1126,7 +1138,7 @@ class ComputeCloudMixin:
|
||||
# and pass it down into the IP stack.
|
||||
remaining_timeout = timeout - int(time.time() - start_time)
|
||||
if remaining_timeout <= 0:
|
||||
raise exc.OpenStackCloudTimeout(timeout_message)
|
||||
raise exceptions.ResourceTimeout(timeout_message)
|
||||
|
||||
server = self.get_active_server(
|
||||
server=server,
|
||||
@ -1159,7 +1171,7 @@ class ComputeCloudMixin:
|
||||
and server['fault'] is not None
|
||||
and 'message' in server['fault']
|
||||
):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Error in creating the server."
|
||||
" Compute service reports fault: {reason}".format(
|
||||
reason=server['fault']['message']
|
||||
@ -1167,7 +1179,7 @@ class ComputeCloudMixin:
|
||||
extra_data=dict(server=server),
|
||||
)
|
||||
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Error in creating the server"
|
||||
" (no further information available)",
|
||||
extra_data=dict(server=server),
|
||||
@ -1195,13 +1207,13 @@ class ComputeCloudMixin:
|
||||
try:
|
||||
self._delete_server(server=server, wait=wait, timeout=timeout)
|
||||
except Exception as e:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Server reached ACTIVE state without being'
|
||||
' allocated an IP address AND then could not'
|
||||
' be deleted: {0}'.format(e),
|
||||
extra_data=dict(server=server),
|
||||
)
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Server reached ACTIVE state without being'
|
||||
' allocated an IP address.',
|
||||
extra_data=dict(server=server),
|
||||
@ -1253,12 +1265,14 @@ class ComputeCloudMixin:
|
||||
:param dict metadata: A dictionary with the key=value pairs
|
||||
to set in the server instance. It only updates the key=value pairs
|
||||
provided. Existing ones will remain untouched.
|
||||
|
||||
:returns: None
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
server = self.get_server(name_or_id, bare=True)
|
||||
if not server:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Invalid Server {server}'.format(server=name_or_id)
|
||||
)
|
||||
|
||||
@ -1271,12 +1285,14 @@ class ComputeCloudMixin:
|
||||
to update.
|
||||
:param metadata_keys: A list with the keys to be deleted
|
||||
from the server instance.
|
||||
|
||||
:returns: None
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
server = self.get_server(name_or_id, bare=True)
|
||||
if not server:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Invalid Server {server}'.format(server=name_or_id)
|
||||
)
|
||||
|
||||
@ -1301,9 +1317,11 @@ class ComputeCloudMixin:
|
||||
associated with the instance.
|
||||
:param int delete_ip_retry: Number of times to retry deleting
|
||||
any floating ips, should the first try be unsuccessful.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise if the
|
||||
server does not exist.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
# If delete_ips is True, we need the server to not be bare.
|
||||
server = self.compute.find_server(name_or_id, ignore_missing=True)
|
||||
@ -1332,7 +1350,7 @@ class ComputeCloudMixin:
|
||||
ip = self.get_floating_ip(
|
||||
id=None, filters={'floating_ip_address': fip['addr']}
|
||||
)
|
||||
except exc.OpenStackCloudURINotFound:
|
||||
except exceptions.NotFoundException:
|
||||
# We're deleting. If it doesn't exist - awesome
|
||||
# NOTE(mordred) If the cloud is a nova FIP cloud but
|
||||
# floating_ip_source is set to neutron, this
|
||||
@ -1342,7 +1360,7 @@ class ComputeCloudMixin:
|
||||
continue
|
||||
deleted = self.delete_floating_ip(ip['id'], retry=delete_ip_retry)
|
||||
if not deleted:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Tried to delete floating ip {floating_ip}"
|
||||
" associated with server {id} but there was"
|
||||
" an error deleting it. Not deleting server.".format(
|
||||
@ -1396,8 +1414,10 @@ class ComputeCloudMixin:
|
||||
detailed = False.
|
||||
:param name: New name for the server
|
||||
:param description: New description for the server
|
||||
|
||||
:returns: The updated compute ``Server`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
server = self.compute.find_server(name_or_id, ignore_missing=False)
|
||||
|
||||
@ -1410,8 +1430,10 @@ class ComputeCloudMixin:
|
||||
|
||||
:param name: Name of the server group being created
|
||||
:param policies: List of policies for the server group.
|
||||
|
||||
:returns: The created compute ``ServerGroup`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
sg_attrs = {'name': name}
|
||||
if policies:
|
||||
@ -1424,8 +1446,10 @@ class ComputeCloudMixin:
|
||||
"""Delete a server group.
|
||||
|
||||
:param name_or_id: Name or ID of the server group to delete
|
||||
|
||||
:returns: True if delete succeeded, False otherwise
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
server_group = self.get_server_group(name_or_id)
|
||||
if not server_group:
|
||||
@ -1462,8 +1486,10 @@ class ComputeCloudMixin:
|
||||
:param swap: Swap space in MB
|
||||
:param rxtx_factor: RX/TX factor
|
||||
:param is_public: Make flavor accessible to the public
|
||||
|
||||
:returns: The created compute ``Flavor`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
attrs = {
|
||||
'disk': disk,
|
||||
@ -1486,8 +1512,10 @@ class ComputeCloudMixin:
|
||||
"""Delete a flavor
|
||||
|
||||
:param name_or_id: ID or name of the flavor to delete.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
try:
|
||||
flavor = self.compute.find_flavor(name_or_id)
|
||||
@ -1497,7 +1525,7 @@ class ComputeCloudMixin:
|
||||
self.compute.delete_flavor(flavor)
|
||||
return True
|
||||
except exceptions.SDKException:
|
||||
raise exceptions.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Unable to delete flavor {name}".format(name=name_or_id)
|
||||
)
|
||||
|
||||
@ -1507,8 +1535,10 @@ class ComputeCloudMixin:
|
||||
:param string flavor_id: ID of the flavor to update.
|
||||
:param dict extra_specs: Dictionary of key-value pairs.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: OpenStackCloudResourceNotFound if flavor ID is not found.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
:raises: :class:`~openstack.exceptions.BadRequestException` if flavor
|
||||
ID is not found.
|
||||
"""
|
||||
self.compute.create_flavor_extra_specs(flavor_id, extra_specs)
|
||||
|
||||
@ -1518,8 +1548,10 @@ class ComputeCloudMixin:
|
||||
:param string flavor_id: ID of the flavor to update.
|
||||
:param keys: List of spec keys to delete.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: OpenStackCloudResourceNotFound if flavor ID is not found.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
:raises: :class:`~openstack.exceptions.BadRequestException` if flavor
|
||||
ID is not found.
|
||||
"""
|
||||
for key in keys:
|
||||
self.compute.delete_flavor_extra_specs_property(flavor_id, key)
|
||||
@ -1530,7 +1562,8 @@ class ComputeCloudMixin:
|
||||
:param string flavor_id: ID of the private flavor.
|
||||
:param string project_id: ID of the project/tenant.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
self.compute.flavor_add_tenant_access(flavor_id, project_id)
|
||||
|
||||
@ -1540,7 +1573,8 @@ class ComputeCloudMixin:
|
||||
:param string flavor_id: ID of the private flavor.
|
||||
:param string project_id: ID of the project/tenant.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
self.compute.flavor_remove_tenant_access(flavor_id, project_id)
|
||||
|
||||
@ -1548,8 +1582,10 @@ class ComputeCloudMixin:
|
||||
"""List access from a private flavor for a project/tenant.
|
||||
|
||||
:param string flavor_id: ID of the private flavor.
|
||||
|
||||
:returns: List of dicts with flavor_id and tenant_id attributes.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return self.compute.get_flavor_access(flavor_id)
|
||||
|
||||
@ -1569,10 +1605,11 @@ class ComputeCloudMixin:
|
||||
|
||||
:param name: aggregate name or id.
|
||||
:param filters: a dict containing additional filters to use.
|
||||
|
||||
:returns: A list of compute ``Aggregate`` objects matching the search
|
||||
criteria.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
aggregates = self.list_aggregates()
|
||||
return _utils._filter_list(aggregates, name_or_id, filters)
|
||||
@ -1612,8 +1649,10 @@ class ComputeCloudMixin:
|
||||
|
||||
:param name: Name of the host aggregate being created
|
||||
:param availability_zone: Availability zone to assign hosts
|
||||
|
||||
:returns: The created compute ``Aggregate`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return self.compute.create_aggregate(
|
||||
name=name, availability_zone=availability_zone
|
||||
@ -1626,8 +1665,10 @@ class ComputeCloudMixin:
|
||||
:param name_or_id: Name or ID of the aggregate being updated.
|
||||
:param name: New aggregate name
|
||||
:param availability_zone: Availability zone to assign to hosts
|
||||
|
||||
:returns: The updated compute ``Aggregate`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
aggregate = self.get_aggregate(name_or_id)
|
||||
return self.compute.update_aggregate(aggregate, **kwargs)
|
||||
@ -1636,8 +1677,10 @@ class ComputeCloudMixin:
|
||||
"""Delete a host aggregate.
|
||||
|
||||
:param name_or_id: Name or ID of the host aggregate to delete.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if isinstance(name_or_id, (str, bytes)) and not name_or_id.isdigit():
|
||||
aggregate = self.get_aggregate(name_or_id)
|
||||
@ -1662,12 +1705,12 @@ class ComputeCloudMixin:
|
||||
{'key': None} to remove a key)
|
||||
|
||||
:returns: a dict representing the new host aggregate.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
aggregate = self.get_aggregate(name_or_id)
|
||||
if not aggregate:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Host aggregate %s not found." % name_or_id
|
||||
)
|
||||
|
||||
@ -1679,11 +1722,12 @@ class ComputeCloudMixin:
|
||||
:param name_or_id: Name or ID of the host aggregate.
|
||||
:param host_name: Host to add.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
aggregate = self.get_aggregate(name_or_id)
|
||||
if not aggregate:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Host aggregate %s not found." % name_or_id
|
||||
)
|
||||
|
||||
@ -1695,11 +1739,12 @@ class ComputeCloudMixin:
|
||||
:param name_or_id: Name or ID of the host aggregate.
|
||||
:param host_name: Host to remove.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
aggregate = self.get_aggregate(name_or_id)
|
||||
if not aggregate:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Host aggregate %s not found." % name_or_id
|
||||
)
|
||||
|
||||
@ -1711,8 +1756,8 @@ class ComputeCloudMixin:
|
||||
:param name_or_id: project name or id
|
||||
:param kwargs: key/value pairs of quota name and quota value
|
||||
|
||||
:raises: OpenStackCloudException if the resource to set the
|
||||
quota does not exist.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the resource to
|
||||
set the quota does not exist.
|
||||
"""
|
||||
proj = self.identity.find_project(name_or_id, ignore_missing=False)
|
||||
kwargs['force'] = True
|
||||
@ -1724,8 +1769,10 @@ class ComputeCloudMixin:
|
||||
"""Get quota for a project
|
||||
|
||||
:param name_or_id: project name or id
|
||||
|
||||
:returns: A compute ``QuotaSet`` object if found, else None.
|
||||
:raises: OpenStackCloudException if it's not a valid project
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if it's not a
|
||||
valid project
|
||||
"""
|
||||
proj = self.identity.find_project(name_or_id, ignore_missing=False)
|
||||
return self.compute.get_quota_set(proj)
|
||||
@ -1734,9 +1781,9 @@ class ComputeCloudMixin:
|
||||
"""Delete quota for a project
|
||||
|
||||
:param name_or_id: project name or id
|
||||
:raises: OpenStackCloudException if it's not a valid project or the
|
||||
nova client call failed
|
||||
:returns: None
|
||||
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if it's not a
|
||||
valid project or the nova client call failed
|
||||
"""
|
||||
proj = self.identity.find_project(name_or_id, ignore_missing=False)
|
||||
self.compute.revert_quota_set(proj)
|
||||
@ -1750,9 +1797,10 @@ class ComputeCloudMixin:
|
||||
was started)
|
||||
:param end: :class:`datetime.datetime` or string. End date in UTC.
|
||||
Defaults to now
|
||||
:raises: OpenStackCloudException if it's not a valid project
|
||||
|
||||
:returns: A :class:`~openstack.compute.v2.usage.Usage` object
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if it's not a
|
||||
valid project
|
||||
"""
|
||||
|
||||
def parse_date(date):
|
||||
@ -1762,7 +1810,7 @@ class ComputeCloudMixin:
|
||||
# Yes. This is an exception mask. However,iso8601 is an
|
||||
# implementation detail - and the error message is actually
|
||||
# less informative.
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Date given, {date}, is invalid. Please pass in a date"
|
||||
" string in ISO 8601 format -"
|
||||
" YYYY-MM-DDTHH:MM:SS".format(date=date)
|
||||
@ -1775,7 +1823,7 @@ class ComputeCloudMixin:
|
||||
|
||||
proj = self.get_project(name_or_id)
|
||||
if not proj:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"project does not exist: {name}".format(name=proj.id)
|
||||
)
|
||||
|
||||
|
@ -11,7 +11,6 @@
|
||||
# limitations under the License.
|
||||
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack.dns.v2._proxy import Proxy
|
||||
from openstack import exceptions
|
||||
from openstack import resource
|
||||
@ -74,8 +73,8 @@ class DnsCloudMixin:
|
||||
if zone_type is secondary)
|
||||
|
||||
:returns: a dict representing the created zone.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
# We capitalize in case the user passes time in lowercase, as
|
||||
@ -83,7 +82,7 @@ class DnsCloudMixin:
|
||||
if zone_type is not None:
|
||||
zone_type = zone_type.upper()
|
||||
if zone_type not in ('PRIMARY', 'SECONDARY'):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Invalid type %s, valid choices are PRIMARY or SECONDARY"
|
||||
% zone_type
|
||||
)
|
||||
@ -105,7 +104,7 @@ class DnsCloudMixin:
|
||||
try:
|
||||
return self.dns.create_zone(**zone)
|
||||
except exceptions.SDKException:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Unable to create zone {name}".format(name=name)
|
||||
)
|
||||
|
||||
@ -122,14 +121,12 @@ class DnsCloudMixin:
|
||||
if zone_type is secondary)
|
||||
|
||||
:returns: a dict representing the updated zone.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
zone = self.get_zone(name_or_id)
|
||||
if not zone:
|
||||
raise exc.OpenStackCloudException(
|
||||
"Zone %s not found." % name_or_id
|
||||
)
|
||||
raise exceptions.SDKException("Zone %s not found." % name_or_id)
|
||||
|
||||
return self.dns.update_zone(zone['id'], **kwargs)
|
||||
|
||||
@ -139,8 +136,8 @@ class DnsCloudMixin:
|
||||
:param name_or_id: Name or ID of the zone being deleted.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
zone = self.dns.find_zone(name_or_id)
|
||||
@ -166,7 +163,7 @@ class DnsCloudMixin:
|
||||
else:
|
||||
zone_obj = self.get_zone(zone)
|
||||
if zone_obj is None:
|
||||
raise exc.OpenStackCloudException("Zone %s not found." % zone)
|
||||
raise exceptions.SDKException("Zone %s not found." % zone)
|
||||
return list(self.dns.recordsets(zone_obj))
|
||||
|
||||
def get_recordset(self, zone, name_or_id):
|
||||
@ -185,7 +182,7 @@ class DnsCloudMixin:
|
||||
else:
|
||||
zone_obj = self.get_zone(zone)
|
||||
if not zone_obj:
|
||||
raise exc.OpenStackCloudException("Zone %s not found." % zone)
|
||||
raise exceptions.SDKException("Zone %s not found." % zone)
|
||||
try:
|
||||
return self.dns.find_recordset(
|
||||
zone=zone_obj, name_or_id=name_or_id, ignore_missing=False
|
||||
@ -211,16 +208,15 @@ class DnsCloudMixin:
|
||||
:param ttl: TTL value of the recordset
|
||||
|
||||
:returns: a dict representing the created recordset.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if isinstance(zone, resource.Resource):
|
||||
zone_obj = zone
|
||||
else:
|
||||
zone_obj = self.get_zone(zone)
|
||||
if not zone_obj:
|
||||
raise exc.OpenStackCloudException("Zone %s not found." % zone)
|
||||
raise exceptions.SDKException("Zone %s not found." % zone)
|
||||
|
||||
# We capitalize the type in case the user sends in lowercase
|
||||
recordset_type = recordset_type.upper()
|
||||
@ -247,13 +243,13 @@ class DnsCloudMixin:
|
||||
:param ttl: TTL (Time to live) value in seconds of the recordset
|
||||
|
||||
:returns: a dict representing the updated recordset.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
rs = self.get_recordset(zone, name_or_id)
|
||||
if not rs:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Recordset %s not found." % name_or_id
|
||||
)
|
||||
|
||||
@ -269,8 +265,8 @@ class DnsCloudMixin:
|
||||
:param name_or_id: Name or ID of the recordset being deleted.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
recordset = self.get_recordset(zone, name_or_id)
|
||||
|
@ -67,7 +67,7 @@ class FloatingIPCloudMixin:
|
||||
def _nova_list_floating_ips(self):
|
||||
try:
|
||||
data = proxy._json_response(self.compute.get('/os-floating-ips'))
|
||||
except exc.OpenStackCloudURINotFound:
|
||||
except exceptions.NotFoundException:
|
||||
return []
|
||||
return self._get_and_munchify('floating_ips', data)
|
||||
|
||||
@ -109,7 +109,7 @@ class FloatingIPCloudMixin:
|
||||
if self._use_neutron_floating():
|
||||
try:
|
||||
return self._neutron_list_floating_ips(filters)
|
||||
except exc.OpenStackCloudURINotFound as e:
|
||||
except exceptions.NotFoundException as e:
|
||||
# Nova-network don't support server-side floating ips
|
||||
# filtering, so it's safer to return an empty list than
|
||||
# to fallback to Nova which may return more results that
|
||||
@ -206,8 +206,8 @@ class FloatingIPCloudMixin:
|
||||
:param server: (server) Server the Floating IP is for
|
||||
|
||||
:returns: a list of floating IP addresses.
|
||||
:raises: ``OpenStackCloudResourceNotFound``, if an external network
|
||||
that meets the specified criteria cannot be found.
|
||||
:raises: :class:`~openstack.exceptions.BadRequestException` if an
|
||||
external network that meets the specified criteria cannot be found.
|
||||
"""
|
||||
if project_id is None:
|
||||
# Make sure we are only listing floatingIPs allocated the current
|
||||
@ -229,7 +229,7 @@ class FloatingIPCloudMixin:
|
||||
break
|
||||
|
||||
if floating_network_id is None:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"unable to find external network {net}".format(net=network)
|
||||
)
|
||||
else:
|
||||
@ -265,9 +265,8 @@ class FloatingIPCloudMixin:
|
||||
:param pool: Nova floating IP pool name.
|
||||
|
||||
:returns: a list of floating IP addresses.
|
||||
|
||||
:raises: ``OpenStackCloudResourceNotFound``, if a floating IP pool
|
||||
is not specified and cannot be found.
|
||||
:raises: :class:`~openstack.exceptions.BadRequestException` if a
|
||||
floating IP pool is not specified and cannot be found.
|
||||
"""
|
||||
|
||||
with _utils.openstacksdk_exceptions(
|
||||
@ -276,7 +275,7 @@ class FloatingIPCloudMixin:
|
||||
if pool is None:
|
||||
pools = self.list_floating_ip_pools()
|
||||
if not pools:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"unable to find a floating ip pool"
|
||||
)
|
||||
pool = pools[0]['name']
|
||||
@ -323,7 +322,7 @@ class FloatingIPCloudMixin:
|
||||
network=network, server=server
|
||||
)
|
||||
return f_ips[0]
|
||||
except exc.OpenStackCloudURINotFound as e:
|
||||
except exceptions.NotFoundException as e:
|
||||
self.log.debug(
|
||||
"Something went wrong talking to neutron API: "
|
||||
"'%(msg)s'. Trying with Nova.",
|
||||
@ -346,7 +345,7 @@ class FloatingIPCloudMixin:
|
||||
if floating_network:
|
||||
floating_network_id = floating_network
|
||||
else:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"unable to find an external network"
|
||||
)
|
||||
return floating_network_id
|
||||
@ -384,8 +383,8 @@ class FloatingIPCloudMixin:
|
||||
provided.
|
||||
|
||||
:returns: a floating IP address
|
||||
|
||||
:raises: ``OpenStackCloudException``, on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if self._use_neutron_floating():
|
||||
try:
|
||||
@ -398,7 +397,7 @@ class FloatingIPCloudMixin:
|
||||
wait=wait,
|
||||
timeout=timeout,
|
||||
)
|
||||
except exc.OpenStackCloudURINotFound as e:
|
||||
except exceptions.NotFoundException as e:
|
||||
self.log.debug(
|
||||
"Something went wrong talking to neutron API: "
|
||||
"'%(msg)s'. Trying with Nova.",
|
||||
@ -407,7 +406,7 @@ class FloatingIPCloudMixin:
|
||||
# Fall-through, trying with Nova
|
||||
|
||||
if port:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"This cloud uses nova-network which does not support"
|
||||
" arbitrary floating-ip/port mappings. Please nudge"
|
||||
" your cloud provider to upgrade the networking stack"
|
||||
@ -440,7 +439,7 @@ class FloatingIPCloudMixin:
|
||||
try:
|
||||
network = self.network.find_network(network_name_or_id)
|
||||
except exceptions.ResourceNotFound:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"unable to find network for floating ips with ID "
|
||||
"{0}".format(network_name_or_id)
|
||||
)
|
||||
@ -481,7 +480,7 @@ class FloatingIPCloudMixin:
|
||||
fip = self.get_floating_ip(fip_id)
|
||||
if fip and fip['status'] == 'ACTIVE':
|
||||
break
|
||||
except exc.OpenStackCloudTimeout:
|
||||
except exceptions.ResourceTimeout:
|
||||
self.log.error(
|
||||
"Timed out on floating ip %(fip)s becoming active."
|
||||
" Deleting",
|
||||
@ -499,7 +498,7 @@ class FloatingIPCloudMixin:
|
||||
raise
|
||||
if fip['port_id'] != port:
|
||||
if server:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Attempted to create FIP on port {port} for server"
|
||||
" {server} but FIP has port {port_id}".format(
|
||||
port=port,
|
||||
@ -508,7 +507,7 @@ class FloatingIPCloudMixin:
|
||||
)
|
||||
)
|
||||
else:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Attempted to create FIP on port {port}"
|
||||
" but something went wrong".format(port=port)
|
||||
)
|
||||
@ -521,7 +520,7 @@ class FloatingIPCloudMixin:
|
||||
if pool is None:
|
||||
pools = self.list_floating_ip_pools()
|
||||
if not pools:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"unable to find a floating ip pool"
|
||||
)
|
||||
pool = pools[0]['name']
|
||||
@ -548,9 +547,9 @@ class FloatingIPCloudMixin:
|
||||
occur.
|
||||
|
||||
:returns: True if the IP address has been deleted, False if the IP
|
||||
address was not found.
|
||||
|
||||
:raises: ``OpenStackCloudException``, on operation error.
|
||||
address was not found.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
for count in range(0, max(0, retry) + 1):
|
||||
result = self._delete_floating_ip(floating_ip_id)
|
||||
@ -566,7 +565,7 @@ class FloatingIPCloudMixin:
|
||||
if not f_ip or f_ip['status'] == 'DOWN':
|
||||
return True
|
||||
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Attempted to delete Floating IP {ip} with ID {id} a total of"
|
||||
" {retry} times. Although the cloud did not indicate any errors"
|
||||
" the floating ip is still in existence. Aborting further"
|
||||
@ -581,7 +580,7 @@ class FloatingIPCloudMixin:
|
||||
if self._use_neutron_floating():
|
||||
try:
|
||||
return self._neutron_delete_floating_ip(floating_ip_id)
|
||||
except exc.OpenStackCloudURINotFound as e:
|
||||
except exceptions.NotFoundException as e:
|
||||
self.log.debug(
|
||||
"Something went wrong talking to neutron API: "
|
||||
"'%(msg)s'. Trying with Nova.",
|
||||
@ -606,7 +605,7 @@ class FloatingIPCloudMixin:
|
||||
fip_id=floating_ip_id
|
||||
),
|
||||
)
|
||||
except exc.OpenStackCloudURINotFound:
|
||||
except exceptions.NotFoundException:
|
||||
return False
|
||||
return True
|
||||
|
||||
@ -629,8 +628,8 @@ class FloatingIPCloudMixin:
|
||||
occur.
|
||||
|
||||
:returns: Number of Floating IPs deleted, False if none
|
||||
|
||||
:raises: ``OpenStackCloudException``, on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
processed = []
|
||||
if self._use_neutron_floating():
|
||||
@ -669,8 +668,8 @@ class FloatingIPCloudMixin:
|
||||
FIP to attach to will come from.
|
||||
|
||||
:returns: The server ``openstack.compute.v2.server.Server``
|
||||
|
||||
:raises: OpenStackCloudException, on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
# Short circuit if we're asking to attach an IP that's already
|
||||
# attached
|
||||
@ -697,7 +696,7 @@ class FloatingIPCloudMixin:
|
||||
fixed_address=fixed_address,
|
||||
nat_destination=nat_destination,
|
||||
)
|
||||
except exc.OpenStackCloudURINotFound as e:
|
||||
except exceptions.NotFoundException as e:
|
||||
self.log.debug(
|
||||
"Something went wrong talking to neutron API: "
|
||||
"'%(msg)s'. Trying with Nova.",
|
||||
@ -738,7 +737,7 @@ class FloatingIPCloudMixin:
|
||||
nat_destination=nat_destination,
|
||||
)
|
||||
if not port:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"unable to find a port for server {0}".format(server['id'])
|
||||
)
|
||||
|
||||
@ -753,7 +752,7 @@ class FloatingIPCloudMixin:
|
||||
):
|
||||
f_ip = self.get_floating_ip(id=floating_ip_id)
|
||||
if f_ip is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"unable to find floating IP {0}".format(floating_ip_id)
|
||||
)
|
||||
error_message = "Error attaching IP {ip} to instance {id}".format(
|
||||
@ -777,16 +776,16 @@ class FloatingIPCloudMixin:
|
||||
:param floating_ip_id: Id of the floating IP to detach.
|
||||
|
||||
:returns: True if the IP has been detached, or False if the IP wasn't
|
||||
attached to any server.
|
||||
|
||||
:raises: ``OpenStackCloudException``, on operation error.
|
||||
attached to any server.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if self._use_neutron_floating():
|
||||
try:
|
||||
return self._neutron_detach_ip_from_server(
|
||||
server_id=server_id, floating_ip_id=floating_ip_id
|
||||
)
|
||||
except exc.OpenStackCloudURINotFound as e:
|
||||
except exceptions.NotFoundException as e:
|
||||
self.log.debug(
|
||||
"Something went wrong talking to neutron API: "
|
||||
"'%(msg)s'. Trying with Nova.",
|
||||
@ -820,7 +819,7 @@ class FloatingIPCloudMixin:
|
||||
def _nova_detach_ip_from_server(self, server_id, floating_ip_id):
|
||||
f_ip = self.get_floating_ip(id=floating_ip_id)
|
||||
if f_ip is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"unable to find floating IP {0}".format(floating_ip_id)
|
||||
)
|
||||
error_message = "Error detaching IP {ip} from instance {id}".format(
|
||||
@ -921,8 +920,8 @@ class FloatingIPCloudMixin:
|
||||
floating IP should be on
|
||||
|
||||
:returns: The updated server ``openstack.compute.v2.server.Server``
|
||||
|
||||
:raises: ``OpenStackCloudException``, on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
if type(ips) != list:
|
||||
@ -999,7 +998,7 @@ class FloatingIPCloudMixin:
|
||||
timeout=timeout,
|
||||
skip_attach=skip_attach,
|
||||
)
|
||||
except exc.OpenStackCloudTimeout:
|
||||
except exceptions.ResourceTimeout:
|
||||
if self._use_neutron_floating() and created:
|
||||
# We are here because we created an IP on the port
|
||||
# It failed. Delete so as not to leak an unmanaged
|
||||
@ -1131,7 +1130,7 @@ class FloatingIPCloudMixin:
|
||||
# No floating ip network - no FIPs
|
||||
try:
|
||||
self._get_floating_network_id()
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
return False
|
||||
|
||||
(port_obj, fixed_ip_address) = self._nat_destination_port(
|
||||
@ -1169,7 +1168,7 @@ class FloatingIPCloudMixin:
|
||||
if nat_destination:
|
||||
nat_network = self.get_network(nat_destination)
|
||||
if not nat_network:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'NAT Destination {nat_destination} was configured'
|
||||
' but not found on the cloud. Please check your'
|
||||
' config and your cloud and try again.'.format(
|
||||
@ -1180,7 +1179,7 @@ class FloatingIPCloudMixin:
|
||||
nat_network = self.get_nat_destination()
|
||||
|
||||
if not nat_network:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Multiple ports were found for server {server}'
|
||||
' but none of the networks are a valid NAT'
|
||||
' destination, so it is impossible to add a'
|
||||
@ -1198,7 +1197,7 @@ class FloatingIPCloudMixin:
|
||||
if maybe_port['network_id'] == nat_network['id']:
|
||||
maybe_ports.append(maybe_port)
|
||||
if not maybe_ports:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'No port on server {server} was found matching'
|
||||
' your NAT destination network {dest}. Please '
|
||||
' check your config'.format(
|
||||
@ -1224,7 +1223,7 @@ class FloatingIPCloudMixin:
|
||||
if ip.version == 4:
|
||||
fixed_address = address['ip_address']
|
||||
return port, fixed_address
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"unable to find a free fixed IPv4 address for server "
|
||||
"{0}".format(server['id'])
|
||||
)
|
||||
|
@ -11,7 +11,6 @@
|
||||
# limitations under the License.
|
||||
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.identity.v3._proxy import Proxy
|
||||
from openstack import utils
|
||||
@ -41,7 +40,7 @@ class IdentityCloudMixin:
|
||||
# mention api versions
|
||||
if utils.supports_version(self.identity, '3'):
|
||||
if not domain_id:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"User or project creation requires an explicit domain_id "
|
||||
"argument."
|
||||
)
|
||||
@ -87,8 +86,8 @@ class IdentityCloudMixin:
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
|
||||
:returns: A list of identity ``Project`` objects.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
if not filters:
|
||||
filters = {}
|
||||
@ -154,9 +153,10 @@ class IdentityCloudMixin:
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
:param domain_id: Domain ID to scope the retrieved project.
|
||||
|
||||
:returns: An identity ``Project`` object.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return _utils._get_entity(
|
||||
self, 'project', name_or_id, filters, domain_id=domain_id
|
||||
@ -218,9 +218,10 @@ class IdentityCloudMixin:
|
||||
|
||||
:param name_or_id: Name or unique ID of the project.
|
||||
:param domain_id: Domain ID to scope the retrieved project.
|
||||
|
||||
:returns: True if delete succeeded, False if the project was not found.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
try:
|
||||
project = self.identity.find_project(
|
||||
@ -245,9 +246,10 @@ class IdentityCloudMixin:
|
||||
|
||||
:param name:
|
||||
:param domain_id: Domain ID to scope the retrieved users.
|
||||
|
||||
:returns: A list of identity ``User`` objects.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(self.identity.users(**kwargs))
|
||||
|
||||
@ -273,9 +275,10 @@ class IdentityCloudMixin:
|
||||
Example::
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
|
||||
:returns: A list of identity ``User`` objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
kwargs = {}
|
||||
# NOTE(jdwidari) if name_or_id isn't UUID like then make use of server-
|
||||
@ -312,9 +315,10 @@ class IdentityCloudMixin:
|
||||
Example::
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
|
||||
:returns: an identity ``User`` object
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return _utils._get_entity(self, 'user', name_or_id, filters, **kwargs)
|
||||
|
||||
@ -397,13 +401,13 @@ class IdentityCloudMixin:
|
||||
def _get_user_and_group(self, user_name_or_id, group_name_or_id):
|
||||
user = self.get_user(user_name_or_id)
|
||||
if not user:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'User {user} not found'.format(user=user_name_or_id)
|
||||
)
|
||||
|
||||
group = self.get_group(group_name_or_id)
|
||||
if not group:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Group {user} not found'.format(user=group_name_or_id)
|
||||
)
|
||||
|
||||
@ -414,8 +418,9 @@ class IdentityCloudMixin:
|
||||
|
||||
:param name_or_id: Name or unique ID of the user.
|
||||
:param group_name_or_id: Group name or ID
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
user, group = self._get_user_and_group(name_or_id, group_name_or_id)
|
||||
|
||||
@ -426,9 +431,10 @@ class IdentityCloudMixin:
|
||||
|
||||
:param name_or_id: Name or unique ID of the user.
|
||||
:param group_name_or_id: Group name or ID
|
||||
|
||||
:returns: True if user is in the group, False otherwise
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
user, group = self._get_user_and_group(name_or_id, group_name_or_id)
|
||||
|
||||
@ -439,8 +445,9 @@ class IdentityCloudMixin:
|
||||
|
||||
:param name_or_id: Name or unique ID of the user.
|
||||
:param group_name_or_id: Group name or ID
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
user, group = self._get_user_and_group(name_or_id, group_name_or_id)
|
||||
|
||||
@ -455,9 +462,10 @@ class IdentityCloudMixin:
|
||||
:param service_type: Service type. (type or service_type required.)
|
||||
:param description: Service description (optional).
|
||||
:param enabled: Whether the service is enabled (v3 only)
|
||||
|
||||
:returns: an identity ``Service`` object
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
type_ = kwargs.pop('type', None)
|
||||
service_type = kwargs.pop('service_type', None)
|
||||
@ -489,8 +497,8 @@ class IdentityCloudMixin:
|
||||
"""List all Keystone services.
|
||||
|
||||
:returns: A list of identity ``Service`` object
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(self.identity.services())
|
||||
|
||||
@ -515,9 +523,10 @@ class IdentityCloudMixin:
|
||||
Example::
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
|
||||
:returns: a list of identity ``Service`` objects
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
services = self.list_services()
|
||||
return _utils._filter_list(services, name_or_id, filters)
|
||||
@ -527,9 +536,11 @@ class IdentityCloudMixin:
|
||||
"""Get exactly one Keystone service.
|
||||
|
||||
:param name_or_id: Name or unique ID of the service.
|
||||
|
||||
:returns: an identity ``Service`` object
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call or if multiple matches are found.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call or if multiple matches are
|
||||
found.
|
||||
"""
|
||||
return _utils._get_entity(self, 'service', name_or_id, filters)
|
||||
|
||||
@ -537,9 +548,10 @@ class IdentityCloudMixin:
|
||||
"""Delete a Keystone service.
|
||||
|
||||
:param name_or_id: Name or unique ID of the service.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
service = self.get_service(name_or_id=name_or_id)
|
||||
if service is None:
|
||||
@ -575,23 +587,25 @@ class IdentityCloudMixin:
|
||||
:param admin_url: Endpoint admin URL.
|
||||
:param region: Endpoint region.
|
||||
:param enabled: Whether the endpoint is enabled
|
||||
|
||||
:returns: A list of identity ``Endpoint`` objects
|
||||
:raises: OpenStackCloudException if the service cannot be found or if
|
||||
something goes wrong during the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the service
|
||||
cannot be found or if something goes wrong during the OpenStack API
|
||||
call.
|
||||
"""
|
||||
public_url = kwargs.pop('public_url', None)
|
||||
internal_url = kwargs.pop('internal_url', None)
|
||||
admin_url = kwargs.pop('admin_url', None)
|
||||
|
||||
if (url or interface) and (public_url or internal_url or admin_url):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"create_endpoint takes either url and interface OR "
|
||||
"public_url, internal_url, admin_url"
|
||||
)
|
||||
|
||||
service = self.get_service(name_or_id=service_name_or_id)
|
||||
if service is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"service {service} not found".format(
|
||||
service=service_name_or_id
|
||||
)
|
||||
@ -652,8 +666,8 @@ class IdentityCloudMixin:
|
||||
"""List Keystone endpoints.
|
||||
|
||||
:returns: A list of identity ``Endpoint`` objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(self.identity.endpoints())
|
||||
|
||||
@ -678,9 +692,10 @@ class IdentityCloudMixin:
|
||||
Example::
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
|
||||
:returns: A list of identity ``Endpoint`` objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
# NOTE(SamYaple): With keystone v3 we can filter directly via the
|
||||
# the keystone api, but since the return of all the endpoints even in
|
||||
@ -702,9 +717,10 @@ class IdentityCloudMixin:
|
||||
"""Delete a Keystone endpoint.
|
||||
|
||||
:param id: ID of the endpoint to delete.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
endpoint = self.get_endpoint(id=id)
|
||||
if endpoint is None:
|
||||
@ -725,7 +741,8 @@ class IdentityCloudMixin:
|
||||
:param description: A description of the domain.
|
||||
:param enabled: Is the domain enabled or not (default True).
|
||||
:returns: The created identity ``Endpoint`` object.
|
||||
:raise OpenStackCloudException: if the domain cannot be created.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the domain
|
||||
cannot be created.
|
||||
"""
|
||||
domain_ref = {'name': name, 'enabled': enabled}
|
||||
if description is not None:
|
||||
@ -750,16 +767,17 @@ class IdentityCloudMixin:
|
||||
:param enabled:
|
||||
:param name_or_id: Name or unique ID of the domain.
|
||||
:returns: The updated identity ``Domain`` object.
|
||||
:raise OpenStackCloudException: if the domain cannot be updated
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the domain
|
||||
cannot be updated
|
||||
"""
|
||||
if domain_id is None:
|
||||
if name_or_id is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"You must pass either domain_id or name_or_id value"
|
||||
)
|
||||
dom = self.get_domain(None, name_or_id)
|
||||
if dom is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Domain {0} not found for updating".format(name_or_id)
|
||||
)
|
||||
domain_id = dom['id']
|
||||
@ -777,14 +795,15 @@ class IdentityCloudMixin:
|
||||
|
||||
:param domain_id: ID of the domain to delete.
|
||||
:param name_or_id: Name or unique ID of the domain.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
try:
|
||||
if domain_id is None:
|
||||
if name_or_id is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"You must pass either domain_id or name_or_id value"
|
||||
)
|
||||
dom = self.get_domain(name_or_id=name_or_id)
|
||||
@ -808,8 +827,8 @@ class IdentityCloudMixin:
|
||||
"""List Keystone domains.
|
||||
|
||||
:returns: A list of identity ``Domain`` objects.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(self.identity.domains(**filters))
|
||||
|
||||
@ -835,9 +854,10 @@ class IdentityCloudMixin:
|
||||
Example::
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
|
||||
:returns: a list of identity ``Domain`` objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
if filters is None:
|
||||
filters = {}
|
||||
@ -872,9 +892,10 @@ class IdentityCloudMixin:
|
||||
Example::
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
|
||||
:returns: an identity ``Domain`` object
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
if domain_id is None:
|
||||
return self.identity.find_domain(name_or_id)
|
||||
@ -886,9 +907,10 @@ class IdentityCloudMixin:
|
||||
"""List Keystone groups.
|
||||
|
||||
:param domain_id: Domain ID.
|
||||
|
||||
:returns: A list of identity ``Group`` objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(self.identity.groups(**kwargs))
|
||||
|
||||
@ -915,9 +937,10 @@ class IdentityCloudMixin:
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
:param domain_id: domain id.
|
||||
|
||||
:returns: A list of identity ``Group`` objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
groups = self.list_groups(**kwargs)
|
||||
return _utils._filter_list(groups, name_or_id, filters)
|
||||
@ -929,9 +952,10 @@ class IdentityCloudMixin:
|
||||
"""Get exactly one Keystone group.
|
||||
|
||||
:param name_or_id: Name or unique ID of the group(s).
|
||||
|
||||
:returns: An identity ``Group`` object
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return _utils._get_entity(self, 'group', name_or_id, filters, **kwargs)
|
||||
|
||||
@ -941,9 +965,10 @@ class IdentityCloudMixin:
|
||||
:param string name: Group name.
|
||||
:param string description: Group description.
|
||||
:param string domain: Domain name or ID for the group.
|
||||
|
||||
:returns: An identity ``Group`` object
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
group_ref = {'name': name}
|
||||
if description:
|
||||
@ -951,7 +976,7 @@ class IdentityCloudMixin:
|
||||
if domain:
|
||||
dom = self.get_domain(domain)
|
||||
if not dom:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Creating group {group} failed: Invalid domain "
|
||||
"{domain}".format(group=name, domain=domain)
|
||||
)
|
||||
@ -973,13 +998,14 @@ class IdentityCloudMixin:
|
||||
:param name_or_id: Name or unique ID of the group.
|
||||
:param name: New group name.
|
||||
:param description: New group description.
|
||||
|
||||
:returns: The updated identity ``Group`` object.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
group = self.identity.find_group(name_or_id, **kwargs)
|
||||
if group is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Group {0} not found for updating".format(name_or_id)
|
||||
)
|
||||
|
||||
@ -997,9 +1023,10 @@ class IdentityCloudMixin:
|
||||
"""Delete a group
|
||||
|
||||
:param name_or_id: Name or unique ID of the group.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
try:
|
||||
group = self.identity.find_group(name_or_id)
|
||||
@ -1021,8 +1048,8 @@ class IdentityCloudMixin:
|
||||
"""List Keystone roles.
|
||||
|
||||
:returns: A list of identity ``Role`` objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(self.identity.roles(**kwargs))
|
||||
|
||||
@ -1047,9 +1074,10 @@ class IdentityCloudMixin:
|
||||
Example::
|
||||
|
||||
"[?last_name==`Smith`] | [?other.gender]==`Female`]"
|
||||
|
||||
:returns: a list of identity ``Role`` objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
roles = self.list_roles()
|
||||
return _utils._filter_list(roles, name_or_id, filters)
|
||||
@ -1061,9 +1089,10 @@ class IdentityCloudMixin:
|
||||
"""Get a Keystone role.
|
||||
|
||||
:param name_or_id: Name or unique ID of the role.
|
||||
|
||||
:returns: An identity ``Role`` object if found, else None.
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return _utils._get_entity(self, 'role', name_or_id, filters, **kwargs)
|
||||
|
||||
@ -1120,8 +1149,8 @@ class IdentityCloudMixin:
|
||||
:returns: A list of indentity
|
||||
:class:`openstack.identity.v3.role_assignment.RoleAssignment`
|
||||
objects
|
||||
:raises: ``OpenStackCloudException``: if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
# NOTE(samueldmq): although 'include_names' is a valid query parameter
|
||||
# in the keystone v3 list role assignments API, it would have NO effect
|
||||
@ -1162,7 +1191,8 @@ class IdentityCloudMixin:
|
||||
:param string name: The name of the role.
|
||||
:param domain_id: domain id (v3)
|
||||
:returns: an identity ``Role`` object
|
||||
:raise OpenStackCloudException: if the role cannot be created
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the role cannot
|
||||
be created
|
||||
"""
|
||||
kwargs['name'] = name
|
||||
return self.identity.create_role(**kwargs)
|
||||
@ -1175,7 +1205,8 @@ class IdentityCloudMixin:
|
||||
:param string name: The new role name
|
||||
:param domain_id: domain id
|
||||
:returns: an identity ``Role`` object
|
||||
:raise OpenStackCloudException: if the role cannot be created
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the role cannot
|
||||
be created
|
||||
"""
|
||||
role = self.get_role(name_or_id, **kwargs)
|
||||
if role is None:
|
||||
@ -1190,9 +1221,10 @@ class IdentityCloudMixin:
|
||||
|
||||
:param name_or_id: Name or unique ID of the role.
|
||||
:param domain_id: domain id (v3)
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
role = self.get_role(name_or_id, **kwargs)
|
||||
if role is None:
|
||||
@ -1229,9 +1261,7 @@ class IdentityCloudMixin:
|
||||
|
||||
data['role'] = self.identity.find_role(name_or_id=role)
|
||||
if not data['role']:
|
||||
raise exc.OpenStackCloudException(
|
||||
'Role {0} not found.'.format(role)
|
||||
)
|
||||
raise exceptions.SDKException('Role {0} not found.'.format(role))
|
||||
|
||||
if user:
|
||||
# use cloud.get_user to save us from bad searching by name
|
||||
@ -1242,15 +1272,15 @@ class IdentityCloudMixin:
|
||||
)
|
||||
|
||||
if data.get('user') and data.get('group'):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Specify either a group or a user, not both'
|
||||
)
|
||||
if data.get('user') is None and data.get('group') is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Must specify either a user or a group'
|
||||
)
|
||||
if project is None and domain is None and system is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Must specify either a domain, project or system'
|
||||
)
|
||||
|
||||
@ -1293,8 +1323,8 @@ class IdentityCloudMixin:
|
||||
NOTE: precedence is given first to project, then domain, then system
|
||||
|
||||
:returns: True if the role is assigned, otherwise False
|
||||
|
||||
:raise OpenStackCloudException: if the role cannot be granted
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the role cannot
|
||||
be granted
|
||||
"""
|
||||
data = self._get_grant_revoke_params(
|
||||
name_or_id,
|
||||
@ -1401,8 +1431,8 @@ class IdentityCloudMixin:
|
||||
NOTE: precedence is given first to project, then domain, then system
|
||||
|
||||
:returns: True if the role is revoke, otherwise False
|
||||
|
||||
:raise OpenStackCloudException: if the role cannot be removed
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the role cannot
|
||||
be removed
|
||||
"""
|
||||
data = self._get_grant_revoke_params(
|
||||
name_or_id,
|
||||
|
@ -11,7 +11,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.image.v2._proxy import Proxy
|
||||
from openstack import utils
|
||||
|
||||
@ -104,30 +104,32 @@ class ImageCloudMixin:
|
||||
this or output_path must be specified
|
||||
:param int chunk_size: size in bytes to read from the wire and buffer
|
||||
at one time. Defaults to 1024 * 1024 = 1 MiB
|
||||
|
||||
:returns: When output_path and output_file are not given - the bytes
|
||||
comprising the given Image when stream is False, otherwise a
|
||||
:class:`requests.Response` instance. When output_path or
|
||||
output_file are given - an image
|
||||
:class:`~openstack.image.v2.image.Image` instance.
|
||||
:raises: OpenStackCloudException in the event download_image is called
|
||||
without exactly one of either output_path or output_file
|
||||
:raises: OpenStackCloudResourceNotFound if no images are found matching
|
||||
the name or ID provided
|
||||
:raises: :class:`~openstack.exceptions.SDKException` in the event
|
||||
download_image is called without exactly one of either output_path
|
||||
or output_file
|
||||
:raises: :class:`~openstack.exceptions.BadRequestException` if no
|
||||
images are found matching the name or ID provided
|
||||
"""
|
||||
if output_path is None and output_file is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'No output specified, an output path or file object'
|
||||
' is necessary to write the image data to'
|
||||
)
|
||||
elif output_path is not None and output_file is not None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Both an output path and file object were provided,'
|
||||
' however only one can be used at once'
|
||||
)
|
||||
|
||||
image = self.image.find_image(name_or_id)
|
||||
if not image:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"No images with name or ID %s were found" % name_or_id, None
|
||||
)
|
||||
|
||||
@ -167,7 +169,7 @@ class ImageCloudMixin:
|
||||
if image['status'] == 'active':
|
||||
return image
|
||||
elif image['status'] == 'error':
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Image {image} hit error state'.format(image=image_id)
|
||||
)
|
||||
|
||||
@ -186,8 +188,8 @@ class ImageCloudMixin:
|
||||
:param delete_objects: If True, also deletes uploaded swift objects.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException if there are problems deleting.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if there are
|
||||
problems deleting.
|
||||
"""
|
||||
image = self.get_image(name_or_id)
|
||||
if not image:
|
||||
@ -279,7 +281,8 @@ class ImageCloudMixin:
|
||||
If a value is in meta and kwargs, meta wins.
|
||||
|
||||
:returns: An image :class:`openstack.image.v2.image.Image` object.
|
||||
:raises: OpenStackCloudException if there are problems uploading
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if there are
|
||||
problems uploading
|
||||
"""
|
||||
if volume:
|
||||
image = self.block_storage.create_image(
|
||||
@ -319,7 +322,7 @@ class ImageCloudMixin:
|
||||
image_obj = self.get_image(image.id)
|
||||
if image_obj and image_obj.status not in ('queued', 'saving'):
|
||||
return image_obj
|
||||
except exc.OpenStackCloudTimeout:
|
||||
except exceptions.ResourceTimeout:
|
||||
self.log.debug(
|
||||
"Timeout waiting for image to become ready. Deleting."
|
||||
)
|
||||
|
@ -35,10 +35,11 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the desired network.
|
||||
:param filters: A dict containing additional filters to use. e.g.
|
||||
{'router:external': True}
|
||||
|
||||
:returns: A list of network ``Network`` objects matching the search
|
||||
criteria.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
query = {}
|
||||
if name_or_id:
|
||||
@ -54,10 +55,11 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the desired router.
|
||||
:param filters: A dict containing additional filters to use. e.g.
|
||||
{'admin_state_up': True}
|
||||
|
||||
:returns: A list of network ``Router`` objects matching the search
|
||||
criteria.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
query = {}
|
||||
if name_or_id:
|
||||
@ -73,10 +75,11 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the desired subnet.
|
||||
:param filters: A dict containing additional filters to use. e.g.
|
||||
{'enable_dhcp': True}
|
||||
|
||||
:returns: A list of network ``Subnet`` objects matching the search
|
||||
criteria.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
query = {}
|
||||
if name_or_id:
|
||||
@ -92,10 +95,11 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the desired port.
|
||||
:param filters: A dict containing additional filters to use. e.g.
|
||||
{'device_id': '2711c67a-b4a7-43dd-ace7-6187b791c3f0'}
|
||||
|
||||
:returns: A list of network ``Port`` objects matching the search
|
||||
criteria.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
# If the filter is a string, do not push the filter down to neutron;
|
||||
# get all the ports and filter locally.
|
||||
@ -208,10 +212,11 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the desired policy.
|
||||
:param filters: a dict containing additional filters to use. e.g.
|
||||
{'shared': True}
|
||||
|
||||
:returns: A list of network ``QosPolicy`` objects matching the search
|
||||
criteria.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -467,7 +472,8 @@ class NetworkCloudMixin:
|
||||
:param string dns_domain: Specify the DNS domain associated with
|
||||
this network.
|
||||
:returns: The created network ``Network`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
network = {
|
||||
'name': name,
|
||||
@ -482,7 +488,7 @@ class NetworkCloudMixin:
|
||||
|
||||
if availability_zone_hints is not None:
|
||||
if not isinstance(availability_zone_hints, list):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'availability_zone_hints' must be a list"
|
||||
)
|
||||
if not self._has_neutron_extension('network_availability_zone'):
|
||||
@ -494,7 +500,7 @@ class NetworkCloudMixin:
|
||||
|
||||
if provider:
|
||||
if not isinstance(provider, dict):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'provider' must be a dict"
|
||||
)
|
||||
# Only pass what we know
|
||||
@ -515,18 +521,18 @@ class NetworkCloudMixin:
|
||||
|
||||
if port_security_enabled is not None:
|
||||
if not isinstance(port_security_enabled, bool):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'port_security_enabled' must be a bool"
|
||||
)
|
||||
network['port_security_enabled'] = port_security_enabled
|
||||
|
||||
if mtu_size:
|
||||
if not isinstance(mtu_size, int):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'mtu_size' must be an integer."
|
||||
)
|
||||
if not mtu_size >= 68:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'mtu_size' must be greater than 67."
|
||||
)
|
||||
|
||||
@ -568,13 +574,15 @@ class NetworkCloudMixin:
|
||||
:param bool port_security_enabled: Enable or disable port security.
|
||||
:param string dns_domain: Specify the DNS domain associated with
|
||||
this network.
|
||||
|
||||
:returns: The updated network ``Network`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
provider = kwargs.pop('provider', None)
|
||||
if provider:
|
||||
if not isinstance(provider, dict):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'provider' must be a dict"
|
||||
)
|
||||
for key in ('physical_network', 'network_type', 'segmentation_id'):
|
||||
@ -586,26 +594,24 @@ class NetworkCloudMixin:
|
||||
|
||||
if 'port_security_enabled' in kwargs:
|
||||
if not isinstance(kwargs['port_security_enabled'], bool):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'port_security_enabled' must be a bool"
|
||||
)
|
||||
|
||||
if 'mtu_size' in kwargs:
|
||||
if not isinstance(kwargs['mtu_size'], int):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'mtu_size' must be an integer."
|
||||
)
|
||||
if kwargs['mtu_size'] < 68:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'mtu_size' must be greater than 67."
|
||||
)
|
||||
kwargs['mtu'] = kwargs.pop('mtu_size')
|
||||
|
||||
network = self.get_network(name_or_id)
|
||||
if not network:
|
||||
raise exc.OpenStackCloudException(
|
||||
"Network %s not found." % name_or_id
|
||||
)
|
||||
raise exceptions.SDKException("Network %s not found." % name_or_id)
|
||||
|
||||
network = self.network.update_network(network, **kwargs)
|
||||
|
||||
@ -619,8 +625,8 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the network being deleted.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
network = self.get_network(name_or_id)
|
||||
if not network:
|
||||
@ -640,13 +646,13 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: project name or id
|
||||
:param kwargs: key/value pairs of quota name and quota value
|
||||
|
||||
:raises: OpenStackCloudException if the resource to set the
|
||||
quota does not exist.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the resource to
|
||||
set the quota does not exist.
|
||||
"""
|
||||
|
||||
proj = self.get_project(name_or_id)
|
||||
if not proj:
|
||||
raise exc.OpenStackCloudException("project does not exist")
|
||||
raise exceptions.SDKException("project does not exist")
|
||||
|
||||
self.network.update_quota(proj.id, **kwargs)
|
||||
|
||||
@ -656,8 +662,10 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: project name or id
|
||||
:param details: if set to True it will return details about usage
|
||||
of quotas by given project
|
||||
:raises: OpenStackCloudException if it's not a valid project
|
||||
|
||||
:returns: A network ``Quota`` object if found, else None.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if it's not a
|
||||
valid project
|
||||
"""
|
||||
proj = self.identity.find_project(name_or_id, ignore_missing=False)
|
||||
return self.network.get_quota(proj.id, details)
|
||||
@ -673,14 +681,14 @@ class NetworkCloudMixin:
|
||||
"""Delete network quotas for a project
|
||||
|
||||
:param name_or_id: project name or id
|
||||
:raises: OpenStackCloudException if it's not a valid project or the
|
||||
network client call failed
|
||||
|
||||
:returns: dict with the quotas
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if it's not a
|
||||
valid project or the network client call failed
|
||||
"""
|
||||
proj = self.get_project(name_or_id)
|
||||
if not proj:
|
||||
raise exc.OpenStackCloudException("project does not exist")
|
||||
raise exceptions.SDKException("project does not exist")
|
||||
self.network.delete_quota(proj.id)
|
||||
|
||||
@_utils.valid_kwargs(
|
||||
@ -1348,8 +1356,10 @@ class NetworkCloudMixin:
|
||||
:param bool default: Set the QoS policy as default for project.
|
||||
:param string project_id: Specify the project ID this QoS policy
|
||||
will be created on (admin-only).
|
||||
|
||||
:returns: The created network ``QosPolicy`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1380,8 +1390,10 @@ class NetworkCloudMixin:
|
||||
:param bool shared: If True, the QoS policy will be set as shared.
|
||||
:param bool default: If True, the QoS policy will be set as default for
|
||||
project.
|
||||
|
||||
:returns: The updated network ``QosPolicyRule`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1404,7 +1416,7 @@ class NetworkCloudMixin:
|
||||
|
||||
curr_policy = self.network.find_qos_policy(name_or_id)
|
||||
if not curr_policy:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"QoS policy %s not found." % name_or_id
|
||||
)
|
||||
|
||||
@ -1416,8 +1428,8 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the policy being deleted.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1446,10 +1458,11 @@ class NetworkCloudMixin:
|
||||
:param string rule_id: ID of searched rule.
|
||||
:param filters: a dict containing additional filters to use. e.g.
|
||||
{'max_kbps': 1000}
|
||||
|
||||
:returns: A list of network ``QoSBandwidthLimitRule`` objects matching
|
||||
the search criteria.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
rules = self.list_qos_bandwidth_limit_rules(policy_name_or_id, filters)
|
||||
return _utils._filter_list(rules, rule_id, filters)
|
||||
@ -1461,8 +1474,8 @@ class NetworkCloudMixin:
|
||||
from rules should be listed.
|
||||
:param filters: (optional) A dict of filter conditions to push down
|
||||
:returns: A list of network ``QoSBandwidthLimitRule`` objects.
|
||||
:raises: ``OpenStackCloudResourceNotFound`` if QoS policy will not be
|
||||
found.
|
||||
:raises: ``:class:`~openstack.exceptions.BadRequestException``` if QoS
|
||||
policy will not be found.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1471,7 +1484,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1503,7 +1516,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1527,8 +1540,10 @@ class NetworkCloudMixin:
|
||||
:param int max_burst_kbps: Maximum burst value (in kilobits).
|
||||
:param string direction: Ingress or egress.
|
||||
The direction in which the traffic will be limited.
|
||||
|
||||
:returns: The created network ``QoSBandwidthLimitRule`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1537,7 +1552,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1569,8 +1584,10 @@ class NetworkCloudMixin:
|
||||
:param int max_burst_kbps: Maximum burst value (in kilobits).
|
||||
:param string direction: Ingress or egress.
|
||||
The direction in which the traffic will be limited.
|
||||
|
||||
:returns: The updated network ``QoSBandwidthLimitRule`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1581,7 +1598,7 @@ class NetworkCloudMixin:
|
||||
policy_name_or_id, ignore_missing=True
|
||||
)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1603,7 +1620,7 @@ class NetworkCloudMixin:
|
||||
qos_rule=rule_id, qos_policy=policy
|
||||
)
|
||||
if not curr_rule:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"QoS bandwidth_limit_rule {rule_id} not found in policy "
|
||||
"{policy_id}".format(rule_id=rule_id, policy_id=policy['id'])
|
||||
)
|
||||
@ -1619,7 +1636,8 @@ class NetworkCloudMixin:
|
||||
rule is associated.
|
||||
:param string rule_id: ID of rule to update.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1628,7 +1646,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1663,10 +1681,11 @@ class NetworkCloudMixin:
|
||||
:param string rule_id: ID of searched rule.
|
||||
:param filters: a dict containing additional filters to use. e.g.
|
||||
{'dscp_mark': 32}
|
||||
|
||||
:returns: A list of network ``QoSDSCPMarkingRule`` objects matching the
|
||||
search criteria.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
rules = self.list_qos_dscp_marking_rules(policy_name_or_id, filters)
|
||||
return _utils._filter_list(rules, rule_id, filters)
|
||||
@ -1678,8 +1697,8 @@ class NetworkCloudMixin:
|
||||
from rules should be listed.
|
||||
:param filters: (optional) A dict of filter conditions to push down
|
||||
:returns: A list of network ``QoSDSCPMarkingRule`` objects.
|
||||
:raises: ``OpenStackCloudResourceNotFound`` if QoS policy will not be
|
||||
found.
|
||||
:raises: ``:class:`~openstack.exceptions.BadRequestException``` if QoS
|
||||
policy will not be found.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1690,7 +1709,7 @@ class NetworkCloudMixin:
|
||||
policy_name_or_id, ignore_missing=True
|
||||
)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1717,7 +1736,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1735,8 +1754,10 @@ class NetworkCloudMixin:
|
||||
:param string policy_name_or_id: Name or ID of the QoS policy to which
|
||||
rule should be associated.
|
||||
:param int dscp_mark: DSCP mark value
|
||||
|
||||
:returns: The created network ``QoSDSCPMarkingRule`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1745,7 +1766,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1765,8 +1786,10 @@ class NetworkCloudMixin:
|
||||
rule is associated.
|
||||
:param string rule_id: ID of rule to update.
|
||||
:param int dscp_mark: DSCP mark value
|
||||
|
||||
:returns: The updated network ``QoSDSCPMarkingRule`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1775,7 +1798,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1787,7 +1810,7 @@ class NetworkCloudMixin:
|
||||
|
||||
curr_rule = self.network.get_qos_dscp_marking_rule(rule_id, policy)
|
||||
if not curr_rule:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"QoS dscp_marking_rule {rule_id} not found in policy "
|
||||
"{policy_id}".format(rule_id=rule_id, policy_id=policy['id'])
|
||||
)
|
||||
@ -1803,7 +1826,8 @@ class NetworkCloudMixin:
|
||||
rule is associated.
|
||||
:param string rule_id: ID of rule to update.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1812,7 +1836,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1847,10 +1871,11 @@ class NetworkCloudMixin:
|
||||
:param string rule_id: ID of searched rule.
|
||||
:param filters: a dict containing additional filters to use. e.g.
|
||||
{'min_kbps': 1000}
|
||||
|
||||
:returns: A list of network ``QoSMinimumBandwidthRule`` objects
|
||||
matching the search criteria.
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
rules = self.list_qos_minimum_bandwidth_rules(
|
||||
policy_name_or_id, filters
|
||||
@ -1866,8 +1891,8 @@ class NetworkCloudMixin:
|
||||
from rules should be listed.
|
||||
:param filters: (optional) A dict of filter conditions to push down
|
||||
:returns: A list of network ``QoSMinimumBandwidthRule`` objects.
|
||||
:raises: ``OpenStackCloudResourceNotFound`` if QoS policy will not be
|
||||
found.
|
||||
:raises: ``:class:`~openstack.exceptions.BadRequestException``` if QoS
|
||||
policy will not be found.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1876,7 +1901,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1906,7 +1931,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1928,8 +1953,10 @@ class NetworkCloudMixin:
|
||||
:param int min_kbps: Minimum bandwidth value (in kilobits per second).
|
||||
:param string direction: Ingress or egress.
|
||||
The direction in which the traffic will be available.
|
||||
|
||||
:returns: The created network ``QoSMinimumBandwidthRule`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1938,7 +1965,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1960,8 +1987,10 @@ class NetworkCloudMixin:
|
||||
:param int min_kbps: Minimum bandwidth value (in kilobits per second).
|
||||
:param string direction: Ingress or egress.
|
||||
The direction in which the traffic will be available.
|
||||
|
||||
:returns: The updated network ``QoSMinimumBandwidthRule`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -1970,7 +1999,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -1984,7 +2013,7 @@ class NetworkCloudMixin:
|
||||
rule_id, policy
|
||||
)
|
||||
if not curr_rule:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"QoS minimum_bandwidth_rule {rule_id} not found in policy "
|
||||
"{policy_id}".format(rule_id=rule_id, policy_id=policy['id'])
|
||||
)
|
||||
@ -2000,7 +2029,8 @@ class NetworkCloudMixin:
|
||||
rule is associated.
|
||||
:param string rule_id: ID of rule to delete.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not self._has_neutron_extension('qos'):
|
||||
raise exc.OpenStackCloudUnavailableExtension(
|
||||
@ -2009,7 +2039,7 @@ class NetworkCloudMixin:
|
||||
|
||||
policy = self.network.find_qos_policy(policy_name_or_id)
|
||||
if not policy:
|
||||
raise exc.OpenStackCloudResourceNotFound(
|
||||
raise exceptions.NotFoundException(
|
||||
"QoS policy {name_or_id} not Found.".format(
|
||||
name_or_id=policy_name_or_id
|
||||
)
|
||||
@ -2039,8 +2069,10 @@ class NetworkCloudMixin:
|
||||
:param dict router: The dict object of the router being changed
|
||||
:param string subnet_id: The ID of the subnet to use for the interface
|
||||
:param string port_id: The ID of the port to use for the interface
|
||||
|
||||
:returns: The raw response body from the request.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return self.network.add_interface_to_router(
|
||||
router=router, subnet_id=subnet_id, port_id=port_id
|
||||
@ -2060,8 +2092,8 @@ class NetworkCloudMixin:
|
||||
:param string port_id: The ID of the port to use for the interface
|
||||
|
||||
:returns: None on success
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
if not subnet_id and not port_id:
|
||||
raise ValueError(
|
||||
@ -2141,10 +2173,12 @@ class NetworkCloudMixin:
|
||||
]
|
||||
|
||||
:param string project_id: Project ID for the router.
|
||||
:param types.ListType availability_zone_hints:
|
||||
A list of availability zone hints.
|
||||
:param types.ListType availability_zone_hints: A list of availability
|
||||
zone hints.
|
||||
|
||||
:returns: The created network ``Router`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
router = {'admin_state_up': admin_state_up}
|
||||
if project_id is not None:
|
||||
@ -2158,7 +2192,7 @@ class NetworkCloudMixin:
|
||||
router['external_gateway_info'] = ext_gw_info
|
||||
if availability_zone_hints is not None:
|
||||
if not isinstance(availability_zone_hints, list):
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Parameter 'availability_zone_hints' must be a list"
|
||||
)
|
||||
if not self._has_neutron_extension('router_availability_zone'):
|
||||
@ -2213,7 +2247,8 @@ class NetworkCloudMixin:
|
||||
]
|
||||
|
||||
:returns: The updated network ``Router`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
router = {}
|
||||
if name:
|
||||
@ -2240,9 +2275,7 @@ class NetworkCloudMixin:
|
||||
|
||||
curr_router = self.get_router(name_or_id)
|
||||
if not curr_router:
|
||||
raise exc.OpenStackCloudException(
|
||||
"Router %s not found." % name_or_id
|
||||
)
|
||||
raise exceptions.SDKException("Router %s not found." % name_or_id)
|
||||
|
||||
return self.network.update_router(curr_router, **router)
|
||||
|
||||
@ -2256,8 +2289,8 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the router being deleted.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
router = self.network.find_router(name_or_id, ignore_missing=True)
|
||||
if not router:
|
||||
@ -2352,8 +2385,10 @@ class NetworkCloudMixin:
|
||||
``use_default_subnetpool`` and ``subnetpool_name_or_id`` may be
|
||||
specified at the same time.
|
||||
:param kwargs: Key value pairs to be passed to the Neutron API.
|
||||
|
||||
:returns: The created network ``Subnet`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
|
||||
if tenant_id is not None:
|
||||
@ -2363,28 +2398,28 @@ class NetworkCloudMixin:
|
||||
|
||||
network = self.get_network(network_name_or_id, filters)
|
||||
if not network:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Network %s not found." % network_name_or_id
|
||||
)
|
||||
|
||||
if disable_gateway_ip and gateway_ip:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'arg:disable_gateway_ip is not allowed with arg:gateway_ip'
|
||||
)
|
||||
|
||||
uses_subnetpool = use_default_subnetpool or subnetpool_name_or_id
|
||||
if not cidr and not uses_subnetpool:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'arg:cidr is required when a subnetpool is not used'
|
||||
)
|
||||
|
||||
if cidr and uses_subnetpool:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'arg:cidr and subnetpool may not be used at the same time'
|
||||
)
|
||||
|
||||
if use_default_subnetpool and subnetpool_name_or_id:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'arg:use_default_subnetpool and arg:subnetpool_id may not be '
|
||||
'used at the same time'
|
||||
)
|
||||
@ -2393,7 +2428,7 @@ class NetworkCloudMixin:
|
||||
if subnetpool_name_or_id:
|
||||
subnetpool = self.get_subnetpool(subnetpool_name_or_id)
|
||||
if not subnetpool:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Subnetpool %s not found." % subnetpool_name_or_id
|
||||
)
|
||||
|
||||
@ -2402,9 +2437,7 @@ class NetworkCloudMixin:
|
||||
try:
|
||||
ip_version = int(ip_version)
|
||||
except ValueError:
|
||||
raise exc.OpenStackCloudException(
|
||||
'ip_version must be an integer'
|
||||
)
|
||||
raise exceptions.SDKException('ip_version must be an integer')
|
||||
|
||||
# The body of the neutron message for the subnet we wish to create.
|
||||
# This includes attributes that are required or have defaults.
|
||||
@ -2457,8 +2490,8 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: Name or ID of the subnet being deleted.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
subnet = self.network.find_subnet(name_or_id, ignore_missing=True)
|
||||
if not subnet:
|
||||
@ -2522,7 +2555,8 @@ class NetworkCloudMixin:
|
||||
]
|
||||
|
||||
:returns: The updated network ``Subnet`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
subnet = {}
|
||||
if subnet_name:
|
||||
@ -2545,15 +2579,13 @@ class NetworkCloudMixin:
|
||||
return
|
||||
|
||||
if disable_gateway_ip and gateway_ip:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'arg:disable_gateway_ip is not allowed with arg:gateway_ip'
|
||||
)
|
||||
|
||||
curr_subnet = self.get_subnet(name_or_id)
|
||||
if not curr_subnet:
|
||||
raise exc.OpenStackCloudException(
|
||||
"Subnet %s not found." % name_or_id
|
||||
)
|
||||
raise exceptions.SDKException("Subnet %s not found." % name_or_id)
|
||||
|
||||
return self.network.update_subnet(curr_subnet, **subnet)
|
||||
|
||||
@ -2647,8 +2679,10 @@ class NetworkCloudMixin:
|
||||
be propagated. (Optional)
|
||||
:param mac_learning_enabled: If mac learning should be enabled on the
|
||||
port. (Optional)
|
||||
|
||||
:returns: The created network ``Port`` object.
|
||||
:raises: ``OpenStackCloudException`` on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
kwargs['network_id'] = network_id
|
||||
|
||||
@ -2721,12 +2755,14 @@ class NetworkCloudMixin:
|
||||
:param port_security_enabled: The security port state created on
|
||||
the network. (Optional)
|
||||
:param qos_policy_id: The ID of the QoS policy to apply for port.
|
||||
|
||||
:returns: The updated network ``Port`` object.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
port = self.get_port(name_or_id=name_or_id)
|
||||
if port is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"failed to find port '{port}'".format(port=name_or_id)
|
||||
)
|
||||
|
||||
@ -2738,8 +2774,8 @@ class NetworkCloudMixin:
|
||||
:param name_or_id: ID or name of the port to delete.
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
port = self.network.find_port(name_or_id)
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
|
||||
import threading
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
|
||||
|
||||
class NetworkCommonCloudMixin:
|
||||
@ -81,7 +81,7 @@ class NetworkCommonCloudMixin:
|
||||
# though, that's fine, clearly the neutron introspection is
|
||||
# not going to work.
|
||||
all_networks = self.list_networks()
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
self._network_list_stamp = True
|
||||
return
|
||||
|
||||
@ -145,7 +145,7 @@ class NetworkCommonCloudMixin:
|
||||
# External Floating IPv4 networks
|
||||
if self._nat_source in (network['name'], network['id']):
|
||||
if nat_source:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Multiple networks were found matching'
|
||||
' {nat_net} which is the network configured'
|
||||
' to be the NAT source. Please check your'
|
||||
@ -163,7 +163,7 @@ class NetworkCommonCloudMixin:
|
||||
# NAT Destination
|
||||
if self._nat_destination in (network['name'], network['id']):
|
||||
if nat_destination:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Multiple networks were found matching'
|
||||
' {nat_net} which is the network configured'
|
||||
' to be the NAT destination. Please check your'
|
||||
@ -180,7 +180,7 @@ class NetworkCommonCloudMixin:
|
||||
if all_subnets is None:
|
||||
try:
|
||||
all_subnets = self.list_subnets()
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
# Thanks Rackspace broken neutron
|
||||
all_subnets = []
|
||||
|
||||
@ -198,7 +198,7 @@ class NetworkCommonCloudMixin:
|
||||
# Default network
|
||||
if self._default_network in (network['name'], network['id']):
|
||||
if default_network:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Multiple networks were found matching'
|
||||
' {default_net} which is the network'
|
||||
' configured to be the default interface'
|
||||
@ -212,7 +212,7 @@ class NetworkCommonCloudMixin:
|
||||
# Validate config vs. reality
|
||||
for net_name in self._external_ipv4_names:
|
||||
if net_name not in [net['name'] for net in external_ipv4_networks]:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Networks: {network} was provided for external IPv4"
|
||||
" access and those networks could not be found".format(
|
||||
network=net_name
|
||||
@ -221,7 +221,7 @@ class NetworkCommonCloudMixin:
|
||||
|
||||
for net_name in self._internal_ipv4_names:
|
||||
if net_name not in [net['name'] for net in internal_ipv4_networks]:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Networks: {network} was provided for internal IPv4"
|
||||
" access and those networks could not be found".format(
|
||||
network=net_name
|
||||
@ -230,7 +230,7 @@ class NetworkCommonCloudMixin:
|
||||
|
||||
for net_name in self._external_ipv6_names:
|
||||
if net_name not in [net['name'] for net in external_ipv6_networks]:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Networks: {network} was provided for external IPv6"
|
||||
" access and those networks could not be found".format(
|
||||
network=net_name
|
||||
@ -239,7 +239,7 @@ class NetworkCommonCloudMixin:
|
||||
|
||||
for net_name in self._internal_ipv6_names:
|
||||
if net_name not in [net['name'] for net in internal_ipv6_networks]:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Networks: {network} was provided for internal IPv6"
|
||||
" access and those networks could not be found".format(
|
||||
network=net_name
|
||||
@ -247,21 +247,21 @@ class NetworkCommonCloudMixin:
|
||||
)
|
||||
|
||||
if self._nat_destination and not nat_destination:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Network {network} was configured to be the'
|
||||
' destination for inbound NAT but it could not be'
|
||||
' found'.format(network=self._nat_destination)
|
||||
)
|
||||
|
||||
if self._nat_source and not nat_source:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Network {network} was configured to be the'
|
||||
' source for inbound NAT but it could not be'
|
||||
' found'.format(network=self._nat_source)
|
||||
)
|
||||
|
||||
if self._default_network and not default_network:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Network {network} was configured to be the'
|
||||
' default network interface but it could not be'
|
||||
' found'.format(network=self._default_network)
|
||||
|
@ -16,7 +16,6 @@ import urllib.parse
|
||||
import keystoneauth1.exceptions
|
||||
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.object_store.v1._proxy import Proxy
|
||||
|
||||
@ -42,7 +41,8 @@ class ObjectStoreCloudMixin:
|
||||
:param prefix: Only objects with this prefix will be returned.
|
||||
(optional)
|
||||
:returns: A list of object store ``Container`` objects.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return list(self.object_store.containers(prefix=prefix))
|
||||
|
||||
@ -57,8 +57,8 @@ class ObjectStoreCloudMixin:
|
||||
|
||||
:returns: A list of object store ``Container`` objects matching the
|
||||
search criteria.
|
||||
:raises: ``OpenStackCloudException``: If something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException`: If something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
containers = self.list_containers()
|
||||
return _utils._filter_list(containers, name, filters)
|
||||
@ -112,7 +112,7 @@ class ObjectStoreCloudMixin:
|
||||
except exceptions.NotFoundException:
|
||||
return False
|
||||
except exceptions.ConflictException:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
'Attempt to delete container {container} failed. The'
|
||||
' container is not empty. Please delete the objects'
|
||||
' inside it before deleting the container'.format(
|
||||
@ -140,7 +140,7 @@ class ObjectStoreCloudMixin:
|
||||
:param refresh: Flag to trigger refresh of the container properties
|
||||
"""
|
||||
if access not in OBJECT_CONTAINER_ACLS:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Invalid container access specified: %s. Must be one of %s"
|
||||
% (access, list(OBJECT_CONTAINER_ACLS.keys()))
|
||||
)
|
||||
@ -153,13 +153,12 @@ class ObjectStoreCloudMixin:
|
||||
|
||||
:param str name: Name of the container.
|
||||
:returns: The contol list for the container.
|
||||
:raises: :class:`~openstack.exceptions.OpenStackCloudException` if the
|
||||
container was not found or container access could not be
|
||||
determined.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if the container
|
||||
was not found or container access could not be determined.
|
||||
"""
|
||||
container = self.get_container(name, skip_cache=True)
|
||||
if not container:
|
||||
raise exc.OpenStackCloudException("Container not found: %s" % name)
|
||||
raise exceptions.SDKException("Container not found: %s" % name)
|
||||
acl = container.read_ACL or ''
|
||||
for key, value in OBJECT_CONTAINER_ACLS.items():
|
||||
# Convert to string for the comparison because swiftclient
|
||||
@ -167,7 +166,7 @@ class ObjectStoreCloudMixin:
|
||||
# on bytes doesn't work like you'd think
|
||||
if str(acl) == str(value):
|
||||
return key
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Could not determine container access for ACL: %s." % acl
|
||||
)
|
||||
|
||||
@ -281,8 +280,10 @@ class ObjectStoreCloudMixin:
|
||||
uploads of identical data. (optional, defaults to True)
|
||||
:param metadata: This dict will get changed into headers that set
|
||||
metadata of the object
|
||||
|
||||
:returns: The created object store ``Object`` object.
|
||||
:raises: ``OpenStackCloudException`` on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return self.object_store.create_object(
|
||||
container,
|
||||
@ -306,8 +307,10 @@ class ObjectStoreCloudMixin:
|
||||
metadata of the object
|
||||
:param headers: These will be passed through to the object update
|
||||
API as HTTP Headers.
|
||||
|
||||
:returns: None
|
||||
:raises: ``OpenStackCloudException`` on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
meta = metadata.copy() or {}
|
||||
meta.update(**headers)
|
||||
@ -320,8 +323,10 @@ class ObjectStoreCloudMixin:
|
||||
:param full_listing: Ignored. Present for backwards compat
|
||||
:param prefix: Only objects with this prefix will be returned.
|
||||
(optional)
|
||||
|
||||
:returns: A list of object store ``Object`` objects.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
return list(
|
||||
self.object_store.objects(container=container, prefix=prefix)
|
||||
@ -338,8 +343,8 @@ class ObjectStoreCloudMixin:
|
||||
|
||||
:returns: A list of object store ``Object`` objects matching the
|
||||
search criteria.
|
||||
:raises: ``OpenStackCloudException``: If something goes wrong during
|
||||
the OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException`: If something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
objects = self.list_objects(container)
|
||||
return _utils._filter_list(objects, name, filters)
|
||||
@ -351,8 +356,10 @@ class ObjectStoreCloudMixin:
|
||||
:param string name: Name of the object to delete.
|
||||
:param dict meta: Metadata for the object in question. (optional, will
|
||||
be fetched if not provided)
|
||||
|
||||
:returns: True if delete succeeded, False if the object was not found.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
try:
|
||||
self.object_store.delete_object(
|
||||
@ -404,8 +411,10 @@ class ObjectStoreCloudMixin:
|
||||
:param string query_string: Query args for uri. (delimiter, prefix,
|
||||
etc.)
|
||||
:param bool stream: Whether to stream the response or not.
|
||||
|
||||
:returns: A `requests.Response`
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
endpoint = self._get_object_endpoint(container, obj, query_string)
|
||||
return self.object_store.get(endpoint, stream=stream)
|
||||
@ -437,9 +446,11 @@ class ObjectStoreCloudMixin:
|
||||
etc.)
|
||||
:param int resp_chunk_size: Chunk size of data to read. Only used if
|
||||
the results are
|
||||
|
||||
:returns: An iterator over the content or None if the object is not
|
||||
found.
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
try:
|
||||
for ret in self.object_store.stream_object(
|
||||
@ -471,9 +482,11 @@ class ObjectStoreCloudMixin:
|
||||
contents. If this option is given, body in the return tuple will be
|
||||
None. outfile can either be a file path given as a string, or a
|
||||
File like object.
|
||||
|
||||
:returns: Tuple (headers, body) of the object, or None if the object
|
||||
is not found (404).
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
try:
|
||||
obj = self.object_store.get_object(
|
||||
|
@ -11,7 +11,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.orchestration.util import event_utils
|
||||
from openstack.orchestration.v1._proxy import Proxy
|
||||
|
||||
@ -67,9 +67,8 @@ class OrchestrationCloudMixin:
|
||||
specified.
|
||||
|
||||
:returns: a dict containing the stack description
|
||||
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
params = dict(
|
||||
tags=tags,
|
||||
@ -124,9 +123,8 @@ class OrchestrationCloudMixin:
|
||||
specified.
|
||||
|
||||
:returns: a dict containing the stack description
|
||||
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API calls
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API calls
|
||||
"""
|
||||
params = dict(
|
||||
tags=tags,
|
||||
@ -166,9 +164,8 @@ class OrchestrationCloudMixin:
|
||||
:param boolean wait: Whether to wait for the delete to finish
|
||||
|
||||
:returns: True if delete succeeded, False if the stack was not found.
|
||||
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during
|
||||
the OpenStack API call
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call
|
||||
"""
|
||||
stack = self.get_stack(name_or_id, resolve_outputs=False)
|
||||
if stack is None:
|
||||
@ -189,11 +186,11 @@ class OrchestrationCloudMixin:
|
||||
event_utils.poll_for_events(
|
||||
self, stack_name=name_or_id, action='DELETE', marker=marker
|
||||
)
|
||||
except exc.OpenStackCloudHTTPError:
|
||||
except exceptions.HttpException:
|
||||
pass
|
||||
stack = self.get_stack(name_or_id, resolve_outputs=False)
|
||||
if stack and stack['stack_status'] == 'DELETE_FAILED':
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Failed to delete stack {id}: {reason}".format(
|
||||
id=name_or_id, reason=stack['stack_status_reason']
|
||||
)
|
||||
@ -210,9 +207,8 @@ class OrchestrationCloudMixin:
|
||||
|
||||
:returns: a list of ``openstack.orchestration.v1.stack.Stack``
|
||||
containing the stack description.
|
||||
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
stacks = self.list_stacks()
|
||||
return _utils._filter_list(stacks, name_or_id, filters)
|
||||
@ -221,11 +217,11 @@ class OrchestrationCloudMixin:
|
||||
"""List all stacks.
|
||||
|
||||
:param dict query: Query parameters to limit stacks.
|
||||
|
||||
:returns: a list of :class:`openstack.orchestration.v1.stack.Stack`
|
||||
objects containing the stack description.
|
||||
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call.
|
||||
"""
|
||||
return list(self.orchestration.stacks(**query))
|
||||
|
||||
@ -240,9 +236,9 @@ class OrchestrationCloudMixin:
|
||||
|
||||
:returns: a :class:`openstack.orchestration.v1.stack.Stack`
|
||||
containing the stack description
|
||||
|
||||
:raises: ``OpenStackCloudException`` if something goes wrong during the
|
||||
OpenStack API call or if multiple matches are found.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` if something goes
|
||||
wrong during the OpenStack API call or if multiple matches are
|
||||
found.
|
||||
"""
|
||||
|
||||
def _search_one_stack(name_or_id=None, filters=None):
|
||||
@ -256,7 +252,7 @@ class OrchestrationCloudMixin:
|
||||
)
|
||||
if stack.status == 'DELETE_COMPLETE':
|
||||
return []
|
||||
except exc.OpenStackCloudURINotFound:
|
||||
except exceptions.NotFoundException:
|
||||
return []
|
||||
return _utils._filter_list([stack], name_or_id, filters)
|
||||
|
||||
|
@ -128,7 +128,8 @@ class SecurityGroupCloudMixin:
|
||||
:returns: A ``openstack.network.v2.security_group.SecurityGroup``
|
||||
representing the new security group.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
:raises: OpenStackCloudUnavailableFeature if security groups are
|
||||
not supported on this cloud.
|
||||
"""
|
||||
@ -165,7 +166,8 @@ class SecurityGroupCloudMixin:
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
:raises: OpenStackCloudUnavailableFeature if security groups are
|
||||
not supported on this cloud.
|
||||
"""
|
||||
@ -208,8 +210,8 @@ class SecurityGroupCloudMixin:
|
||||
|
||||
:returns: A ``openstack.network.v2.security_group.SecurityGroup``
|
||||
describing the updated security group.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
# Security groups not supported
|
||||
if not self._has_secgroups():
|
||||
@ -220,7 +222,7 @@ class SecurityGroupCloudMixin:
|
||||
group = self.get_security_group(name_or_id)
|
||||
|
||||
if group is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Security group %s not found." % name_or_id
|
||||
)
|
||||
|
||||
@ -298,10 +300,11 @@ class SecurityGroupCloudMixin:
|
||||
on (admin-only).
|
||||
:param string description:
|
||||
Description of the rule, max 255 characters.
|
||||
|
||||
:returns: A ``openstack.network.v2.security_group.SecurityGroup``
|
||||
representing the new security group rule.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
"""
|
||||
# Security groups not supported
|
||||
if not self._has_secgroups():
|
||||
@ -311,7 +314,7 @@ class SecurityGroupCloudMixin:
|
||||
|
||||
secgroup = self.get_security_group(secgroup_name_or_id)
|
||||
if not secgroup:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Security group %s not found." % secgroup_name_or_id
|
||||
)
|
||||
|
||||
@ -341,15 +344,13 @@ class SecurityGroupCloudMixin:
|
||||
else:
|
||||
# NOTE: Neutron accepts None for protocol. Nova does not.
|
||||
if protocol is None:
|
||||
raise exc.OpenStackCloudException('Protocol must be specified')
|
||||
raise exceptions.SDKException('Protocol must be specified')
|
||||
|
||||
if direction == 'egress':
|
||||
self.log.debug(
|
||||
'Rule creation failed: Nova does not support egress rules'
|
||||
)
|
||||
raise exc.OpenStackCloudException(
|
||||
'No support for egress rules'
|
||||
)
|
||||
raise exceptions.SDKException('No support for egress rules')
|
||||
|
||||
# NOTE: Neutron accepts None for ports, but Nova requires -1
|
||||
# as the equivalent value for ICMP.
|
||||
@ -399,7 +400,8 @@ class SecurityGroupCloudMixin:
|
||||
|
||||
:returns: True if delete succeeded, False otherwise.
|
||||
|
||||
:raises: OpenStackCloudException on operation error.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||
error.
|
||||
:raises: OpenStackCloudUnavailableFeature if security groups are
|
||||
not supported on this cloud.
|
||||
"""
|
||||
@ -422,7 +424,7 @@ class SecurityGroupCloudMixin:
|
||||
'/os-security-group-rules/{id}'.format(id=rule_id)
|
||||
)
|
||||
)
|
||||
except exc.OpenStackCloudResourceNotFound:
|
||||
except exceptions.NotFoundException:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
@ -23,7 +23,7 @@ import jmespath
|
||||
import netifaces
|
||||
|
||||
from openstack import _log
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
|
||||
|
||||
def _dictify_resource(resource):
|
||||
@ -177,7 +177,7 @@ def _get_entity(cloud, resource, name_or_id, filters, **kwargs):
|
||||
entities = search(name_or_id, filters, **kwargs)
|
||||
if entities:
|
||||
if len(entities) > 1:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Multiple matches found for %s" % name_or_id
|
||||
)
|
||||
return entities[0]
|
||||
@ -231,24 +231,24 @@ def openstacksdk_exceptions(error_message=None):
|
||||
"""Context manager for dealing with openstack exceptions.
|
||||
|
||||
:param string error_message: String to use for the exception message
|
||||
content on non-OpenStackCloudExceptions.
|
||||
content on non-SDKException exception.
|
||||
|
||||
Useful for avoiding wrapping OpenStackCloudException exceptions
|
||||
Useful for avoiding wrapping SDKException exceptions
|
||||
within themselves. Code called from within the context may throw such
|
||||
exceptions without having to catch and reraise them.
|
||||
|
||||
Non-OpenStackCloudException exceptions thrown within the context will
|
||||
Non-SDKException exceptions thrown within the context will
|
||||
be wrapped and the exception message will be appended to the given
|
||||
error message.
|
||||
"""
|
||||
try:
|
||||
yield
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
raise
|
||||
except Exception as e:
|
||||
if error_message is None:
|
||||
error_message = str(e)
|
||||
raise exc.OpenStackCloudException(error_message)
|
||||
raise exceptions.SDKException(error_message)
|
||||
|
||||
|
||||
def safe_dict_min(key, data):
|
||||
@ -273,7 +273,7 @@ def safe_dict_min(key, data):
|
||||
try:
|
||||
val = int(d[key])
|
||||
except ValueError:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Search for minimum value failed. "
|
||||
"Value for {key} is not an integer: {value}".format(
|
||||
key=key, value=d[key]
|
||||
@ -306,7 +306,7 @@ def safe_dict_max(key, data):
|
||||
try:
|
||||
val = int(d[key])
|
||||
except ValueError:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Search for maximum value failed. "
|
||||
"Value for {key} is not an integer: {value}".format(
|
||||
key=key, value=d[key]
|
||||
@ -360,7 +360,8 @@ def range_filter(data, key, range_exp):
|
||||
:param string range_exp: The expression describing the range of values.
|
||||
|
||||
:returns: A list subset of the original data set.
|
||||
:raises: OpenStackCloudException on invalid range expressions.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on invalid range
|
||||
expressions.
|
||||
"""
|
||||
filtered = []
|
||||
range_exp = str(range_exp).upper()
|
||||
@ -388,7 +389,7 @@ def range_filter(data, key, range_exp):
|
||||
|
||||
# If parsing the range fails, it must be a bad value.
|
||||
if val_range is None:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Invalid range value: {value}".format(value=range_exp)
|
||||
)
|
||||
|
||||
|
@ -21,6 +21,7 @@ import yaml
|
||||
|
||||
import openstack.cloud
|
||||
import openstack.cloud.inventory
|
||||
from openstack import exceptions
|
||||
|
||||
|
||||
def output_format_dict(data, use_yaml):
|
||||
@ -76,7 +77,7 @@ def main():
|
||||
elif args.host:
|
||||
output = inventory.get_host(args.host)
|
||||
print(output_format_dict(output, args.yaml))
|
||||
except openstack.cloud.OpenStackCloudException as e:
|
||||
except exceptions.SDKException as e:
|
||||
sys.stderr.write(e.message + '\n')
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
|
@ -15,7 +15,6 @@
|
||||
from openstack import exceptions
|
||||
|
||||
OpenStackCloudException = exceptions.SDKException
|
||||
OpenStackCloudTimeout = exceptions.ResourceTimeout
|
||||
|
||||
|
||||
class OpenStackCloudCreateException(OpenStackCloudException):
|
||||
@ -39,6 +38,7 @@ class OpenStackCloudUnavailableFeature(OpenStackCloudException):
|
||||
|
||||
|
||||
# Backwards compat
|
||||
OpenStackCloudTimeout = exceptions.ResourceTimeout
|
||||
OpenStackCloudHTTPError = exceptions.HttpException
|
||||
OpenStackCloudBadRequest = exceptions.BadRequestException
|
||||
OpenStackCloudURINotFound = exceptions.NotFoundException
|
||||
|
@ -74,7 +74,7 @@ class OpenStackInventory:
|
||||
detailed=expand, all_projects=all_projects
|
||||
):
|
||||
hostvars.append(server)
|
||||
except exceptions.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
# Don't fail on one particular cloud as others may work
|
||||
if fail_on_cloud_config:
|
||||
raise
|
||||
|
@ -16,7 +16,7 @@ import ipaddress
|
||||
import socket
|
||||
|
||||
from openstack import _log
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack import utils
|
||||
|
||||
|
||||
@ -452,7 +452,7 @@ def _get_supplemental_addresses(cloud, server):
|
||||
server['addresses'][fixed_net].append(
|
||||
_make_address_dict(fip, port)
|
||||
)
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
# If something goes wrong with a cloud call, that's cool - this is
|
||||
# an attempt to provide additional data and should not block forward
|
||||
# progress
|
||||
@ -498,7 +498,7 @@ def add_server_interfaces(cloud, server):
|
||||
def expand_server_security_groups(cloud, server):
|
||||
try:
|
||||
groups = cloud.list_server_security_groups(server)
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
groups = []
|
||||
server['security_groups'] = groups or []
|
||||
|
||||
@ -550,7 +550,7 @@ def get_hostvars_from_server(cloud, server, mounts=None):
|
||||
# Make things easier to consume elsewhere
|
||||
volume['device'] = volume['attachments'][0]['device']
|
||||
volumes.append(volume)
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
pass
|
||||
server_vars['volumes'] = volumes
|
||||
if mounts:
|
||||
|
@ -24,7 +24,6 @@ import requestsexceptions
|
||||
from openstack import _log
|
||||
from openstack.cloud import _object_store
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack.cloud import meta
|
||||
import openstack.config
|
||||
from openstack.config import cloud_region as cloud_region_mod
|
||||
@ -445,7 +444,8 @@ class _OpenStackCloudMixin:
|
||||
{"vcpus": "<=5", "ram": "<=2048", "disk": "1"}
|
||||
|
||||
:returns: A list subset of the original data set.
|
||||
:raises: OpenStackCloudException on invalid range expressions.
|
||||
:raises: :class:`~openstack.exceptions.SDKException` on invalid range
|
||||
expressions.
|
||||
"""
|
||||
filtered = []
|
||||
|
||||
@ -491,10 +491,10 @@ class _OpenStackCloudMixin:
|
||||
"Endpoint not found in %s cloud: %s", self.name, str(e)
|
||||
)
|
||||
endpoint = None
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
raise
|
||||
except Exception as e:
|
||||
raise exc.OpenStackCloudException(
|
||||
raise exceptions.SDKException(
|
||||
"Error getting {service} endpoint on {cloud}:{region}:"
|
||||
" {error}".format(
|
||||
service=service_key,
|
||||
@ -525,7 +525,7 @@ class _OpenStackCloudMixin:
|
||||
kwargs['min_version'] = version
|
||||
kwargs['max_version'] = version
|
||||
endpoint = self.get_session_endpoint(service_key, **kwargs)
|
||||
except exc.OpenStackCloudException:
|
||||
except exceptions.SDKException:
|
||||
return False
|
||||
if endpoint:
|
||||
return True
|
||||
|
@ -32,9 +32,6 @@ class SDKException(Exception):
|
||||
super(SDKException, self).__init__(self.message)
|
||||
|
||||
|
||||
OpenStackCloudException = SDKException
|
||||
|
||||
|
||||
class EndpointNotFound(SDKException):
|
||||
"""A mismatch occurred between what the client and server expect."""
|
||||
|
||||
@ -274,3 +271,7 @@ class ServiceDisabledException(ConfigException):
|
||||
|
||||
class ServiceDiscoveryException(SDKException):
|
||||
"""The service cannot be discovered."""
|
||||
|
||||
|
||||
# Backwards compatibility
|
||||
OpenStackCloudException = SDKException
|
||||
|
@ -13,8 +13,7 @@
|
||||
import os
|
||||
import warnings
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack import exceptions as exc
|
||||
from openstack.image.v1 import image as _image
|
||||
from openstack import proxy
|
||||
from openstack import utils
|
||||
@ -128,7 +127,7 @@ class Proxy(proxy.Proxy):
|
||||
or 'all_stores' in kwargs
|
||||
or 'all_stores_must_succeed' in kwargs
|
||||
):
|
||||
raise exceptions.InvalidRequest(
|
||||
raise exc.InvalidRequest(
|
||||
"Glance v1 does not support stores or image import"
|
||||
)
|
||||
|
||||
@ -151,7 +150,7 @@ class Proxy(proxy.Proxy):
|
||||
container_format = 'bare'
|
||||
|
||||
if data and filename:
|
||||
raise exceptions.SDKException(
|
||||
raise exc.SDKException(
|
||||
'Passing filename and data simultaneously is not supported'
|
||||
)
|
||||
|
||||
@ -163,7 +162,7 @@ class Proxy(proxy.Proxy):
|
||||
)
|
||||
|
||||
if validate_checksum and data and not isinstance(data, bytes):
|
||||
raise exceptions.SDKException(
|
||||
raise exc.SDKException(
|
||||
'Validating checksum is not possible when data is not a '
|
||||
'direct binary object'
|
||||
)
|
||||
@ -301,11 +300,11 @@ class Proxy(proxy.Proxy):
|
||||
data=image_data,
|
||||
),
|
||||
)
|
||||
except exc.OpenStackCloudHTTPError:
|
||||
except exc.HttpException:
|
||||
self.log.debug("Deleting failed upload of image %s", name)
|
||||
try:
|
||||
self.delete('/images/{id}'.format(id=image.id))
|
||||
except exc.OpenStackCloudHTTPError:
|
||||
except exc.HttpException:
|
||||
# We're just trying to clean up - if it doesn't work - shrug
|
||||
self.log.warning(
|
||||
"Failed deleting image after we failed uploading it.",
|
||||
|
@ -394,7 +394,8 @@ class Proxy(proxy.Proxy):
|
||||
:param metadata: This dict will get changed into headers that set
|
||||
metadata of the object
|
||||
|
||||
:raises: ``OpenStackCloudException`` on operation error.
|
||||
:raises: ``:class:`~openstack.exceptions.SDKException``` on operation
|
||||
error.
|
||||
"""
|
||||
if data is not None and filename:
|
||||
raise ValueError(
|
||||
|
@ -21,7 +21,7 @@ import datetime
|
||||
|
||||
from fixtures import TimeoutException
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
from openstack import utils
|
||||
|
||||
@ -52,7 +52,7 @@ class TestCompute(base.BaseFunctionalTest):
|
||||
for volume in volumes:
|
||||
if volume.status != 'deleting':
|
||||
self.user_cloud.delete_volume(volume.id, wait=True)
|
||||
except (exc.OpenStackCloudTimeout, TimeoutException):
|
||||
except (exceptions.ResourceTimeout, TimeoutException):
|
||||
# Ups, some timeout occured during process of deletion server
|
||||
# or volumes, so now we will try to call delete each of them
|
||||
# once again and we will try to live with it
|
||||
@ -197,7 +197,7 @@ class TestCompute(base.BaseFunctionalTest):
|
||||
def test_list_all_servers_bad_permissions(self):
|
||||
# Normal users are not allowed to pass all_projects=True
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.user_cloud.list_servers,
|
||||
all_projects=True,
|
||||
)
|
||||
@ -252,7 +252,7 @@ class TestCompute(base.BaseFunctionalTest):
|
||||
|
||||
def test_get_server_console_bad_server(self):
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.user_cloud.get_server_console,
|
||||
server=self.server_name,
|
||||
)
|
||||
@ -525,7 +525,7 @@ class TestCompute(base.BaseFunctionalTest):
|
||||
self.assertEqual(set(updated_server.metadata.items()), set([]))
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudURINotFound,
|
||||
exceptions.NotFoundException,
|
||||
self.user_cloud.delete_server_metadata,
|
||||
self.server_name,
|
||||
['key1'],
|
||||
|
@ -17,7 +17,7 @@ test_domain
|
||||
Functional tests for keystone domain resource.
|
||||
"""
|
||||
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -45,9 +45,7 @@ class TestDomain(base.BaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise openstack.cloud.OpenStackCloudException(
|
||||
'\n'.join(exception_list)
|
||||
)
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_search_domains(self):
|
||||
domain_name = self.domain_prefix + '_search'
|
||||
|
@ -22,8 +22,8 @@ Functional tests for endpoint resource.
|
||||
import random
|
||||
import string
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack.cloud.exc import OpenStackCloudUnavailableFeature
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -65,7 +65,7 @@ class TestEndpoints(base.KeystoneBaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _cleanup_services(self):
|
||||
exception_list = list()
|
||||
@ -82,7 +82,7 @@ class TestEndpoints(base.KeystoneBaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_endpoint(self):
|
||||
service_name = self.new_item_name + '_create'
|
||||
|
@ -19,7 +19,7 @@ test_flavor
|
||||
Functional tests for flavor resource.
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -47,7 +47,7 @@ class TestFlavor(base.BaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_flavor(self):
|
||||
if not self.operator_cloud:
|
||||
|
@ -24,8 +24,8 @@ import sys
|
||||
|
||||
from testtools import content
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack.cloud import meta
|
||||
from openstack import exceptions
|
||||
from openstack import proxy
|
||||
from openstack.tests.functional import base
|
||||
from openstack import utils
|
||||
@ -116,7 +116,7 @@ class TestFloatingIP(base.BaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _cleanup_ips(self, server):
|
||||
exception_list = list()
|
||||
@ -137,7 +137,7 @@ class TestFloatingIP(base.BaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _setup_networks(self):
|
||||
if self.user_cloud.has_service('network'):
|
||||
|
@ -17,7 +17,7 @@ test_groups
|
||||
Functional tests for keystone group resource.
|
||||
"""
|
||||
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -46,9 +46,7 @@ class TestGroup(base.BaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise openstack.cloud.OpenStackCloudException(
|
||||
'\n'.join(exception_list)
|
||||
)
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_group(self):
|
||||
group_name = self.group_prefix + '_create'
|
||||
|
@ -20,7 +20,7 @@ Functional tests for identity methods.
|
||||
import random
|
||||
import string
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -53,7 +53,7 @@ class TestIdentity(base.KeystoneBaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _cleanup_users(self):
|
||||
exception_list = list()
|
||||
@ -66,7 +66,7 @@ class TestIdentity(base.KeystoneBaseFunctionalTest):
|
||||
continue
|
||||
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _cleanup_roles(self):
|
||||
exception_list = list()
|
||||
@ -79,7 +79,7 @@ class TestIdentity(base.KeystoneBaseFunctionalTest):
|
||||
continue
|
||||
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _create_user(self, **kwargs):
|
||||
domain_id = None
|
||||
|
@ -17,7 +17,7 @@ test_network
|
||||
Functional tests for network methods.
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ class TestNetwork(base.BaseFunctionalTest):
|
||||
continue
|
||||
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_network_basic(self):
|
||||
net1 = self.operator_cloud.create_network(name=self.network_name)
|
||||
|
@ -23,7 +23,7 @@ import tempfile
|
||||
|
||||
from testtools import content
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -97,7 +97,7 @@ class TestObject(base.BaseFunctionalTest):
|
||||
self.assertIsNotNone(
|
||||
self.user_cloud.get_object(container_name, name)
|
||||
)
|
||||
except exc.OpenStackCloudException as e:
|
||||
except exceptions.SDKException as e:
|
||||
self.addDetail(
|
||||
'failed_response',
|
||||
content.text_content(str(e.response.headers)),
|
||||
@ -186,7 +186,7 @@ class TestObject(base.BaseFunctionalTest):
|
||||
)
|
||||
downloaded_content = open(fake_file.name, 'rb').read()
|
||||
self.assertEqual(fake_content, downloaded_content)
|
||||
except exc.OpenStackCloudException as e:
|
||||
except exceptions.SDKException as e:
|
||||
self.addDetail(
|
||||
'failed_response',
|
||||
content.text_content(str(e.response.headers)),
|
||||
|
@ -22,7 +22,7 @@ Functional tests for port resource.
|
||||
import random
|
||||
import string
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -59,7 +59,7 @@ class TestPort(base.BaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_port(self):
|
||||
port_name = self.new_port_name + '_create'
|
||||
|
@ -20,7 +20,7 @@ Functional tests for project resource.
|
||||
"""
|
||||
import pprint
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ class TestProject(base.KeystoneBaseFunctionalTest):
|
||||
exception_list.append(str(e))
|
||||
continue
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_project(self):
|
||||
project_name = self.new_project_name + '_create'
|
||||
|
@ -18,7 +18,7 @@ test_qos_bandwidth_limit_rule
|
||||
Functional tests for QoS bandwidth limit methods.
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -41,7 +41,7 @@ class TestQosBandwidthLimitRule(base.BaseFunctionalTest):
|
||||
try:
|
||||
self.operator_cloud.delete_qos_policy(self.policy['id'])
|
||||
except Exception as e:
|
||||
raise OpenStackCloudException(e)
|
||||
raise exceptions.SDKException(e)
|
||||
|
||||
def test_qos_bandwidth_limit_rule_lifecycle(self):
|
||||
max_kbps = 1500
|
||||
|
@ -18,7 +18,7 @@ test_qos_dscp_marking_rule
|
||||
Functional tests for QoS DSCP marking rule methods.
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -41,7 +41,7 @@ class TestQosDscpMarkingRule(base.BaseFunctionalTest):
|
||||
try:
|
||||
self.operator_cloud.delete_qos_policy(self.policy['id'])
|
||||
except Exception as e:
|
||||
raise OpenStackCloudException(e)
|
||||
raise exceptions.SDKException(e)
|
||||
|
||||
def test_qos_dscp_marking_rule_lifecycle(self):
|
||||
dscp_mark = 16
|
||||
|
@ -18,7 +18,7 @@ test_qos_minumum_bandwidth_rule
|
||||
Functional tests for QoS minimum bandwidth methods.
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -41,7 +41,7 @@ class TestQosMinimumBandwidthRule(base.BaseFunctionalTest):
|
||||
try:
|
||||
self.operator_cloud.delete_qos_policy(self.policy['id'])
|
||||
except Exception as e:
|
||||
raise OpenStackCloudException(e)
|
||||
raise exceptions.SDKException(e)
|
||||
|
||||
def test_qos_minimum_bandwidth_rule_lifecycle(self):
|
||||
min_kbps = 1500
|
||||
|
@ -18,7 +18,7 @@ test_qos_policy
|
||||
Functional tests for QoS policies methods.
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ class TestQosPolicy(base.BaseFunctionalTest):
|
||||
continue
|
||||
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_qos_policy_basic(self):
|
||||
policy = self.operator_cloud.create_qos_policy(name=self.policy_name)
|
||||
|
@ -12,7 +12,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -28,7 +28,7 @@ class TestRangeSearch(base.BaseFunctionalTest):
|
||||
def test_range_search_bad_range(self):
|
||||
flavors = self.user_cloud.list_flavors(get_extra=False)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.user_cloud.range_search,
|
||||
flavors,
|
||||
{"ram": "<1a0"},
|
||||
|
@ -19,7 +19,7 @@ Functional tests for router methods.
|
||||
|
||||
import ipaddress
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -64,7 +64,7 @@ class TestRouter(base.BaseFunctionalTest):
|
||||
continue
|
||||
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _cleanup_networks(self):
|
||||
exception_list = list()
|
||||
@ -77,7 +77,7 @@ class TestRouter(base.BaseFunctionalTest):
|
||||
continue
|
||||
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _cleanup_subnets(self):
|
||||
exception_list = list()
|
||||
@ -90,7 +90,7 @@ class TestRouter(base.BaseFunctionalTest):
|
||||
continue
|
||||
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_router_basic(self):
|
||||
net1_name = self.network_prefix + '_net1'
|
||||
|
@ -22,8 +22,8 @@ Functional tests for service resource.
|
||||
import random
|
||||
import string
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack.cloud.exc import OpenStackCloudUnavailableFeature
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@ class TestServices(base.KeystoneBaseFunctionalTest):
|
||||
if exception_list:
|
||||
# Raise an error: we must make users aware that something went
|
||||
# wrong
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def test_create_service(self):
|
||||
service = self.operator_cloud.create_service(
|
||||
@ -72,7 +72,7 @@ class TestServices(base.KeystoneBaseFunctionalTest):
|
||||
if ver.startswith('2'):
|
||||
# NOTE(SamYaple): Update service only works with v3 api
|
||||
self.assertRaises(
|
||||
OpenStackCloudUnavailableFeature,
|
||||
exc.OpenStackCloudUnavailableFeature,
|
||||
self.operator_cloud.update_service,
|
||||
'service_id',
|
||||
name='new name',
|
||||
|
@ -19,7 +19,7 @@ Functional tests for stack methods.
|
||||
|
||||
import tempfile
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.functional import base
|
||||
|
||||
@ -88,7 +88,7 @@ class TestStack(base.BaseFunctionalTest):
|
||||
test_template.close()
|
||||
stack_name = self.getUniqueString('validate_template')
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.user_cloud.create_stack,
|
||||
name=stack_name,
|
||||
template_file=test_template.name,
|
||||
|
@ -17,7 +17,7 @@ test_users
|
||||
Functional tests for user methods.
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -41,7 +41,7 @@ class TestUsers(base.KeystoneBaseFunctionalTest):
|
||||
continue
|
||||
|
||||
if exception_list:
|
||||
raise OpenStackCloudException('\n'.join(exception_list))
|
||||
raise exceptions.SDKException('\n'.join(exception_list))
|
||||
|
||||
def _create_user(self, **kwargs):
|
||||
domain_id = None
|
||||
|
@ -20,7 +20,7 @@ Functional tests for block storage methods.
|
||||
from fixtures import TimeoutException
|
||||
from testtools import content
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
from openstack import utils
|
||||
|
||||
@ -123,7 +123,7 @@ class TestVolume(base.BaseFunctionalTest):
|
||||
break
|
||||
if not found:
|
||||
break
|
||||
except (exc.OpenStackCloudTimeout, TimeoutException):
|
||||
except (exceptions.ResourceTimeout, TimeoutException):
|
||||
# NOTE(slaweq): ups, some volumes are still not removed
|
||||
# so we should try to force delete it once again and move
|
||||
# forward
|
||||
|
@ -20,7 +20,7 @@ Functional tests for block storage methods.
|
||||
"""
|
||||
import testtools
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.functional import base
|
||||
|
||||
|
||||
@ -94,7 +94,7 @@ class TestVolumeType(base.BaseFunctionalTest):
|
||||
|
||||
def test_add_volume_type_access_missing_volume(self):
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException, "VolumeType not found.*"
|
||||
exceptions.SDKException, "VolumeType not found.*"
|
||||
):
|
||||
self.operator_cloud.add_volume_type_access(
|
||||
'MISSING_VOLUME_TYPE', self.operator_cloud.current_project_id
|
||||
@ -102,7 +102,7 @@ class TestVolumeType(base.BaseFunctionalTest):
|
||||
|
||||
def test_remove_volume_type_access_missing_volume(self):
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException, "VolumeType not found.*"
|
||||
exceptions.SDKException, "VolumeType not found.*"
|
||||
):
|
||||
self.operator_cloud.remove_volume_type_access(
|
||||
'MISSING_VOLUME_TYPE', self.operator_cloud.current_project_id
|
||||
@ -110,7 +110,7 @@ class TestVolumeType(base.BaseFunctionalTest):
|
||||
|
||||
def test_add_volume_type_access_bad_project(self):
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudBadRequest, "Unable to authorize.*"
|
||||
exceptions.BadRequestException, "Unable to authorize.*"
|
||||
):
|
||||
self.operator_cloud.add_volume_type_access(
|
||||
'test-volume-type', 'BAD_PROJECT_ID'
|
||||
@ -118,7 +118,7 @@ class TestVolumeType(base.BaseFunctionalTest):
|
||||
|
||||
def test_remove_volume_type_access_missing_project(self):
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudURINotFound, "Unable to revoke.*"
|
||||
exceptions.NotFoundException, "Unable to revoke.*"
|
||||
):
|
||||
self.operator_cloud.remove_volume_type_access(
|
||||
'test-volume-type', '00000000000000000000000000000000'
|
||||
|
@ -18,7 +18,7 @@ from uuid import uuid4
|
||||
import testtools
|
||||
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
|
||||
RANGE_DATA = [
|
||||
@ -200,7 +200,7 @@ class TestUtils(base.TestCase):
|
||||
"""Test non-integer key value raises OSCE"""
|
||||
data = [{'f1': 3}, {'f1': "aaa"}, {'f1': 1}]
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Search for minimum value failed. "
|
||||
"Value for f1 is not an integer: aaa",
|
||||
):
|
||||
@ -240,7 +240,7 @@ class TestUtils(base.TestCase):
|
||||
"""Test non-integer key value raises OSCE"""
|
||||
data = [{'f1': 3}, {'f1': "aaa"}, {'f1': 1}]
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Search for maximum value failed. "
|
||||
"Value for f1 is not an integer: aaa",
|
||||
):
|
||||
@ -308,13 +308,13 @@ class TestUtils(base.TestCase):
|
||||
|
||||
def test_range_filter_invalid_int(self):
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException, "Invalid range value: <1A0"
|
||||
exceptions.SDKException, "Invalid range value: <1A0"
|
||||
):
|
||||
_utils.range_filter(RANGE_DATA, "key1", "<1A0")
|
||||
|
||||
def test_range_filter_invalid_op(self):
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException, "Invalid range value: <>100"
|
||||
exceptions.SDKException, "Invalid range value: <>100"
|
||||
):
|
||||
_utils.range_filter(RANGE_DATA, "key1", "<>100")
|
||||
|
||||
|
@ -21,7 +21,6 @@ import uuid
|
||||
|
||||
from testscenarios import load_tests_apply_scenarios as load_tests # noqa
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import port as _port
|
||||
from openstack.tests import fakes
|
||||
@ -319,7 +318,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.inspect_machine,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
wait=True,
|
||||
@ -344,7 +343,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaisesRegex(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'associated with an instance',
|
||||
self.cloud.inspect_machine,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
@ -744,7 +743,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.inspect_machine,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
wait=True,
|
||||
@ -985,7 +984,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.set_machine_power_reboot,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
)
|
||||
@ -1195,7 +1194,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.node_set_provision_state,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
'active',
|
||||
@ -1267,7 +1266,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.node_set_provision_state,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
'active',
|
||||
@ -1378,7 +1377,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.wait_for_baremetal_node_lock,
|
||||
self.fake_baremetal_node,
|
||||
timeout=0.001,
|
||||
@ -1742,7 +1741,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.register_machine,
|
||||
nics,
|
||||
**node_to_post
|
||||
@ -1807,7 +1806,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
# state to the API is essentially a busy state that we
|
||||
# want to block on until it has cleared.
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.register_machine,
|
||||
nics,
|
||||
timeout=0.001,
|
||||
@ -1897,7 +1896,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.register_machine,
|
||||
nics,
|
||||
wait=True,
|
||||
@ -1946,7 +1945,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaisesRegex(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'no ports for you',
|
||||
self.cloud.register_machine,
|
||||
nics,
|
||||
@ -2012,7 +2011,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaisesRegex(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'no ports for you',
|
||||
self.cloud.register_machine,
|
||||
nics,
|
||||
@ -2101,7 +2100,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.unregister_machine,
|
||||
nics,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
@ -2211,7 +2210,7 @@ class TestBaremetalNode(base.IronicTestCase):
|
||||
|
||||
for state in invalid_states:
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.unregister_machine,
|
||||
nics,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
|
@ -19,7 +19,7 @@ Tests for baremetal port related operations
|
||||
|
||||
from testscenarios import load_tests_apply_scenarios as load_tests # noqa
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -71,7 +71,7 @@ class TestBaremetalPort(base.IronicTestCase):
|
||||
)
|
||||
]
|
||||
)
|
||||
self.assertRaises(exc.OpenStackCloudException, self.cloud.list_nics)
|
||||
self.assertRaises(exceptions.SDKException, self.cloud.list_nics)
|
||||
self.assert_calls()
|
||||
|
||||
def test_list_nics_for_machine(self):
|
||||
@ -121,7 +121,7 @@ class TestBaremetalPort(base.IronicTestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.list_nics_for_machine,
|
||||
self.fake_baremetal_node['uuid'],
|
||||
)
|
||||
|
@ -15,8 +15,8 @@ import uuid
|
||||
|
||||
import testtools
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import connection
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
from openstack import utils
|
||||
|
||||
@ -145,7 +145,7 @@ class TestCloud(base.TestCase):
|
||||
|
||||
def test_iterate_timeout_bad_wait(self):
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Wait value must be an int or float value.",
|
||||
):
|
||||
for count in utils.iterate_timeout(
|
||||
@ -174,7 +174,7 @@ class TestCloud(base.TestCase):
|
||||
@mock.patch('time.sleep')
|
||||
def test_iterate_timeout_timeout(self, mock_sleep):
|
||||
message = "timeout test"
|
||||
with testtools.ExpectedException(exc.OpenStackCloudTimeout, message):
|
||||
with testtools.ExpectedException(exceptions.ResourceTimeout, message):
|
||||
for count in utils.iterate_timeout(0.1, message, wait=1):
|
||||
pass
|
||||
mock_sleep.assert_called_with(1.0)
|
||||
|
@ -210,9 +210,9 @@ class TestClusterTemplates(base.TestCase):
|
||||
# for matching the old error message text. Investigate plumbing
|
||||
# an error message in to the adapter call so that we can give a
|
||||
# more informative error. Also, the test was originally catching
|
||||
# OpenStackCloudException - but for some reason testtools will not
|
||||
# SDKException - but for some reason testtools will not
|
||||
# match the more specific HTTPError, even though it's a subclass
|
||||
# of OpenStackCloudException.
|
||||
# of SDKException.
|
||||
with testtools.ExpectedException(exceptions.ForbiddenException):
|
||||
self.cloud.create_cluster_template('fake-cluster-template')
|
||||
self.assert_calls()
|
||||
|
@ -12,7 +12,6 @@
|
||||
|
||||
import uuid
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
@ -495,6 +494,6 @@ class TestServers(base.TestCase):
|
||||
]
|
||||
)
|
||||
|
||||
self.assertRaises(exc.OpenStackCloudException, self.cloud.list_servers)
|
||||
self.assertRaises(exceptions.SDKException, self.cloud.list_servers)
|
||||
|
||||
self.assert_calls()
|
||||
|
@ -21,10 +21,10 @@ import base64
|
||||
from unittest import mock
|
||||
import uuid
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack.cloud import meta
|
||||
from openstack.compute.v2 import server
|
||||
from openstack import connection
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -81,7 +81,7 @@ class TestCreateServer(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_server,
|
||||
'server-name',
|
||||
{'id': 'image-id'},
|
||||
@ -135,7 +135,7 @@ class TestCreateServer(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_server,
|
||||
'server-name',
|
||||
{'id': 'image-id'},
|
||||
@ -196,7 +196,7 @@ class TestCreateServer(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_server,
|
||||
'server-name',
|
||||
dict(id='image-id'),
|
||||
@ -251,7 +251,7 @@ class TestCreateServer(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudTimeout,
|
||||
exceptions.ResourceTimeout,
|
||||
self.cloud.create_server,
|
||||
'server-name',
|
||||
dict(id='image-id'),
|
||||
@ -815,7 +815,7 @@ class TestCreateServer(base.TestCase):
|
||||
mock_add_ips_to_server.return_value = fake_server
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_server,
|
||||
'server-name',
|
||||
{'id': 'image-id'},
|
||||
@ -1179,7 +1179,7 @@ class TestCreateServer(base.TestCase):
|
||||
self.use_nothing()
|
||||
fixed_ip = '10.0.0.1'
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_server,
|
||||
'server-name',
|
||||
dict(id='image-id'),
|
||||
|
@ -18,8 +18,8 @@ Tests for the `create_volume_snapshot` command.
|
||||
"""
|
||||
|
||||
from openstack.block_storage.v3 import snapshot
|
||||
from openstack.cloud import exc
|
||||
from openstack.cloud import meta
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -125,7 +125,7 @@ class TestCreateVolumeSnapshot(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudTimeout,
|
||||
exceptions.ResourceTimeout,
|
||||
self.cloud.create_volume_snapshot,
|
||||
volume_id=volume_id,
|
||||
wait=True,
|
||||
@ -181,7 +181,7 @@ class TestCreateVolumeSnapshot(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_volume_snapshot,
|
||||
volume_id=volume_id,
|
||||
wait=True,
|
||||
|
@ -18,7 +18,7 @@ Tests for the `delete_server` command.
|
||||
"""
|
||||
import uuid
|
||||
|
||||
from openstack.cloud import exc as shade_exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -204,7 +204,7 @@ class TestDeleteServer(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
shade_exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_server,
|
||||
'speedy',
|
||||
wait=False,
|
||||
|
@ -17,8 +17,8 @@ test_delete_volume_snapshot
|
||||
Tests for the `delete_volume_snapshot` command.
|
||||
"""
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack.cloud import meta
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -66,7 +66,7 @@ class TestDeleteVolumeSnapshot(base.TestCase):
|
||||
def test_delete_volume_snapshot_with_error(self):
|
||||
"""
|
||||
Test that a exception while deleting a volume snapshot will cause an
|
||||
OpenStackCloudException.
|
||||
SDKException.
|
||||
"""
|
||||
fake_snapshot = fakes.FakeVolumeSnapshot(
|
||||
'1234', 'available', 'foo', 'derpysnapshot'
|
||||
@ -94,7 +94,7 @@ class TestDeleteVolumeSnapshot(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_volume_snapshot,
|
||||
name_or_id='1234',
|
||||
)
|
||||
@ -138,7 +138,7 @@ class TestDeleteVolumeSnapshot(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudTimeout,
|
||||
exceptions.ResourceTimeout,
|
||||
self.cloud.delete_volume_snapshot,
|
||||
name_or_id='1234',
|
||||
wait=True,
|
||||
|
@ -10,7 +10,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ class TestDomainParams(base.TestCase):
|
||||
project_data = self._get_project_data(v3=True)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud._get_identity_params,
|
||||
domain_id=None,
|
||||
project=project_data.project_name,
|
||||
|
@ -18,7 +18,7 @@ import uuid
|
||||
import testtools
|
||||
from testtools import matchers
|
||||
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
|
||||
|
||||
@ -145,9 +145,7 @@ class TestDomains(base.TestCase):
|
||||
domain_data = self._get_domain_data(
|
||||
domain_name='domain_name', enabled=True
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudBadRequest
|
||||
):
|
||||
with testtools.ExpectedException(exceptions.BadRequestException):
|
||||
self.register_uris(
|
||||
[
|
||||
dict(
|
||||
@ -237,9 +235,7 @@ class TestDomains(base.TestCase):
|
||||
),
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.exceptions.ResourceNotFound
|
||||
):
|
||||
with testtools.ExpectedException(exceptions.ResourceNotFound):
|
||||
self.cloud.delete_domain(domain_data.domain_id)
|
||||
self.assert_calls()
|
||||
|
||||
@ -320,8 +316,6 @@ class TestDomains(base.TestCase):
|
||||
)
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.exceptions.ConflictException
|
||||
):
|
||||
with testtools.ExpectedException(exceptions.ConflictException):
|
||||
self.cloud.delete_domain(domain_data.domain_id)
|
||||
self.assert_calls()
|
||||
|
@ -10,8 +10,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -136,7 +135,7 @@ class TestFlavors(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_flavor,
|
||||
'vanilla',
|
||||
)
|
||||
@ -278,7 +277,7 @@ class TestFlavors(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_flavor_by_ram,
|
||||
ram=100,
|
||||
)
|
||||
|
@ -22,7 +22,7 @@ Tests Floating IP resource methods for Neutron
|
||||
import copy
|
||||
import datetime
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
from openstack import utils
|
||||
@ -341,7 +341,7 @@ class TestFloatingIP(base.TestCase):
|
||||
|
||||
# Fails because we requested a port and the returned FIP has no port
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_floating_ip,
|
||||
network='my-network',
|
||||
port='ce705c24-c1ef-408a-bda3-7bbd946164ab',
|
||||
@ -492,7 +492,7 @@ class TestFloatingIP(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud._neutron_available_floating_ips,
|
||||
network='INVALID',
|
||||
)
|
||||
@ -993,7 +993,7 @@ class TestFloatingIP(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_floating_ip,
|
||||
floating_ip_id=fip_id,
|
||||
retry=2,
|
||||
@ -1313,7 +1313,7 @@ class TestFloatingIP(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud._neutron_create_floating_ip,
|
||||
server=dict(id='some-server'),
|
||||
)
|
||||
|
@ -19,7 +19,7 @@ test_floating_ip_pool
|
||||
Test floating IP pool resource (managed by nova)
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -96,7 +96,8 @@ class TestFloatingIPPool(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
OpenStackCloudException, self.cloud.list_floating_ip_pools
|
||||
exceptions.SDKException,
|
||||
self.cloud.list_floating_ip_pools,
|
||||
)
|
||||
|
||||
self.assert_calls()
|
||||
|
@ -18,7 +18,6 @@ import tempfile
|
||||
from unittest import mock
|
||||
import uuid
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack.cloud import meta
|
||||
from openstack import connection
|
||||
from openstack import exceptions
|
||||
@ -70,7 +69,7 @@ class TestImage(BaseTestImage):
|
||||
|
||||
def test_download_image_no_output(self):
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.download_image,
|
||||
self.image_name,
|
||||
)
|
||||
@ -78,7 +77,7 @@ class TestImage(BaseTestImage):
|
||||
def test_download_image_two_outputs(self):
|
||||
fake_fd = io.BytesIO()
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.download_image,
|
||||
self.image_name,
|
||||
output_path='fake_path',
|
||||
@ -110,7 +109,7 @@ class TestImage(BaseTestImage):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudResourceNotFound,
|
||||
exceptions.NotFoundException,
|
||||
self.cloud.download_image,
|
||||
self.image_name,
|
||||
output_path='fake_path',
|
||||
@ -1354,7 +1353,7 @@ class TestImage(BaseTestImage):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudHTTPError,
|
||||
exceptions.HttpException,
|
||||
self._call_create_image,
|
||||
self.image_name,
|
||||
)
|
||||
@ -1470,7 +1469,7 @@ class TestImage(BaseTestImage):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudHTTPError,
|
||||
exceptions.HttpException,
|
||||
self._call_create_image,
|
||||
self.image_name,
|
||||
)
|
||||
@ -1556,7 +1555,7 @@ class TestImage(BaseTestImage):
|
||||
self.cloud.image_api_use_tasks = False
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self._call_create_image,
|
||||
self.image_name,
|
||||
allow_duplicates=True,
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
import uuid
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -66,7 +66,7 @@ class TestImageSnapshot(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudTimeout,
|
||||
exceptions.ResourceTimeout,
|
||||
self.cloud.create_image_snapshot,
|
||||
snapshot_name,
|
||||
dict(id=self.server_id),
|
||||
|
@ -13,7 +13,7 @@
|
||||
|
||||
import fixtures
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -83,7 +83,7 @@ class TestKeypair(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_keypair,
|
||||
self.keyname,
|
||||
self.key['public_key'],
|
||||
@ -195,7 +195,5 @@ class TestKeypair(base.TestCase):
|
||||
),
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException, self.cloud.list_keypairs
|
||||
)
|
||||
self.assertRaises(exceptions.SDKException, self.cloud.list_keypairs)
|
||||
self.assert_calls()
|
||||
|
@ -15,8 +15,6 @@ from unittest import mock
|
||||
|
||||
import testtools
|
||||
|
||||
import openstack
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import network as _network
|
||||
from openstack.tests.unit import base
|
||||
@ -468,7 +466,7 @@ class TestNetworks(base.TestCase):
|
||||
def test_create_network_wrong_availability_zone_hints_type(self):
|
||||
azh_opts = "invalid"
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Parameter 'availability_zone_hints' must be a list",
|
||||
):
|
||||
self.cloud.create_network(
|
||||
@ -478,7 +476,7 @@ class TestNetworks(base.TestCase):
|
||||
def test_create_network_provider_wrong_type(self):
|
||||
provider_opts = "invalid"
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Parameter 'provider' must be a dict",
|
||||
):
|
||||
self.cloud.create_network("netname", provider=provider_opts)
|
||||
@ -543,14 +541,14 @@ class TestNetworks(base.TestCase):
|
||||
|
||||
def test_create_network_with_wrong_mtu_size(self):
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Parameter 'mtu_size' must be greater than 67.",
|
||||
):
|
||||
self.cloud.create_network("netname", mtu_size=42)
|
||||
|
||||
def test_create_network_with_wrong_mtu_type(self):
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Parameter 'mtu_size' must be an integer.",
|
||||
):
|
||||
self.cloud.create_network("netname", mtu_size="fourty_two")
|
||||
@ -658,7 +656,7 @@ class TestNetworks(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_network,
|
||||
network_name,
|
||||
)
|
||||
|
@ -17,8 +17,6 @@ from unittest import mock
|
||||
|
||||
import testtools
|
||||
|
||||
import openstack.cloud
|
||||
from openstack.cloud import exc
|
||||
import openstack.cloud.openstackcloud as oc_oc
|
||||
from openstack import exceptions
|
||||
from openstack.object_store.v1 import _proxy
|
||||
@ -198,7 +196,7 @@ class TestObject(BaseTestObject):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_container,
|
||||
self.container,
|
||||
)
|
||||
@ -231,7 +229,7 @@ class TestObject(BaseTestObject):
|
||||
[dict(method='POST', uri=self.container_endpoint, status_code=409)]
|
||||
)
|
||||
self.assertRaises(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.update_container,
|
||||
self.container,
|
||||
dict(foo='bar'),
|
||||
@ -284,7 +282,7 @@ class TestObject(BaseTestObject):
|
||||
|
||||
def test_set_container_access_invalid(self):
|
||||
self.assertRaises(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.set_container_access,
|
||||
self.container,
|
||||
'invalid',
|
||||
@ -319,7 +317,7 @@ class TestObject(BaseTestObject):
|
||||
)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Could not determine container access for ACL: invalid",
|
||||
):
|
||||
self.cloud.get_container_access(self.container)
|
||||
@ -329,7 +327,7 @@ class TestObject(BaseTestObject):
|
||||
[dict(method='HEAD', uri=self.container_endpoint, status_code=404)]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Container not found: %s" % self.container,
|
||||
):
|
||||
self.cloud.get_container_access(self.container)
|
||||
@ -368,9 +366,7 @@ class TestObject(BaseTestObject):
|
||||
]
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException, self.cloud.list_containers
|
||||
)
|
||||
self.assertRaises(exceptions.SDKException, self.cloud.list_containers)
|
||||
self.assert_calls()
|
||||
|
||||
@mock.patch.object(_proxy, '_get_expiration', return_value=13345)
|
||||
@ -660,7 +656,7 @@ class TestObject(BaseTestObject):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.list_objects,
|
||||
self.container,
|
||||
)
|
||||
@ -798,7 +794,7 @@ class TestObject(BaseTestObject):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_object,
|
||||
self.container,
|
||||
self.object,
|
||||
@ -1511,7 +1507,7 @@ class TestObjectUploads(BaseTestObject):
|
||||
self.cloud.image_api_use_tasks = True
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_object,
|
||||
container=self.container,
|
||||
name=self.object,
|
||||
@ -1594,7 +1590,7 @@ class TestObjectUploads(BaseTestObject):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_object,
|
||||
container=self.container,
|
||||
name=self.object,
|
||||
|
@ -15,8 +15,8 @@ import uuid
|
||||
|
||||
import testtools
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack.config import cloud_region
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -90,7 +90,7 @@ class TestOperatorCloud(base.TestCase):
|
||||
self.cloud.name = 'testcloud'
|
||||
self.cloud.config.config['region_name'] = 'testregion'
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Error getting image endpoint on testcloud:testregion:"
|
||||
" No service",
|
||||
):
|
||||
|
@ -19,7 +19,7 @@ test_port
|
||||
Test port resource (managed by neutron)
|
||||
"""
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import port as _port
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -203,7 +203,7 @@ class TestPort(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_port,
|
||||
network_id='test-net-id',
|
||||
name='test-port-name',
|
||||
@ -312,7 +312,7 @@ class TestPort(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.update_port,
|
||||
name_or_id='d80b1a3b-4fc1-49f3-952e-1e2ab7081d8b',
|
||||
name='test-port-name-updated',
|
||||
@ -368,7 +368,7 @@ class TestPort(base.TestCase):
|
||||
)
|
||||
]
|
||||
)
|
||||
self.assertRaises(OpenStackCloudException, self.cloud.list_ports)
|
||||
self.assertRaises(exceptions.SDKException, self.cloud.list_ports)
|
||||
|
||||
def test_search_ports_by_id(self):
|
||||
port_id = 'f71a6703-d6de-4be1-a91a-a570ede1d159'
|
||||
@ -514,7 +514,7 @@ class TestPort(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
OpenStackCloudException, self.cloud.delete_port, port_name
|
||||
exceptions.SDKException, self.cloud.delete_port, port_name
|
||||
)
|
||||
self.assert_calls()
|
||||
|
||||
|
@ -15,8 +15,7 @@ import uuid
|
||||
import testtools
|
||||
from testtools import matchers
|
||||
|
||||
import openstack.cloud
|
||||
import openstack.cloud._utils
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
|
||||
|
||||
@ -129,7 +128,7 @@ class TestProject(base.TestCase):
|
||||
# shade will raise an attribute error instead of the proper
|
||||
# project not found exception.
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Project %s not found." % project_data.project_id,
|
||||
):
|
||||
self.cloud.update_project(project_data.project_id)
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
import copy
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import qos_bandwidth_limit_rule
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -164,7 +164,7 @@ class TestQosBandwidthLimitRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudResourceNotFound,
|
||||
exceptions.NotFoundException,
|
||||
self.cloud.get_qos_bandwidth_limit_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
@ -184,7 +184,7 @@ class TestQosBandwidthLimitRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_qos_bandwidth_limit_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
@ -256,7 +256,7 @@ class TestQosBandwidthLimitRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_qos_bandwidth_limit_rule,
|
||||
self.policy_name,
|
||||
max_kbps=100,
|
||||
@ -403,7 +403,7 @@ class TestQosBandwidthLimitRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.update_qos_bandwidth_limit_rule,
|
||||
self.policy_id,
|
||||
self.rule_id,
|
||||
@ -558,7 +558,7 @@ class TestQosBandwidthLimitRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_qos_bandwidth_limit_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
import copy
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import qos_dscp_marking_rule
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -147,7 +147,7 @@ class TestQosDscpMarkingRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudResourceNotFound,
|
||||
exceptions.NotFoundException,
|
||||
self.cloud.get_qos_dscp_marking_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
@ -167,7 +167,7 @@ class TestQosDscpMarkingRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_qos_dscp_marking_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
@ -239,7 +239,7 @@ class TestQosDscpMarkingRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_qos_dscp_marking_rule,
|
||||
self.policy_name,
|
||||
dscp_mark=16,
|
||||
@ -328,7 +328,7 @@ class TestQosDscpMarkingRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.update_qos_dscp_marking_rule,
|
||||
self.policy_id,
|
||||
self.rule_id,
|
||||
@ -403,7 +403,7 @@ class TestQosDscpMarkingRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_qos_dscp_marking_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
import copy
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import qos_minimum_bandwidth_rule
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -148,7 +148,7 @@ class TestQosMinimumBandwidthRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudResourceNotFound,
|
||||
exceptions.NotFoundException,
|
||||
self.cloud.get_qos_minimum_bandwidth_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
@ -168,7 +168,7 @@ class TestQosMinimumBandwidthRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_qos_minimum_bandwidth_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
@ -240,7 +240,7 @@ class TestQosMinimumBandwidthRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_qos_minimum_bandwidth_rule,
|
||||
self.policy_name,
|
||||
min_kbps=100,
|
||||
@ -328,7 +328,7 @@ class TestQosMinimumBandwidthRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.update_qos_minimum_bandwidth_rule,
|
||||
self.policy_id,
|
||||
self.rule_id,
|
||||
@ -403,7 +403,7 @@ class TestQosMinimumBandwidthRule(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_qos_minimum_bandwidth_rule,
|
||||
self.policy_name,
|
||||
self.rule_id,
|
||||
|
@ -15,7 +15,7 @@
|
||||
|
||||
import copy
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import qos_policy as _policy
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -110,7 +110,7 @@ class TestQosPolicy(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_qos_policy,
|
||||
self.policy_name,
|
||||
)
|
||||
@ -154,7 +154,7 @@ class TestQosPolicy(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_qos_policy,
|
||||
name=self.policy_name,
|
||||
)
|
||||
@ -256,7 +256,7 @@ class TestQosPolicy(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_qos_policy,
|
||||
self.policy_name,
|
||||
)
|
||||
@ -330,7 +330,7 @@ class TestQosPolicy(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_qos_policy,
|
||||
self.policy_name,
|
||||
)
|
||||
@ -420,7 +420,7 @@ class TestQosPolicy(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.update_qos_policy,
|
||||
self.policy_id,
|
||||
name="goofy",
|
||||
|
@ -13,7 +13,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import qos_rule_type
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -117,7 +117,7 @@ class TestQosRuleType(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException, self.cloud.list_qos_rule_types
|
||||
exceptions.SDKException, self.cloud.list_qos_rule_types
|
||||
)
|
||||
self.assert_calls()
|
||||
|
||||
@ -184,7 +184,7 @@ class TestQosRuleType(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_qos_rule_type_details,
|
||||
self.rule_type_name,
|
||||
)
|
||||
@ -210,7 +210,7 @@ class TestQosRuleType(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_qos_rule_type_details,
|
||||
self.rule_type_name,
|
||||
)
|
||||
|
@ -10,7 +10,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import quota as _quota
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -100,7 +100,7 @@ class TestQuotas(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.set_compute_quotas,
|
||||
project.project_id,
|
||||
)
|
||||
|
@ -21,7 +21,7 @@ Tests for the `rebuild_server` command.
|
||||
|
||||
import uuid
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -65,7 +65,7 @@ class TestRebuildServer(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.rebuild_server,
|
||||
self.fake_server['id'],
|
||||
"a",
|
||||
@ -102,7 +102,7 @@ class TestRebuildServer(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.rebuild_server,
|
||||
self.fake_server['id'],
|
||||
"a",
|
||||
@ -139,7 +139,7 @@ class TestRebuildServer(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudTimeout,
|
||||
exceptions.ResourceTimeout,
|
||||
self.cloud.rebuild_server,
|
||||
self.fake_server['id'],
|
||||
"a",
|
||||
|
@ -14,7 +14,7 @@
|
||||
import testtools
|
||||
from testtools import matchers
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
|
||||
|
||||
@ -1739,7 +1739,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
self.register_uris(uris)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Role {0} not found'.format(self.role_data.role_name),
|
||||
):
|
||||
self.cloud.grant_role(
|
||||
@ -1779,7 +1779,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
self.register_uris(uris)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Role {0} not found'.format(self.role_data.role_name),
|
||||
):
|
||||
self.cloud.revoke_role(
|
||||
@ -1795,7 +1795,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
)
|
||||
self.register_uris(uris)
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Must specify either a user or a group',
|
||||
):
|
||||
self.cloud.grant_role(self.role_data.role_name)
|
||||
@ -1807,7 +1807,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
)
|
||||
self.register_uris(uris)
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Must specify either a user or a group',
|
||||
):
|
||||
self.cloud.revoke_role(self.role_data.role_name)
|
||||
@ -1823,7 +1823,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
self.register_uris(uris)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Must specify either a user or a group',
|
||||
):
|
||||
self.cloud.grant_role(
|
||||
@ -1841,7 +1841,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
self.register_uris(uris)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Must specify either a user or a group',
|
||||
):
|
||||
self.cloud.revoke_role(
|
||||
@ -1862,7 +1862,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
self.register_uris(uris)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Specify either a group or a user, not both',
|
||||
):
|
||||
self.cloud.grant_role(
|
||||
@ -1885,7 +1885,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
self.register_uris(uris)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Specify either a group or a user, not both',
|
||||
):
|
||||
self.cloud.revoke_role(
|
||||
@ -2017,7 +2017,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
self.register_uris(uris)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Must specify either a domain, project or system',
|
||||
):
|
||||
self.cloud.grant_role(
|
||||
@ -2036,7 +2036,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
self.register_uris(uris)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
'Must specify either a domain, project or system',
|
||||
):
|
||||
self.cloud.revoke_role(
|
||||
@ -2063,7 +2063,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
),
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(exc.OpenStackCloudURINotFound):
|
||||
with testtools.ExpectedException(exceptions.NotFoundException):
|
||||
self.cloud.grant_role(
|
||||
self.role_data.role_name,
|
||||
user=self.user_data.name,
|
||||
@ -2090,7 +2090,7 @@ class TestRoleAssignment(base.TestCase):
|
||||
),
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(exc.OpenStackCloudURINotFound):
|
||||
with testtools.ExpectedException(exceptions.NotFoundException):
|
||||
self.cloud.revoke_role(
|
||||
self.role_data.role_name,
|
||||
user=self.user_data.name,
|
||||
|
@ -17,7 +17,7 @@ import copy
|
||||
|
||||
import testtools
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import port as _port
|
||||
from openstack.network.v2 import router as _router
|
||||
from openstack.tests.unit import base
|
||||
@ -315,7 +315,7 @@ class TestRouter(base.TestCase):
|
||||
def test_create_router_wrong_availability_zone_hints_type(self):
|
||||
azh_opts = "invalid"
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Parameter 'availability_zone_hints' must be a list",
|
||||
):
|
||||
self.cloud.create_router(
|
||||
@ -522,7 +522,7 @@ class TestRouter(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException, self.cloud.delete_router, 'mickey'
|
||||
exceptions.SDKException, self.cloud.delete_router, 'mickey'
|
||||
)
|
||||
self.assert_calls()
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
import copy
|
||||
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -786,7 +787,7 @@ class TestSecurityGroups(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_security_group_rule,
|
||||
secgroup_name_or_id='nova-sec-group',
|
||||
direction='egress',
|
||||
|
@ -19,7 +19,7 @@ Tests for the `delete_server_metadata` command.
|
||||
|
||||
import uuid
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudURINotFound
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -65,7 +65,7 @@ class TestServerDeleteMetadata(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
OpenStackCloudURINotFound,
|
||||
exceptions.NotFoundException,
|
||||
self.cloud.delete_server_metadata,
|
||||
self.server_name,
|
||||
['key'],
|
||||
|
@ -19,7 +19,7 @@ Tests for the `set_server_metadata` command.
|
||||
|
||||
import uuid
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudBadRequest
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -59,7 +59,7 @@ class TestServerSetMetadata(base.TestCase):
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
OpenStackCloudBadRequest,
|
||||
exceptions.BadRequestException,
|
||||
self.cloud.set_server_metadata,
|
||||
self.server_name,
|
||||
{'meta': 'data'},
|
||||
|
@ -21,7 +21,7 @@ Tests Keystone services commands.
|
||||
|
||||
from testtools import matchers
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
|
||||
|
||||
@ -203,7 +203,7 @@ class CloudServices(base.TestCase):
|
||||
# Multiple matches
|
||||
# test we are getting an Exception
|
||||
self.assertRaises(
|
||||
OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.get_service,
|
||||
name_or_id=None,
|
||||
filters={'type': 'type2'},
|
||||
|
@ -14,7 +14,7 @@ import tempfile
|
||||
|
||||
import testtools
|
||||
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.orchestration.v1 import stack
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
@ -95,9 +95,7 @@ class TestStack(base.TestCase):
|
||||
)
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudURINotFound
|
||||
):
|
||||
with testtools.ExpectedException(exceptions.NotFoundException):
|
||||
self.cloud.list_stacks()
|
||||
self.assert_calls()
|
||||
|
||||
@ -160,9 +158,7 @@ class TestStack(base.TestCase):
|
||||
)
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudURINotFound
|
||||
):
|
||||
with testtools.ExpectedException(exceptions.NotFoundException):
|
||||
self.cloud.search_stacks()
|
||||
|
||||
def test_delete_stack(self):
|
||||
@ -264,9 +260,7 @@ class TestStack(base.TestCase):
|
||||
),
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudBadRequest
|
||||
):
|
||||
with testtools.ExpectedException(exceptions.BadRequestException):
|
||||
self.cloud.delete_stack(self.stack_id)
|
||||
self.assert_calls()
|
||||
|
||||
@ -550,9 +544,7 @@ class TestStack(base.TestCase):
|
||||
]
|
||||
)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException
|
||||
):
|
||||
with testtools.ExpectedException(exceptions.SDKException):
|
||||
self.cloud.delete_stack(self.stack_id, wait=True)
|
||||
|
||||
self.assert_calls()
|
||||
|
@ -17,7 +17,7 @@ import copy
|
||||
|
||||
import testtools
|
||||
|
||||
from openstack.cloud import exc
|
||||
from openstack import exceptions
|
||||
from openstack.network.v2 import subnet as _subnet
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -253,7 +253,7 @@ class TestSubnet(base.TestCase):
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
exc.OpenStackCloudException, "ip_version must be an integer"
|
||||
exceptions.SDKException, "ip_version must be an integer"
|
||||
):
|
||||
self.cloud.create_subnet(
|
||||
self.network_name, self.subnet_cidr, ip_version='4x'
|
||||
@ -407,7 +407,7 @@ class TestSubnet(base.TestCase):
|
||||
)
|
||||
gateway = '192.168.200.3'
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_subnet,
|
||||
'kooky',
|
||||
self.subnet_cidr,
|
||||
@ -441,7 +441,7 @@ class TestSubnet(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_subnet,
|
||||
'duck',
|
||||
self.subnet_cidr,
|
||||
@ -475,7 +475,7 @@ class TestSubnet(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.create_subnet,
|
||||
self.network_name,
|
||||
self.subnet_cidr,
|
||||
@ -731,7 +731,7 @@ class TestSubnet(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.delete_subnet,
|
||||
self.subnet_name,
|
||||
)
|
||||
@ -859,7 +859,7 @@ class TestSubnet(base.TestCase):
|
||||
|
||||
def test_update_subnet_conflict_gw_ops(self):
|
||||
self.assertRaises(
|
||||
exc.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.update_subnet,
|
||||
self.subnet_id,
|
||||
gateway_ip="192.168.199.3",
|
||||
|
@ -19,7 +19,7 @@ Tests for the `update_server` command.
|
||||
|
||||
import uuid
|
||||
|
||||
from openstack.cloud.exc import OpenStackCloudException
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -74,7 +74,7 @@ class TestUpdateServer(base.TestCase):
|
||||
]
|
||||
)
|
||||
self.assertRaises(
|
||||
OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
self.cloud.update_server,
|
||||
self.server_name,
|
||||
name=self.updated_server_name,
|
||||
|
@ -14,7 +14,7 @@ import uuid
|
||||
|
||||
import testtools
|
||||
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
|
||||
|
||||
@ -83,7 +83,7 @@ class TestUsers(base.TestCase):
|
||||
domain_id=uuid.uuid4().hex, email='test@example.com'
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"User or project creation requires an explicit"
|
||||
" domain_id argument.",
|
||||
):
|
||||
|
@ -14,9 +14,9 @@
|
||||
import testtools
|
||||
|
||||
from openstack.block_storage.v3 import volume
|
||||
import openstack.cloud
|
||||
from openstack.cloud import meta
|
||||
from openstack.compute.v2 import volume_attachment
|
||||
from openstack import exceptions
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@ -105,7 +105,7 @@ class TestVolume(base.TestCase):
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudURINotFound
|
||||
exceptions.NotFoundException,
|
||||
):
|
||||
self.cloud.attach_volume(server, volume, wait=False)
|
||||
self.assert_calls()
|
||||
@ -225,7 +225,7 @@ class TestVolume(base.TestCase):
|
||||
]
|
||||
)
|
||||
|
||||
with testtools.ExpectedException(openstack.exceptions.ResourceFailure):
|
||||
with testtools.ExpectedException(exceptions.ResourceFailure):
|
||||
self.cloud.attach_volume(server, volume)
|
||||
self.assert_calls()
|
||||
|
||||
@ -234,7 +234,7 @@ class TestVolume(base.TestCase):
|
||||
volume = dict(id='volume001', status='error', attachments=[])
|
||||
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Volume %s is not available. Status is '%s'"
|
||||
% (volume['id'], volume['status']),
|
||||
):
|
||||
@ -250,7 +250,7 @@ class TestVolume(base.TestCase):
|
||||
)
|
||||
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"Volume %s already attached to server %s on device %s"
|
||||
% (volume['id'], server['id'], device_id),
|
||||
):
|
||||
@ -324,7 +324,7 @@ class TestVolume(base.TestCase):
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudURINotFound
|
||||
exceptions.NotFoundException,
|
||||
):
|
||||
self.cloud.detach_volume(server, volume, wait=False)
|
||||
self.assert_calls()
|
||||
@ -433,7 +433,7 @@ class TestVolume(base.TestCase):
|
||||
),
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(openstack.exceptions.ResourceFailure):
|
||||
with testtools.ExpectedException(exceptions.ResourceFailure):
|
||||
self.cloud.detach_volume(server, volume)
|
||||
self.assert_calls()
|
||||
|
||||
|
@ -12,10 +12,9 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
import testtools
|
||||
|
||||
import openstack.cloud
|
||||
from openstack import exceptions
|
||||
from openstack.tests.unit import base
|
||||
|
||||
|
||||
@ -297,7 +296,7 @@ class TestVolumeAccess(base.TestCase):
|
||||
]
|
||||
)
|
||||
with testtools.ExpectedException(
|
||||
openstack.cloud.OpenStackCloudException,
|
||||
exceptions.SDKException,
|
||||
"VolumeType not found: MISSING",
|
||||
):
|
||||
self.cloud.add_volume_type_access(
|
||||
|
Loading…
Reference in New Issue
Block a user