Пример #1
0
    def ls(cls, filters=None, session=None):
        """List user AMIs.

        :param filters: same as Filters parameters of describe_instances
            (see botocore)
        :type filters: dict
        :return a list of instances
        :rtype: list[Instance]
        """
        if filters is None:
            filters = []
        result = []
        for r in session.regions:
            c = session.client('ec2', r)
            region_result = c.describe_instances(Filters=filters)
            for reservation in region_result['Reservations']:
                if 'Instances' not in reservation:
                    continue
                for instance in reservation['Instances']:
                    result.append(
                        Instance(instance['InstanceId'],
                                 r,
                                 data=instance,
                                 session=session))
        return result
Пример #2
0
    def ls(cls, filters=None, session=None):
        """List user instances.

        Note that instances in "terminated" mode are ignored.

        :param filters: same as Filters parameters of describe_instances
            (see botocore)
        :type filters: dict
        :return a list of instances
        :rtype: list[Instance]
        """
        if filters is None:
            filters = []
        result = []
        for r in session.regions:
            c = session.client("ec2", r)
            region_result = c.describe_instances(Filters=filters)
            for reservation in region_result["Reservations"]:
                if "Instances" not in reservation:
                    continue
                for instance_data in reservation["Instances"]:
                    if instance_data["State"]["Name"] == "terminated":
                        # Ignore instance that are going to disappear soon
                        continue
                    result.append(
                        Instance(
                            instance_data["InstanceId"],
                            r,
                            data=instance_data,
                            session=session,
                        ))
        return result
Пример #3
0
    def __init__(self, group_id=None, region=None, data=None, session=None):
        """Initialize a security group.

        :param group_id: group id. Used to retrieve group data
            if data parameter is None
        :type group_id: str | None
        :param region: region of the security group
        :type region: str | None
        :param data: botocore data describing the group. If None
            then data is fetched automatically using group id and
            region
        """
        if data is None:
            assert region is not None and group_id is not None
            data = session.client('ec2', region).describe_security_groups(
                GroupIds=[group_id])['SecurityGroups'][0]
        super(SecurityGroup, self).__init__(data, region)
Пример #4
0
    def __init__(self, ami_id, region=None, data=None, session=None):
        """Inialize an AMI description object.

        :param ami_id: the id of the AMI
        :type ami_id: str
        :param region: region in which the AMI is present. If None then
            use default region
        :type region: None | str
        :param data: a dict representing the metadata of the AMI. If None then
            download AMI description using EC2 api
        :type data: dict | None
        """
        if data is None:
            assert ami_id is not None
            data = session.client(
                "ec2", region).describe_images(ImageIds=[ami_id])["Images"][0]
        super().__init__(data, region)
Пример #5
0
    def __init__(self, instance_id=None, region=None, data=None, session=None):
        """Initialize an EC2 instance description.

        :param instance_id: instance id. Used to retrieve instance data
            if data parameter is None
        :type group_id: str | None
        :param region: region of the security group
        :type region: str | None
        :param data: botocore data describing the instance. If None
            then data is fetched automatically using instance id and
            region
        """
        if data is None:
            assert instance_id is not None and region is not None
            data = session.client('ec2', region).describe_instances(
                InstanceIds=[instance_id])['Reservations']['Instances'][0]

        super(Instance, self).__init__(data, region)
Пример #6
0
    def __init__(self, snapshot_id=None, region=None, data=None, session=None):
        """Initialize an EC2 snapshot description.

        :param snapshot_id: snapshot id. Used to retrieve snapshot data
            if data parameter is None
        :type snapshot_id: str | None
        :param region: region of the snapshot
        :type region: str | None
        :param data: botocore data describing the snapshot. If None
            then data is fetched automatically using snapshot id and
            region
        """
        if data is None:
            assert snapshot_id is not None and region is not None
            data = session.client('ec2', region).describe_snapshots(
                SnapshotIds=[snapshot_id])['Snapshots'][0]

        super(Snapshot, self).__init__(data, region)
Пример #7
0
    def ls(cls, filters=None):
        """List user AMIs.

        :param filters: same as Filters parameters of describe_volumes
            (see botocore)
        :type filters: dict
        :return a list of volumes
        :rtype: list[Volume]
        """
        if filters is None:
            filters = []
        result = []
        for r in session.regions:
            c = session.client('ec2', r)
            region_result = c.describe_volumes(Filters=filters)
            for volume in region_result.get('Volumes', []):
                result.append(Volume(volume['VolumeId'], r, data=volume))
        return result
Пример #8
0
    def ls(cls, filters=None, session=None):
        """List user AMIs.

        :param filters: same as Filters parameters of describe_images
            (see botocore)
        :type filters: dict
        :return a list of images
        :rtype: list[AMI]
        """
        if filters is None:
            filters = []
        result = []
        for r in session.regions:
            c = session.client("ec2", r)
            region_result = c.describe_images(Owners=["self"], Filters=filters)
            for ami in region_result["Images"]:
                result.append(AMI(ami["ImageId"], r, data=ami, session=session))
        return result
Пример #9
0
    def ls(cls, filters=None, session=None):
        """List snapshots.

        :param filters: same as Filters parameters of describe_snapshots
            (see botocore)
        :type filters: dict
        :return a list of snaptshots
        :rtype: list[Snapshot]
        """
        if filters is None:
            filters = []
        result = []
        for r in session.regions:
            c = session.client("ec2", r)
            region_result = c.describe_snapshots(OwnerIds=["self"], Filters=filters)
            for snapshot in region_result.get("Snapshots", []):
                result.append(Snapshot(snapshot["SnapshotId"], r, data=snapshot))
        return result
Пример #10
0
    def __init__(self, volume_id=None, region=None, data=None, session=None):
        """Initialize an EC2 volume description.

        :param volume_id: volume id. Used to retrieve volume data
            if data parameter is None
        :type group_id: str | None
        :param region: region of the volume
        :type region: str | None
        :param data: botocore data describing the volume. If None
            then data is fetched automatically using volume id and
            region
        """
        if data is None:
            assert volume_id is not None and region is not None
            data = session.client(
                'ec2',
                region).describe_volumes(InstanceIds=[volume_id])['Volumes'][0]

        super(Volume, self).__init__(data, region)
Пример #11
0
    def ls(cls, filters=None, session=None):
        """List user security groups.

        Note that this API is cross region. All regions used when creating
        the session are used.

        :param filters: same as Filters parameters of describe_security_groups
            (see botocore)
        :type filters: dict
        :return a list of images
        :rtype: list[SecurityGroup]
        """
        if filters is None:
            filters = []
        result = []
        for r in session.regions:
            c = session.client('ec2', r)
            region_result = c.describe_security_groups(Filters=filters)
            for sg in region_result['SecurityGroups']:
                result.append(SecurityGroup(sg['GroupId'], r, data=sg))
        return result
Пример #12
0
 def delete(self, session=None):
     """Delete a snapshot."""
     session.client(
         'ec2', self.region).delete_snapshot(SnapshotId=self.snapshot_id)
Пример #13
0
 def delete(self):
     """Delete a volume."""
     session.client('ec2',
                    self.region).delete_volume(VolumeId=self.volume_id)