Merge pull request #258 from pvbouwel/master
Make sure that describe_volumes returns tags information
This commit is contained in:
commit
30305d8986
@ -383,10 +383,6 @@ class Instance(BotoInstance, TaggedEC2Resource):
|
|||||||
self._reason = ""
|
self._reason = ""
|
||||||
self._state_reason = StateReason()
|
self._state_reason = StateReason()
|
||||||
|
|
||||||
def get_tags(self):
|
|
||||||
tags = self.ec2_backend.describe_tags(filters={'resource-id': [self.id]})
|
|
||||||
return tags
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dynamic_group_list(self):
|
def dynamic_group_list(self):
|
||||||
if self.nics:
|
if self.nics:
|
||||||
@ -1227,12 +1223,13 @@ class VolumeAttachment(object):
|
|||||||
return attachment
|
return attachment
|
||||||
|
|
||||||
|
|
||||||
class Volume(object):
|
class Volume(TaggedEC2Resource):
|
||||||
def __init__(self, volume_id, size, zone):
|
def __init__(self, volume_id, size, zone):
|
||||||
self.id = volume_id
|
self.id = volume_id
|
||||||
self.size = size
|
self.size = size
|
||||||
self.zone = zone
|
self.zone = zone
|
||||||
self.attachment = None
|
self.attachment = None
|
||||||
|
self.ec2_backend = ec2_backend
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_from_cloudformation_json(cls, resource_name, cloudformation_json):
|
def create_from_cloudformation_json(cls, resource_name, cloudformation_json):
|
||||||
@ -1256,12 +1253,13 @@ class Volume(object):
|
|||||||
return 'available'
|
return 'available'
|
||||||
|
|
||||||
|
|
||||||
class Snapshot(object):
|
class Snapshot(TaggedEC2Resource):
|
||||||
def __init__(self, snapshot_id, volume, description):
|
def __init__(self, snapshot_id, volume, description):
|
||||||
self.id = snapshot_id
|
self.id = snapshot_id
|
||||||
self.volume = volume
|
self.volume = volume
|
||||||
self.description = description
|
self.description = description
|
||||||
self.create_volume_permission_groups = set()
|
self.create_volume_permission_groups = set()
|
||||||
|
self.ec2_backend = ec2_backend
|
||||||
|
|
||||||
|
|
||||||
class EBSBackend(object):
|
class EBSBackend(object):
|
||||||
|
@ -132,6 +132,16 @@ DESCRIBE_VOLUMES_RESPONSE = """<DescribeVolumesResponse xmlns="http://ec2.amazon
|
|||||||
</item>
|
</item>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</attachmentSet>
|
</attachmentSet>
|
||||||
|
<tagSet>
|
||||||
|
{% for tag in volume.get_tags() %}
|
||||||
|
<item>
|
||||||
|
<resourceId>{{ tag.resource_id }}</resourceId>
|
||||||
|
<resourceType>{{ tag.resource_type }}</resourceType>
|
||||||
|
<key>{{ tag.key }}</key>
|
||||||
|
<value>{{ tag.value }}</value>
|
||||||
|
</item>
|
||||||
|
{% endfor %}
|
||||||
|
</tagSet>
|
||||||
<volumeType>standard</volumeType>
|
<volumeType>standard</volumeType>
|
||||||
</item>
|
</item>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -187,6 +197,14 @@ DESCRIBE_SNAPSHOTS_RESPONSE = """<DescribeSnapshotsResponse xmlns="http://ec2.am
|
|||||||
<volumeSize>{{ snapshot.volume.size }}</volumeSize>
|
<volumeSize>{{ snapshot.volume.size }}</volumeSize>
|
||||||
<description>{{ snapshot.description }}</description>
|
<description>{{ snapshot.description }}</description>
|
||||||
<tagSet>
|
<tagSet>
|
||||||
|
{% for tag in snapshot.get_tags() %}
|
||||||
|
<item>
|
||||||
|
<resourceId>{{ tag.resource_id }}</resourceId>
|
||||||
|
<resourceType>{{ tag.resource_type }}</resourceType>
|
||||||
|
<key>{{ tag.key }}</key>
|
||||||
|
<value>{{ tag.value }}</value>
|
||||||
|
</item>
|
||||||
|
{% endfor %}
|
||||||
</tagSet>
|
</tagSet>
|
||||||
</item>
|
</item>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -3,6 +3,7 @@ import itertools
|
|||||||
|
|
||||||
import boto
|
import boto
|
||||||
from boto.exception import EC2ResponseError
|
from boto.exception import EC2ResponseError
|
||||||
|
from boto.ec2.instance import Reservation
|
||||||
import sure # noqa
|
import sure # noqa
|
||||||
|
|
||||||
from moto import mock_ec2
|
from moto import mock_ec2
|
||||||
@ -253,3 +254,79 @@ def test_get_all_tags_value_filter():
|
|||||||
|
|
||||||
tags = conn.get_all_tags(filters={'value': '*value\*\?'})
|
tags = conn.get_all_tags(filters={'value': '*value\*\?'})
|
||||||
tags.should.have.length_of(1)
|
tags.should.have.length_of(1)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
def test_retrieved_instances_must_contain_their_tags():
|
||||||
|
tag_key = 'Tag name'
|
||||||
|
tag_value = 'Tag value'
|
||||||
|
tags_to_be_set = {tag_key: tag_value}
|
||||||
|
|
||||||
|
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||||
|
reservation = conn.run_instances('ami-1234abcd')
|
||||||
|
reservation.should.be.a(Reservation)
|
||||||
|
reservation.instances.should.have.length_of(1)
|
||||||
|
instance = reservation.instances[0]
|
||||||
|
|
||||||
|
reservations = conn.get_all_instances()
|
||||||
|
reservations.should.have.length_of(1)
|
||||||
|
reservations[0].id.should.equal(reservation.id)
|
||||||
|
instances = reservations[0].instances
|
||||||
|
instances.should.have.length_of(1)
|
||||||
|
instances[0].id.should.equal(instance.id)
|
||||||
|
|
||||||
|
conn.create_tags([instance.id], tags_to_be_set)
|
||||||
|
reservations = conn.get_all_instances()
|
||||||
|
instance = reservations[0].instances[0]
|
||||||
|
retrieved_tags = instance.tags
|
||||||
|
|
||||||
|
#Cleanup of instance
|
||||||
|
conn.terminate_instances([instances[0].id])
|
||||||
|
|
||||||
|
#Check whether tag is present with correct value
|
||||||
|
retrieved_tags[tag_key].should.equal(tag_value)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
def test_retrieved_volumes_must_contain_their_tags():
|
||||||
|
tag_key = 'Tag name'
|
||||||
|
tag_value = 'Tag value'
|
||||||
|
tags_to_be_set = {tag_key: tag_value}
|
||||||
|
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||||
|
volume = conn.create_volume(80, "us-east-1a")
|
||||||
|
|
||||||
|
all_volumes = conn.get_all_volumes()
|
||||||
|
volume = all_volumes[0]
|
||||||
|
conn.create_tags([volume.id], tags_to_be_set)
|
||||||
|
|
||||||
|
#Fetch the volume again
|
||||||
|
all_volumes = conn.get_all_volumes()
|
||||||
|
volume = all_volumes[0]
|
||||||
|
retrieved_tags = volume.tags
|
||||||
|
|
||||||
|
volume.delete()
|
||||||
|
|
||||||
|
#Check whether tag is present with correct value
|
||||||
|
retrieved_tags[tag_key].should.equal(tag_value)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
def test_retrieved_snapshots_must_contain_their_tags():
|
||||||
|
tag_key = 'Tag name'
|
||||||
|
tag_value = 'Tag value'
|
||||||
|
tags_to_be_set = {tag_key: tag_value}
|
||||||
|
conn = boto.connect_ec2(aws_access_key_id='the_key', aws_secret_access_key='the_secret')
|
||||||
|
volume = conn.create_volume(80, "eu-west-1a")
|
||||||
|
snapshot = conn.create_snapshot(volume.id)
|
||||||
|
conn.create_tags([snapshot.id], tags_to_be_set)
|
||||||
|
|
||||||
|
#Fetch the snapshot again
|
||||||
|
all_snapshots = conn.get_all_snapshots()
|
||||||
|
snapshot = all_snapshots[0]
|
||||||
|
retrieved_tags = snapshot.tags
|
||||||
|
|
||||||
|
conn.delete_snapshot(snapshot.id)
|
||||||
|
volume.delete()
|
||||||
|
|
||||||
|
#Check whether tag is present with correct value
|
||||||
|
retrieved_tags[tag_key].should.equal(tag_value)
|
||||||
|
Loading…
Reference in New Issue
Block a user