Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/boto/ec2/volume.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.7/site-packages/boto/ec2/volume.py Sat May 02 07:14:21 2020 -0400 @@ -0,0 +1,315 @@ +# Copyright (c) 2006-2012 Mitch Garnaat http://garnaat.org/ +# Copyright (c) 2010, Eucalyptus Systems, Inc. +# Copyright (c) 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, dis- +# tribute, sublicense, and/or sell copies of the Software, and to permit +# persons to whom the Software is furnished to do so, subject to the fol- +# lowing conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +""" +Represents an EC2 Elastic Block Storage Volume +""" +from boto.resultset import ResultSet +from boto.ec2.tag import Tag +from boto.ec2.ec2object import TaggedEC2Object + + +class Volume(TaggedEC2Object): + """ + Represents an EBS volume. + + :ivar id: The unique ID of the volume. + :ivar create_time: The timestamp of when the volume was created. + :ivar status: The status of the volume. + :ivar size: The size (in GB) of the volume. + :ivar snapshot_id: The ID of the snapshot this volume was created + from, if applicable. + :ivar attach_data: An AttachmentSet object. + :ivar zone: The availability zone this volume is in. + :ivar type: The type of volume (standard or consistent-iops) + :ivar iops: If this volume is of type consistent-iops, this is + the number of IOPS provisioned (10-300). + :ivar encrypted: True if this volume is encrypted. + """ + + def __init__(self, connection=None): + super(Volume, self).__init__(connection) + self.id = None + self.create_time = None + self.status = None + self.size = None + self.snapshot_id = None + self.attach_data = None + self.zone = None + self.type = None + self.iops = None + self.encrypted = None + + def __repr__(self): + return 'Volume:%s' % self.id + + def startElement(self, name, attrs, connection): + retval = super(Volume, self).startElement(name, attrs, connection) + if retval is not None: + return retval + if name == 'attachmentSet': + self.attach_data = AttachmentSet() + return self.attach_data + elif name == 'tagSet': + self.tags = ResultSet([('item', Tag)]) + return self.tags + else: + return None + + def endElement(self, name, value, connection): + if name == 'volumeId': + self.id = value + elif name == 'createTime': + self.create_time = value + elif name == 'status': + if value != '': + self.status = value + elif name == 'size': + self.size = int(value) + elif name == 'snapshotId': + self.snapshot_id = value + elif name == 'availabilityZone': + self.zone = value + elif name == 'volumeType': + self.type = value + elif name == 'iops': + self.iops = int(value) + elif name == 'encrypted': + self.encrypted = (value.lower() == 'true') + else: + setattr(self, name, value) + + def _update(self, updated): + self.__dict__.update(updated.__dict__) + + def update(self, validate=False, dry_run=False): + """ + Update the data associated with this volume by querying EC2. + + :type validate: bool + :param validate: By default, if EC2 returns no data about the + volume the update method returns quietly. If + the validate param is True, however, it will + raise a ValueError exception if no data is + returned from EC2. + """ + # Check the resultset since Eucalyptus ignores the volumeId param + unfiltered_rs = self.connection.get_all_volumes( + [self.id], + dry_run=dry_run + ) + rs = [x for x in unfiltered_rs if x.id == self.id] + if len(rs) > 0: + self._update(rs[0]) + elif validate: + raise ValueError('%s is not a valid Volume ID' % self.id) + return self.status + + def delete(self, dry_run=False): + """ + Delete this EBS volume. + + :rtype: bool + :return: True if successful + """ + return self.connection.delete_volume(self.id, dry_run=dry_run) + + def attach(self, instance_id, device, dry_run=False): + """ + Attach this EBS volume to an EC2 instance. + + :type instance_id: str + :param instance_id: The ID of the EC2 instance to which it will + be attached. + + :type device: str + :param device: The device on the instance through which the + volume will be exposed (e.g. /dev/sdh) + + :rtype: bool + :return: True if successful + """ + return self.connection.attach_volume( + self.id, + instance_id, + device, + dry_run=dry_run + ) + + def detach(self, force=False, dry_run=False): + """ + Detach this EBS volume from an EC2 instance. + + :type force: bool + :param force: Forces detachment if the previous detachment + attempt did not occur cleanly. This option can lead to + data loss or a corrupted file system. Use this option only + as a last resort to detach a volume from a failed + instance. The instance will not have an opportunity to + flush file system caches nor file system meta data. If you + use this option, you must perform file system check and + repair procedures. + + :rtype: bool + :return: True if successful + """ + instance_id = None + if self.attach_data: + instance_id = self.attach_data.instance_id + device = None + if self.attach_data: + device = self.attach_data.device + return self.connection.detach_volume( + self.id, + instance_id, + device, + force, + dry_run=dry_run + ) + + def create_snapshot(self, description=None, dry_run=False): + """ + Create a snapshot of this EBS Volume. + + :type description: str + :param description: A description of the snapshot. + Limited to 256 characters. + + :rtype: :class:`boto.ec2.snapshot.Snapshot` + :return: The created Snapshot object + """ + return self.connection.create_snapshot( + self.id, + description, + dry_run=dry_run + ) + + def volume_state(self): + """ + Returns the state of the volume. Same value as the status attribute. + """ + return self.status + + def attachment_state(self): + """ + Get the attachment state. + """ + state = None + if self.attach_data: + state = self.attach_data.status + return state + + def snapshots(self, owner=None, restorable_by=None, dry_run=False): + """ + Get all snapshots related to this volume. Note that this requires + that all available snapshots for the account be retrieved from EC2 + first and then the list is filtered client-side to contain only + those for this volume. + + :type owner: str + :param owner: If present, only the snapshots owned by the + specified user will be returned. Valid values are: + + * self + * amazon + * AWS Account ID + + :type restorable_by: str + :param restorable_by: If present, only the snapshots that + are restorable by the specified account id will be returned. + + :rtype: list of L{boto.ec2.snapshot.Snapshot} + :return: The requested Snapshot objects + + """ + rs = self.connection.get_all_snapshots( + owner=owner, + restorable_by=restorable_by, + dry_run=dry_run + ) + mine = [] + for snap in rs: + if snap.volume_id == self.id: + mine.append(snap) + return mine + + +class AttachmentSet(object): + """ + Represents an EBS attachmentset. + + :ivar id: The unique ID of the volume. + :ivar instance_id: The unique ID of the attached instance + :ivar status: The status of the attachment + :ivar attach_time: Attached since + :ivar device: The device the instance has mapped + """ + def __init__(self): + self.id = None + self.instance_id = None + self.status = None + self.attach_time = None + self.device = None + + def __repr__(self): + return 'AttachmentSet:%s' % self.id + + def startElement(self, name, attrs, connection): + pass + + def endElement(self, name, value, connection): + if name == 'volumeId': + self.id = value + elif name == 'instanceId': + self.instance_id = value + elif name == 'status': + self.status = value + elif name == 'attachTime': + self.attach_time = value + elif name == 'device': + self.device = value + else: + setattr(self, name, value) + + +class VolumeAttribute(object): + def __init__(self, parent=None): + self.id = None + self._key_name = None + self.attrs = {} + + def startElement(self, name, attrs, connection): + if name == 'autoEnableIO': + self._key_name = name + return None + + def endElement(self, name, value, connection): + if name == 'value': + if value.lower() == 'true': + self.attrs[self._key_name] = True + else: + self.attrs[self._key_name] = False + elif name == 'volumeId': + self.id = value + else: + setattr(self, name, value)