Merge lp:~oubiwann/txaws/415491-instance-object into lp:~txawsteam/txaws/trunk

Proposed by Duncan McGreggor
Status: Merged
Merge reported by: Duncan McGreggor
Merged at revision: not available
Proposed branch: lp:~oubiwann/txaws/415491-instance-object
Merge into: lp:~txawsteam/txaws/trunk
Diff against target: None lines
To merge this branch: bzr merge lp:~oubiwann/txaws/415491-instance-object
Reviewer Review Type Date Requested Status
Original txAWS Team Pending
Review via email: mp+10505@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Duncan McGreggor (oubiwann) wrote :

This is ready for review.

Revision history for this message
Robert Collins (lifeless) wrote :

+1

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'txaws/ec2/client.py'
2--- txaws/ec2/client.py 2009-08-19 20:55:04 +0000
3+++ txaws/ec2/client.py 2009-08-21 03:26:35 +0000
4@@ -32,12 +32,43 @@
5 """An Amazon EC2 Instance.
6
7 @attrib instance_id: The instance ID of this instance.
8- @attrib instance_state: The state of this instance.
9+ @attrib instance_state: The current state of this instance.
10+ @attrib instance_type: The instance type.
11+ @attrib image_id: Image ID of the AMI used to launch the instance.
12+ @attrib private_dns_name: The private DNS name assigned to the instance.
13+ This DNS name can only be used inside the Amazon EC2 network. This
14+ element remains empty until the instance enters a running state.
15+ @attrib dns_name: The public DNS name assigned to the instance. This DNS
16+ name is contactable from outside the Amazon EC2 network. This element
17+ remains empty until the instance enters a running state.
18+ @attrib key_name: If this instance was launched with an associated key
19+ pair, this displays the key pair name.
20+ @attrib ami_launch_index: The AMI launch index, which can be used to find
21+ this instance within the launch group.
22+ @attrib product_codes: Product codes attached to this instance.
23+ @attrib launch_time: The time the instance launched.
24+ @attrib placement: The location where the instance launched.
25+ @attrib kernel_id: Optional. Kernel associated with this instance.
26+ @attrib ramdisk_id: Optional. RAM disk associated with this instance.
27 """
28-
29- def __init__(self, instance_id, instance_state, reservation=None):
30+ def __init__(self, instance_id, instance_state, instance_type="",
31+ image_id="", private_dns_name="", dns_name="", key_name="",
32+ ami_launch_index="", launch_time="", placement="",
33+ product_codes=[], kernel_id=None, ramdisk_id=None,
34+ reservation=None):
35 self.instance_id = instance_id
36 self.instance_state = instance_state
37+ self.instance_type = instance_type
38+ self.image_id = image_id
39+ self.private_dns_name = private_dns_name
40+ self.dns_name = dns_name
41+ self.key_name = key_name
42+ self.ami_launch_index = ami_launch_index
43+ self.launch_time = launch_time
44+ self.placement = placement
45+ self.product_codes = product_codes
46+ self.kernel_id = kernel_id
47+ self.ramdisk_id = ramdisk_id
48 self.reservation = reservation
49
50
51@@ -103,8 +134,35 @@
52 instance_state = instance_data.find(
53 self.name_space + 'instanceState').findtext(
54 self.name_space + 'name')
55- instance = Instance(instance_id, instance_state,
56- reservation=reservation)
57+ instance_type = instance_data.findtext(
58+ self.name_space + 'instanceType')
59+ image_id = instance_data.findtext(self.name_space + 'imageId')
60+ private_dns_name = instance_data.findtext(
61+ self.name_space + 'privateDnsName')
62+ dns_name = instance_data.findtext(self.name_space + 'dnsName')
63+ key_name = instance_data.findtext(self.name_space + 'keyName')
64+ ami_launch_index = instance_data.findtext(
65+ self.name_space + 'amiLaunchIndex')
66+ launch_time = instance_data.findtext(
67+ self.name_space + 'launchTime')
68+ placement = instance_data.find(
69+ self.name_space + 'placement').findtext(
70+ self.name_space + 'availabilityZone')
71+ products = []
72+ for product_data in instance_data.find(
73+ self.name_space + 'productCodesSet'):
74+ product_code = product_data.findtext(
75+ self.name_space + 'productCode')
76+ products.append(product_code)
77+ kernel_id = instance_data.findtext(
78+ self.name_space + 'kernelId')
79+ ramdisk_id = instance_data.findtext(
80+ self.name_space + 'ramdiskId')
81+ instance = Instance(
82+ instance_id, instance_state, instance_type, image_id,
83+ private_dns_name, dns_name, key_name, ami_launch_index,
84+ launch_time, placement, products, kernel_id, ramdisk_id,
85+ reservation=reservation)
86 instances.append(instance)
87 results.extend(instances)
88 return results
89
90=== modified file 'txaws/ec2/tests/test_client.py'
91--- txaws/ec2/tests/test_client.py 2009-08-18 21:56:36 +0000
92+++ txaws/ec2/tests/test_client.py 2009-08-21 03:26:35 +0000
93@@ -35,7 +35,12 @@
94 <reason/>
95 <keyName>keyname</keyName>
96 <amiLaunchIndex>0</amiLaunchIndex>
97- <productCodes/>
98+ <productCodesSet>
99+ <item>
100+ <productCode>774F4FF8</productCode>
101+ </item>
102+ </productCodesSet>
103+
104 <instanceType>c1.xlarge</instanceType>
105 <launchTime>2009-04-27T02:23:18.000Z</launchTime>
106 <placement>
107@@ -91,6 +96,27 @@
108 self.assertEquals(reservation.groups, ["one", "two"])
109
110
111+class InstanceTestCase(TXAWSTestCase):
112+
113+ def test_instance_creation(self):
114+ instance = client.Instance(
115+ "id1", "running", "type", "id2", "dns1", "dns2", "key", "ami",
116+ "time", "placement", ["prod1", "prod2"], "id3", "id4")
117+ self.assertEquals(instance.instance_id, "id1")
118+ self.assertEquals(instance.instance_state, "running")
119+ self.assertEquals(instance.instance_type, "type")
120+ self.assertEquals(instance.image_id, "id2")
121+ self.assertEquals(instance.private_dns_name, "dns1")
122+ self.assertEquals(instance.dns_name, "dns2")
123+ self.assertEquals(instance.key_name, "key")
124+ self.assertEquals(instance.ami_launch_index, "ami")
125+ self.assertEquals(instance.launch_time, "time")
126+ self.assertEquals(instance.placement, "placement")
127+ self.assertEquals(instance.product_codes, ["prod1", "prod2"])
128+ self.assertEquals(instance.kernel_id, "id3")
129+ self.assertEquals(instance.ramdisk_id, "id4")
130+
131+
132 class TestEC2Client(TXAWSTestCase):
133
134 def test_init_no_creds(self):
135@@ -116,6 +142,24 @@
136 self.assertEquals(reservation.owner_id, "123456789012")
137 group = reservation.groups[0]
138 self.assertEquals(group, "default")
139+ self.assertEquals(instance.instance_id, "i-abcdef01")
140+ self.assertEquals(instance.instance_state, "running")
141+ self.assertEquals(instance.instance_type, "c1.xlarge")
142+ self.assertEquals(instance.image_id, "ami-12345678")
143+ self.assertEquals(
144+ instance.private_dns_name,
145+ "domU-12-31-39-03-15-11.compute-1.internal")
146+ self.assertEquals(
147+ instance.dns_name,
148+ "ec2-75-101-245-65.compute-1.amazonaws.com")
149+ self.assertEquals(instance.key_name, "keyname")
150+ self.assertEquals(instance.ami_launch_index, "0")
151+ self.assertEquals(instance.launch_time, "2009-04-27T02:23:18.000Z")
152+ self.assertEquals(instance.placement, "us-east-1c")
153+ self.assertEquals(instance.product_codes, ["774F4FF8"])
154+ self.assertEquals(instance.kernel_id, "aki-b51cf9dc")
155+ self.assertEquals(instance.ramdisk_id, "ari-b31cf9da")
156+
157
158 def test_parse_reservation(self):
159 ec2 = client.EC2Client(creds='foo')

Subscribers

People subscribed via source and target branches