You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2014/01/12 17:27:13 UTC
[1/2] git commit: Issue LIBCLOUD-493: Add extra instance properties
that now exist in the 2013-10-15 version of the EC2 API into the Node.extra
dictionary. The updates include block device mapping,
VPC information and root device information among other.
Updated Branches:
refs/heads/trunk 9548848cb -> 43c772c38
Issue LIBCLOUD-493: Add extra instance properties that now exist in the
2013-10-15 version of the EC2 API into the Node.extra dictionary. The updates
include block device mapping, VPC information and root device information
among other. All unit tests were updated accordingly and the fixture has
been updated with a more recent XML response.
Closes #221.
Signed-off-by: Tomaz Muraus <to...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/91608576
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/91608576
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/91608576
Branch: refs/heads/trunk
Commit: 91608576cdcc23fc3c4a01492152e1d623b2abe2
Parents: 9548848
Author: Chris DeRamus <ch...@divvycloud.com>
Authored: Sun Jan 12 09:16:14 2014 -0500
Committer: Tomaz Muraus <to...@apache.org>
Committed: Sun Jan 12 17:26:15 2014 +0100
----------------------------------------------------------------------
libcloud/compute/drivers/ec2.py | 241 ++++++++++++------
.../compute/fixtures/ec2/describe_instances.xml | 246 +++++++++++++------
.../ec2/describe_instances_with_tags.xml | 53 ----
libcloud/test/compute/test_ec2.py | 50 ++--
4 files changed, 365 insertions(+), 225 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/91608576/libcloud/compute/drivers/ec2.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py
index fb7b5c9..a226f88 100644
--- a/libcloud/compute/drivers/ec2.py
+++ b/libcloud/compute/drivers/ec2.py
@@ -678,6 +678,120 @@ RESOURCE_EXTRA_ATTRIBUTES_MAP = {
'transform_func': str
}
},
+ 'node': {
+ 'availability': {
+ 'xpath': 'placement/availabilityZone',
+ 'transform_func': str
+ },
+ 'architecture': {
+ 'xpath': 'architecture',
+ 'transform_func': str
+ },
+ 'client_token': {
+ 'xpath': 'clientToken',
+ 'transform_func': str
+ },
+ 'dns_name': {
+ 'xpath': 'dnsName',
+ 'transform_func': str
+ },
+ 'hypervisor': {
+ 'xpath': 'hypervisor',
+ 'transform_func': str
+ },
+ 'iam_profile': {
+ 'xpath': 'iamInstanceProfile/id',
+ 'transform_func': str
+ },
+ 'image_id': {
+ 'xpath': 'imageId',
+ 'transform_func': str
+ },
+ 'instance_id': {
+ 'xpath': 'instanceId',
+ 'transform_func': str
+ },
+ 'instance_lifecycle': {
+ 'xpath': 'instanceLifecycle',
+ 'transform_func': str
+ },
+ 'instance_tenancy': {
+ 'xpath': 'placement/tenancy',
+ 'transform_func': str
+ },
+ 'instance_type': {
+ 'xpath': 'instanceType',
+ 'transform_func': str
+ },
+ 'key_name': {
+ 'xpath': 'keyName',
+ 'transform_func': str
+ },
+ 'launch_index': {
+ 'xpath': 'amiLaunchIndex',
+ 'transform_func': int
+ },
+ 'launch_time': {
+ 'xpath': 'launchTime',
+ 'transform_func': str
+ },
+ 'kernel_id': {
+ 'xpath': 'kernelId',
+ 'transform_func': str
+ },
+ 'monitoring': {
+ 'xpath': 'monitoring/state',
+ 'transform_func': str
+ },
+ 'platform': {
+ 'xpath': 'platform',
+ 'transform_func': str
+ },
+ 'private_dns': {
+ 'xpath': 'privateDnsName',
+ 'transform_func': str
+ },
+ 'ramdisk_id': {
+ 'xpath': 'ramdiskId',
+ 'transform_func': str
+ },
+ 'root_device_type': {
+ 'xpath': 'rootDeviceType',
+ 'transform_func': str
+ },
+ 'root_device_name': {
+ 'xpath': 'rootDeviceName',
+ 'transform_func': str
+ },
+ 'reason': {
+ 'xpath': 'reason',
+ 'transform_func': str
+ },
+ 'source_dest_check': {
+ 'xpath': 'sourceDestCheck',
+ 'transform_func': str
+ },
+ 'status': {
+ 'xpath': 'instanceState/name',
+ 'transform_func': str
+ },
+ 'subnet_id': {
+ 'xpath': 'subnetId',
+ 'transform_func': str
+ },
+ 'virtualization_type': {
+ 'xpath': 'virtualizationType',
+ 'transform_func': str
+ },
+ 'ebs_optimized': {
+ 'xpath': 'ebsOptimized',
+ 'transform_func': str
+ },
+ 'vpc_id': {
+ 'xpath': 'vpcId',
+ 'transform_func': str
+ }
+ },
'reserved_node': {
'instance_type': {
'xpath': 'instanceType',
@@ -1037,11 +1151,7 @@ class BaseEC2NodeDriver(NodeDriver):
nodes = []
for rs in findall(element=elem, xpath='reservationSet/item',
namespace=NAMESPACE):
- groups = [g.findtext('')
- for g in findall(element=rs,
- xpath='groupSet/item/groupId',
- namespace=NAMESPACE)]
- nodes += self._to_nodes(rs, 'instancesSet/item', groups)
+ nodes += self._to_nodes(rs, 'instancesSet/item')
nodes_elastic_ips_mappings = self.ex_describe_addresses(nodes)
for node in nodes:
@@ -2853,12 +2963,12 @@ class BaseEC2NodeDriver(NodeDriver):
return result
- def _to_nodes(self, object, xpath, groups=None):
- return [self._to_node(el, groups=groups)
+ def _to_nodes(self, object, xpath):
+ return [self._to_node(el)
for el in object.findall(fixxpath(xpath=xpath,
namespace=NAMESPACE))]
- def _to_node(self, element, groups=None):
+ def _to_node(self, element):
try:
state = self.NODE_STATE_MAP[findattr(element=element,
xpath="instanceState/name",
@@ -2869,70 +2979,36 @@ class BaseEC2NodeDriver(NodeDriver):
instance_id = findtext(element=element, xpath='instanceId',
namespace=NAMESPACE)
-
- # Get our tags
- tags = self._get_resource_tags(element)
-
- name = tags.get('Name', instance_id)
-
public_ip = findtext(element=element, xpath='ipAddress',
namespace=NAMESPACE)
public_ips = [public_ip] if public_ip else []
private_ip = findtext(element=element, xpath='privateIpAddress',
namespace=NAMESPACE)
private_ips = [private_ip] if private_ip else []
+ product_codes = []
+ for p in findall(element=element,
+ xpath="productCodesSet/item/productCode",
+ namespace=NAMESPACE):
+ product_codes.append(p)
- n = Node(
- id=findtext(element=element, xpath='instanceId',
- namespace=NAMESPACE),
- name=name,
- state=state,
- public_ips=public_ips,
- private_ips=private_ips,
- driver=self.connection.driver,
- extra={
- 'dns_name': findattr(element=element, xpath="dnsName",
- namespace=NAMESPACE),
- 'instanceId': findattr(element=element, xpath="instanceId",
- namespace=NAMESPACE),
- 'imageId': findattr(element=element, xpath="imageId",
- namespace=NAMESPACE),
- 'private_dns': findattr(element=element,
- xpath="privateDnsName",
- namespace=NAMESPACE),
- 'status': findattr(element=element, xpath="instanceState/name",
- namespace=NAMESPACE),
- 'key_name': findattr(element=element, xpath="keyName",
- namespace=NAMESPACE),
- 'launchindex': findattr(element=element,
- xpath="amiLaunchIndex",
- namespace=NAMESPACE),
- 'productcode': [
- p.text for p in findall(
- element=element,
- xpath="productCodesSet/item/productCode",
- namespace=NAMESPACE
- )],
- 'instancetype': findattr(element=element, xpath="instanceType",
- namespace=NAMESPACE),
- 'launchdatetime': findattr(element=element, xpath="launchTime",
- namespace=NAMESPACE),
- 'availability': findattr(element,
- xpath="placement/availabilityZone",
- namespace=NAMESPACE),
- 'kernelid': findattr(element=element, xpath="kernelId",
- namespace=NAMESPACE),
- 'ramdiskid': findattr(element=element, xpath="ramdiskId",
- namespace=NAMESPACE),
- 'clienttoken': findattr(element=element, xpath="clientToken",
- namespace=NAMESPACE),
- 'groups': groups,
- 'tags': tags,
- 'iam_profile': findattr(element, xpath="iamInstanceProfile/id",
- namespace=NAMESPACE)
- }
- )
- return n
+ # Get our tags
+ tags = self._get_resource_tags(element)
+ name = tags.get('Name', instance_id)
+
+ # Get our extra dictionary
+ extra = self._get_extra_dict(
+ element, RESOURCE_EXTRA_ATTRIBUTES_MAP['node'])
+
+ # Add additional properties to our extra dictionary
+ extra['block_device_mapping'] = self._to_device_mappings(element)
+ extra['groups'] = self._get_security_groups(element)
+ extra['network_interfaces'] = self._to_interfaces(element)
+ extra['product_codes'] = product_codes
+ extra['tags'] = tags
+
+ return Node(id=instance_id, name=name, state=state,
+ public_ips=public_ips, private_ips=private_ips,
+ driver=self.connection.driver, extra=extra)
def _to_images(self, object):
return [self._to_image(el) for el in object.findall(
@@ -3175,17 +3251,7 @@ class BaseEC2NodeDriver(NodeDriver):
name = name if name else tags.get('Name', interface_id)
# Build security groups
- groups = []
- for item in findall(element=element,
- xpath='groupSet/item',
- namespace=NAMESPACE):
-
- groups.append({'group_id': findtext(element=item,
- xpath='groupId',
- namespace=NAMESPACE),
- 'group_name': findtext(element=item,
- xpath='groupName',
- namespace=NAMESPACE)})
+ groups = self._get_security_groups(element)
# Build private IPs
priv_ips = []
@@ -3426,6 +3492,29 @@ class BaseEC2NodeDriver(NodeDriver):
return params
+ def _get_security_groups(self, element):
+ """
+ Parse security groups from the provided element and return a
+ list of security groups with the id ane name key/value pairs.
+
+ :rtype: ``list`` of ``dict``
+ """
+ groups = []
+
+ for item in findall(element=element,
+ xpath='groupSet/item',
+ namespace=NAMESPACE):
+ groups.append({
+ 'group_id': findtext(element=item,
+ xpath='groupId',
+ namespace=NAMESPACE),
+ 'group_name': findtext(element=item,
+ xpath='groupName',
+ namespace=NAMESPACE)
+ })
+
+ return groups
+
class EC2NodeDriver(BaseEC2NodeDriver):
"""
http://git-wip-us.apache.org/repos/asf/libcloud/blob/91608576/libcloud/test/compute/fixtures/ec2/describe_instances.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ec2/describe_instances.xml b/libcloud/test/compute/fixtures/ec2/describe_instances.xml
index c7f6594..1c3233e 100644
--- a/libcloud/test/compute/fixtures/ec2/describe_instances.xml
+++ b/libcloud/test/compute/fixtures/ec2/describe_instances.xml
@@ -1,74 +1,182 @@
<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
- <requestId>56d0fffa-8819-4658-bdd7-548f143a86d2</requestId>
- <reservationSet>
- <item>
- <reservationId>r-07adf66e</reservationId>
- <ownerId>822272953071</ownerId>
- <groupSet>
+ <requestId>ec0d2a7d-5080-4f4b-9b02-cb0d5d2d4274</requestId>
+ <reservationSet>
<item>
- <groupId>default</groupId>
+ <reservationId>r-fd67fb97</reservationId>
+ <ownerId>123456789098</ownerId>
+ <groupSet/>
+ <instancesSet>
+ <item>
+ <instanceId>i-4382922a</instanceId>
+ <imageId>ami-3215fe5a</imageId>
+ <instanceState>
+ <code>80</code>
+ <name>stopped</name>
+ </instanceState>
+ <privateDnsName/>
+ <dnsName/>
+ <reason>User initiated (2014-01-11 14:39:31 GMT)</reason>
+ <keyName>fauxkey</keyName>
+ <amiLaunchIndex>0</amiLaunchIndex>
+ <productCodes/>
+ <instanceType>m1.small</instanceType>
+ <launchTime>2013-12-02T11:58:11.000Z</launchTime>
+ <placement>
+ <availabilityZone>us-east-1d</availabilityZone>
+ <groupName/>
+ <tenancy>default</tenancy>
+ </placement>
+ <kernelId>aki-88aa75e1</kernelId>
+ <monitoring>
+ <state>disabled</state>
+ </monitoring>
+ <privateIpAddress>10.211.11.211</privateIpAddress>
+ <ipAddress>1.2.3.4</ipAddress>
+ <groupSet>
+ <item>
+ <groupId>sg-42916629</groupId>
+ <groupName>Test Group 1</groupName>
+ </item>
+ <item>
+ <groupId>sg-42916628</groupId>
+ <groupName>Test Group 2</groupName>
+ </item>
+ </groupSet>
+ <stateReason>
+ <code>Client.UserInitiatedShutdown</code>
+ <message>Client.UserInitiatedShutdown: User initiated shutdown</message>
+ </stateReason>
+ <architecture>x86_64</architecture>
+ <rootDeviceType>ebs</rootDeviceType>
+ <rootDeviceName>/dev/sda1</rootDeviceName>
+ <blockDeviceMapping>
+ <item>
+ <deviceName>/dev/sda1</deviceName>
+ <ebs>
+ <volumeId>vol-5e312311</volumeId>
+ <status>attached</status>
+ <attachTime>2013-04-09T18:01:01.000Z</attachTime>
+ <deleteOnTermination>true</deleteOnTermination>
+ </ebs>
+ </item>
+ </blockDeviceMapping>
+ <virtualizationType>paravirtual</virtualizationType>
+ <clientToken>ifmxj1365530456668</clientToken>
+ <tagSet/>
+ <hypervisor>xen</hypervisor>
+ <networkInterfaceSet/>
+ <ebsOptimized>false</ebsOptimized>
+ </item>
+ </instancesSet>
</item>
- </groupSet>
- <instancesSet>
<item>
- <instanceId>i-4382922a</instanceId>
- <imageId>ami-0d57b264</imageId>
- <instanceState>
- <code>0</code>
- <name>pending</name>
- </instanceState>
- <privateDnsName/>
- <dnsName/>
- <reason/>
- <keyName>my-key-pair</keyName>
- <privateIpAddress>1.2.3.5</privateIpAddress>
- <ipAddress>1.2.3.5</ipAddress>
- <amiLaunchIndex>0</amiLaunchIndex>
- <productCodes/>
- <instanceType>m1.small</instanceType>
- <launchTime>2009-08-07T05:47:04.000Z</launchTime>
- <placement>
- <availabilityZone>us-east-1a</availabilityZone>
- </placement>
- <monitoring>
- <state>disabled</state>
- </monitoring>
+ <reservationId>r-88dc1bef</reservationId>
+ <ownerId>123456789098</ownerId>
+ <groupSet/>
+ <instancesSet>
+ <item>
+ <instanceId>i-8474834a</instanceId>
+ <imageId>ami-29674340</imageId>
+ <instanceState>
+ <code>80</code>
+ <name>stopped</name>
+ </instanceState>
+ <privateDnsName>ip-172-16-9-139.ec2.internal</privateDnsName>
+ <dnsName/>
+ <reason>User initiated (2014-01-11 14:39:31 GMT)</reason>
+ <keyName>cderamus</keyName>
+ <amiLaunchIndex>0</amiLaunchIndex>
+ <productCodes/>
+ <instanceType>t1.micro</instanceType>
+ <launchTime>2013-12-02T15:58:29.000Z</launchTime>
+ <placement>
+ <availabilityZone>us-east-1d</availabilityZone>
+ <groupName/>
+ <tenancy>default</tenancy>
+ </placement>
+ <kernelId>aki-88aa75e1</kernelId>
+ <monitoring>
+ <state>disabled</state>
+ </monitoring>
+ <subnetId>subnet-5fd9d412</subnetId>
+ <vpcId>vpc-61dcd30e</vpcId>
+ <privateIpAddress>172.16.9.139</privateIpAddress>
+ <ipAddress>1.2.3.5</ipAddress>
+ <sourceDestCheck>true</sourceDestCheck>
+ <groupSet>
+ <item>
+ <groupId>sg-495a9926</groupId>
+ <groupName>default</groupName>
+ </item>
+ </groupSet>
+ <stateReason>
+ <code>Client.UserInitiatedShutdown</code>
+ <message>Client.UserInitiatedShutdown: User initiated shutdown</message>
+ </stateReason>
+ <architecture>x86_64</architecture>
+ <rootDeviceType>ebs</rootDeviceType>
+ <rootDeviceName>/dev/sda1</rootDeviceName>
+ <blockDeviceMapping>
+ <item>
+ <deviceName>/dev/sda1</deviceName>
+ <ebs>
+ <volumeId>vol-60124921</volumeId>
+ <status>attached</status>
+ <attachTime>2013-12-02T15:58:32.000Z</attachTime>
+ <deleteOnTermination>false</deleteOnTermination>
+ </ebs>
+ </item>
+ </blockDeviceMapping>
+ <virtualizationType>paravirtual</virtualizationType>
+ <clientToken/>
+ <tagSet>
+ <item>
+ <key>Name</key>
+ <value>Test Server 2</value>
+ </item>
+ <item>
+ <key>Group</key>
+ <value>VPC Test</value>
+ </item>
+ </tagSet>
+ <hypervisor>xen</hypervisor>
+ <networkInterfaceSet>
+ <item>
+ <networkInterfaceId>eni-c5dffd83</networkInterfaceId>
+ <subnetId>subnet-5fd9d412</subnetId>
+ <vpcId>vpc-61dcd30e</vpcId>
+ <description/>
+ <ownerId>123456789098</ownerId>
+ <status>in-use</status>
+ <macAddress>0e:27:72:16:52:ab</macAddress>
+ <privateIpAddress>172.16.9.139</privateIpAddress>
+ <privateDnsName>ip-172-16-9-139.ec2.internal</privateDnsName>
+ <sourceDestCheck>true</sourceDestCheck>
+ <groupSet>
+ <item>
+ <groupId>sg-495a9926</groupId>
+ <groupName>default</groupName>
+ </item>
+ </groupSet>
+ <attachment>
+ <attachmentId>eni-attach-4d924721</attachmentId>
+ <deviceIndex>0</deviceIndex>
+ <status>attached</status>
+ <attachTime>2013-12-02T15:58:29.000Z</attachTime>
+ <deleteOnTermination>true</deleteOnTermination>
+ </attachment>
+ <privateIpAddressesSet>
+ <item>
+ <privateIpAddress>172.16.4.139</privateIpAddress>
+ <privateDnsName>ip-172-16-4-139.ec2.internal</privateDnsName>
+ <primary>true</primary>
+ </item>
+ </privateIpAddressesSet>
+ </item>
+ </networkInterfaceSet>
+ <ebsOptimized>false</ebsOptimized>
+ </item>
+ </instancesSet>
</item>
- <item>
- <instanceId>i-8474834a</instanceId>
- <imageId>ami-0f234b234</imageId>
- <instanceState>
- <code>0</code>
- <name>pending</name>
- </instanceState>
- <privateDnsName/>
- <dnsName/>
- <reason/>
- <keyName>my-key-pair2</keyName>
- <privateIpAddress>1.2.3.5</privateIpAddress>
- <ipAddress>1.2.3.5</ipAddress>
- <amiLaunchIndex>0</amiLaunchIndex>
- <productCodes/>
- <instanceType>m1.micro</instanceType>
- <launchTime>2009-08-07T05:47:04.000Z</launchTime>
- <placement>
- <availabilityZone>us-west-1a</availabilityZone>
- </placement>
- <monitoring>
- <state>disabled</state>
- </monitoring>
- <tagSet>
- <item>
- <key>user_key0</key>
- <value>user_val0</value>
- </item>
- <item>
- <key>user_key1</key>
- <value>user_val1</value>
- </item>
- </tagSet>
- </item>
- </instancesSet>
- </item>
- </reservationSet>
-</DescribeInstancesResponse>
+ </reservationSet>
+</DescribeInstancesResponse>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/91608576/libcloud/test/compute/fixtures/ec2/describe_instances_with_tags.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/ec2/describe_instances_with_tags.xml b/libcloud/test/compute/fixtures/ec2/describe_instances_with_tags.xml
deleted file mode 100644
index 4bcb5b1..0000000
--- a/libcloud/test/compute/fixtures/ec2/describe_instances_with_tags.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2013-10-15/">
- <requestId>56d0fffa-8819-4658-bdd7-548f143a86d2</requestId>
- <reservationSet>
- <item>
- <reservationId>r-07adf66e</reservationId>
- <ownerId>822272953071</ownerId>
- <groupSet>
- <item>
- <groupId>default</groupId>
- </item>
- </groupSet>
- <instancesSet>
- <item>
- <instanceId>i-8474834a</instanceId>
- <imageId>ami-0f234b234</imageId>
- <instanceState>
- <code>0</code>
- <name>pending</name>
- </instanceState>
- <privateDnsName/>
- <dnsName/>
- <reason/>
- <privateIpAddress>1.2.3.5</privateIpAddress>
- <ipAddress>1.2.3.5</ipAddress>
- <amiLaunchIndex>0</amiLaunchIndex>
- <productCodes/>
- <instanceType>m1.micro</instanceType>
- <launchTime>2009-08-07T05:47:04.000Z</launchTime>
- <placement>
- <availabilityZone>us-west-1a</availabilityZone>
- </placement>
- <monitoring>
- <state>disabled</state>
- </monitoring>
- <tagSet>
- <item>
- <key>Name</key>
- <value>foobar1</value>
- </item>
- <item>
- <key>user_key1</key>
- <value>user_val1</value>
- </item>
- <item>
- <key>user_key2</key>
- <value>user_val2</value>
- </item>
- </tagSet>
- </item>
- </instancesSet>
- </item>
- </reservationSet>
-</DescribeInstancesResponse>
http://git-wip-us.apache.org/repos/asf/libcloud/blob/91608576/libcloud/test/compute/test_ec2.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_ec2.py b/libcloud/test/compute/test_ec2.py
index 9a16e05..d86af68 100644
--- a/libcloud/test/compute/test_ec2.py
+++ b/libcloud/test/compute/test_ec2.py
@@ -133,7 +133,7 @@ class EC2Tests(LibcloudTestCase, TestCaseMixin):
node = self.driver.create_node(name='foo', image=image, size=size,
ex_clienttoken=token)
self.assertEqual(node.id, 'i-2ba64342')
- self.assertEqual(node.extra['clienttoken'], token)
+ self.assertEqual(node.extra['client_token'], token)
# from: http://docs.amazonwebservices.com/AWSEC2/latest/DeveloperGuide/index.html?Run_Instance_Idempotency.html
# If you repeat the request with the same client token, but change
@@ -174,13 +174,17 @@ class EC2Tests(LibcloudTestCase, TestCaseMixin):
self.assertEqual(node.id, 'i-4382922a')
self.assertEqual(node.name, node.id)
self.assertEqual(len(node.public_ips), 2)
- self.assertEqual(node.extra['launchdatetime'],
- '2009-08-07T05:47:04.000Z')
- self.assertEqual(node.extra['key_name'], 'my-key-pair')
- self.assertTrue('instancetype' in node.extra)
+ self.assertEqual(node.extra['launch_time'],
+ '2013-12-02T11:58:11.000Z')
+ self.assertTrue('instance_type' in node.extra)
+ self.assertEqual(node.extra['availability'], 'us-east-1d')
+ self.assertEqual(node.extra['key_name'], 'fauxkey')
+ self.assertEqual(node.extra['monitoring'], 'disabled')
+ self.assertEqual(node.extra['image_id'], 'ami-3215fe5a')
+ self.assertEqual(len(node.extra['groups']), 2)
+ self.assertEqual(len(node.extra['block_device_mapping']), 1)
self.assertEqual(public_ips[0], '1.2.3.4')
- self.assertEqual(public_ips[1], '1.2.3.5')
nodes = self.driver.list_nodes(ex_node_ids=['i-4382922a',
'i-8474834a'])
@@ -189,14 +193,16 @@ class EC2Tests(LibcloudTestCase, TestCaseMixin):
self.assertEqual(ret_node1.id, 'i-4382922a')
self.assertEqual(ret_node2.id, 'i-8474834a')
-
- self.assertEqual(ret_node1.extra['launchdatetime'],
- '2009-08-07T05:47:04.000Z')
- self.assertTrue('instancetype' in ret_node1.extra)
-
- self.assertEqual(ret_node2.extra['launchdatetime'],
- '2009-08-07T05:47:04.000Z')
- self.assertTrue('instancetype' in ret_node2.extra)
+ self.assertEqual(ret_node2.name, 'Test Server 2')
+ self.assertEqual(ret_node2.extra['subnet_id'], 'subnet-5fd9d412')
+ self.assertEqual(ret_node2.extra['vpc_id'], 'vpc-61dcd30e')
+ self.assertEqual(ret_node2.extra['tags']['Group'], 'VPC Test')
+ self.assertEqual(ret_node1.extra['launch_time'],
+ '2013-12-02T11:58:11.000Z')
+ self.assertTrue('instance_type' in ret_node1.extra)
+ self.assertEqual(ret_node2.extra['launch_time'],
+ '2013-12-02T15:58:29.000Z')
+ self.assertTrue('instance_type' in ret_node2.extra)
def test_ex_list_reserved_nodes(self):
node = self.driver.ex_list_reserved_nodes()[0]
@@ -214,12 +220,6 @@ class EC2Tests(LibcloudTestCase, TestCaseMixin):
self.assertEqual(node.extra['currency_code'], 'USD')
self.assertEqual(node.extra['offering_type'], 'Light Utilization')
- def test_list_nodes_with_name_tag(self):
- EC2MockHttp.type = 'WITH_TAGS'
- node = self.driver.list_nodes()[0]
- self.assertEqual(node.id, 'i-8474834a')
- self.assertEqual(node.name, 'foobar1')
-
def test_list_location(self):
locations = self.driver.list_locations()
self.assertTrue(len(locations) > 0)
@@ -1030,10 +1030,6 @@ class EC2MockHttp(MockHttpTestCase):
body = self.fixtures.load('describe_instances.xml')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
- def _WITH_TAGS_DescribeInstances(self, method, url, body, headers):
- body = self.fixtures.load('describe_instances_with_tags.xml')
- return (httplib.OK, body, {}, httplib.responses[httplib.OK])
-
def _DescribeReservedInstances(self, method, url, body, headers):
body = self.fixtures.load('describe_reserved_instances.xml')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
@@ -1367,7 +1363,7 @@ class NimbusTests(EC2Tests):
public_ips = node.public_ips
self.assertEqual(node.id, 'i-4382922a')
self.assertEqual(len(node.public_ips), 1)
- self.assertEqual(public_ips[0], '1.2.3.5')
+ self.assertEqual(public_ips[0], '1.2.3.4')
self.assertEqual(node.extra['tags'], {})
node = self.driver.list_nodes()[1]
@@ -1376,8 +1372,8 @@ class NimbusTests(EC2Tests):
self.assertEqual(node.id, 'i-8474834a')
self.assertEqual(len(node.public_ips), 1)
self.assertEqual(public_ips[0], '1.2.3.5')
- self.assertEqual(node.extra['tags'], {
- 'user_key0': 'user_val0', 'user_key1': 'user_val1'})
+ self.assertEqual(node.extra['tags'],
+ {'Name': 'Test Server 2', 'Group': 'VPC Test'})
def test_ex_create_tags(self):
# Nimbus doesn't support creating tags so this one should be a
[2/2] git commit: Update CHANGES.
Posted by to...@apache.org.
Update CHANGES.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/43c772c3
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/43c772c3
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/43c772c3
Branch: refs/heads/trunk
Commit: 43c772c38ab47c6761826409c1067fcbcb4b4c02
Parents: 9160857
Author: Tomaz Muraus <to...@apache.org>
Authored: Sun Jan 12 17:26:46 2014 +0100
Committer: Tomaz Muraus <to...@apache.org>
Committed: Sun Jan 12 17:26:46 2014 +0100
----------------------------------------------------------------------
CHANGES | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/43c772c3/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 0e449b4..9a22b3f 100644
--- a/CHANGES
+++ b/CHANGES
@@ -188,6 +188,10 @@ Changes with Apache Libcloud in development
(LIBCLOUD-470, GITHUB-208, GITHUB-220)
[Chris DeRamus]
+ - Add additional provider specific attributes to the "extra" dictionary of
+ the Node object in the EC2 driver. (LIBCLOUD-493, GITHUB-221)
+ [Chris DeRamus]
+
*) Storage
- Allow user to specify 'Content-Disposition' header in the CloudFiles