1
from datetime import datetime
3
from boto.resultset import ResultSet
6
def __init__(self, connection=None):
7
self.connection = connection
8
self.creation_time = None
9
self.description = None
10
self.disable_rollback = None
11
self.notification_arns = []
15
self.stack_status = None
16
self.stack_name = None
17
self.stack_name_reason = None
18
self.timeout_in_minutes = None
20
def startElement(self, name, attrs, connection):
21
if name == "Parameters":
22
self.parameters = ResultSet([('member', Parameter)])
23
return self.parameters
24
elif name == "Outputs":
25
self.outputs = ResultSet([('member', Output)])
30
def endElement(self, name, value, connection):
31
if name == 'CreationTime':
32
self.creation_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
33
elif name == "Description":
34
self.description = value
35
elif name == "DisableRollback":
36
self.disable_rollback = bool(value)
37
elif name == "NotificationARNs":
38
self.notification_arns = value
39
elif name == 'StackId':
41
elif name == 'StackName':
42
self.stack_name = value
43
elif name == 'StackStatus':
44
self.stack_status = value
45
elif name == "StackStatusReason":
46
self.stack_status_reason = value
47
elif name == "TimeoutInMinutes":
48
self.timeout_in_minutes = int(value)
49
elif name == "member":
52
setattr(self, name, value)
55
return self.connection.delete_stack(stack_name_or_id=self.stack_id)
57
def describe_events(self, next_token=None):
58
return self.connection.describe_stack_events(
59
stack_name_or_id=self.stack_id,
63
def describe_resource(self, logical_resource_id):
64
return self.connection.describe_stack_resource(
65
stack_name_or_id=self.stack_id,
66
logical_resource_id=logical_resource_id
69
def describe_resources(self, logical_resource_id=None,
70
physical_resource_id=None):
71
return self.connection.describe_stack_resources(
72
stack_name_or_id=self.stack_id,
73
logical_resource_id=logical_resource_id,
74
physical_resource_id=physical_resource_id
77
def list_resources(self, next_token=None):
78
return self.connection.list_stack_resources(
79
stack_name_or_id=self.stack_id,
84
rs = self.connection.describe_stacks(self.stack_id)
85
if len(rs) == 1 and rs[0].stack_id == self.stack_id:
86
self.__dict__.update(rs[0].__dict__)
88
raise ValueError("%s is not a valid Stack ID or Name" %
91
def get_template(self):
92
return self.connection.get_template(stack_name_or_id=self.stack_id)
95
def __init__(self, connection=None):
96
self.connection = connection
98
self.stack_status = None
99
self.stack_name = None
100
self.creation_time = None
101
self.deletion_time = None
102
self.template_description = None
104
def startElement(self, name, attrs, connection):
107
def endElement(self, name, value, connection):
108
if name == 'StackId':
109
self.stack_id = value
110
elif name == 'StackStatus':
111
self.stack_status = value
112
elif name == 'StackName':
113
self.stack_name = value
114
elif name == 'CreationTime':
115
self.creation_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
116
elif name == "DeletionTime":
117
self.deletion_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
118
elif name == 'TemplateDescription':
119
self.template_description = value
120
elif name == "member":
123
setattr(self, name, value)
126
def __init__(self, connection=None):
127
self.connection = None
131
def startElement(self, name, attrs, connection):
134
def endElement(self, name, value, connection):
135
if name == "ParameterKey":
137
elif name == "ParameterValue":
140
setattr(self, name, value)
143
return "Parameter:\"%s\"=\"%s\"" % (self.key, self.value)
146
def __init__(self, connection=None):
147
self.connection = connection
148
self.description = None
152
def startElement(self, name, attrs, connection):
155
def endElement(self, name, value, connection):
156
if name == "Description":
157
self.description = value
158
elif name == "OutputKey":
160
elif name == "OutputValue":
163
setattr(self, name, value)
166
return "Output:\"%s\"=\"%s\"" % (self.key, self.value)
169
def __init__(self, connection=None):
170
self.connection = connection
171
self.description = None
172
self.logical_resource_id = None
173
self.physical_resource_id = None
174
self.resource_status = None
175
self.resource_status_reason = None
176
self.resource_type = None
178
self.stack_name = None
179
self.timestamp = None
181
def startElement(self, name, attrs, connection):
184
def endElement(self, name, value, connection):
185
if name == "Description":
186
self.description = value
187
elif name == "LogicalResourceId":
188
self.logical_resource_id = value
189
elif name == "PhysicalResourceId":
190
self.physical_resource_id = value
191
elif name == "ResourceStatus":
192
self.resource_status = value
193
elif name == "ResourceStatusReason":
194
self.resource_status_reason = value
195
elif name == "ResourceType":
196
self.resource_type = value
197
elif name == "StackId":
198
self.stack_id = value
199
elif name == "StackName":
200
self.stack_name = value
201
elif name == "Timestamp":
202
self.timestamp = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
204
setattr(self, name, value)
207
return "StackResource:%s (%s)" % (self.logical_resource_id,
210
class StackResourceSummary:
211
def __init__(self, connection=None):
212
self.connection = connection
213
self.last_updated_timestamp = None
214
self.logical_resource_id = None
215
self.physical_resource_id = None
216
self.resource_status = None
217
self.resource_status_reason = None
218
self.resource_type = None
220
def startElement(self, name, attrs, connection):
223
def endElement(self, name, value, connection):
224
if name == "LastUpdatedTimestamp":
225
self.last_updated_timestampe = datetime.strptime(value,
226
'%Y-%m-%dT%H:%M:%SZ')
227
elif name == "LogicalResourceId":
228
self.logical_resource_id = value
229
elif name == "PhysicalResourceId":
230
self.physical_resource_id = value
231
elif name == "ResourceStatus":
232
self.resource_status = value
233
elif name == "ResourceStatusReason":
234
self.resource_status_reason = value
235
elif name == "ResourceType":
236
self.resource_type = value
238
setattr(self, name, value)
241
return "StackResourceSummary:%s (%s)" % (self.logical_resource_id,
245
valid_states = ("CREATE_IN_PROGRESS", "CREATE_FAILED", "CREATE_COMPLETE",
246
"DELETE_IN_PROGRESS", "DELETE_FAILED", "DELETE_COMPLETE")
247
def __init__(self, connection=None):
248
self.connection = connection
250
self.logical_resource_id = None
251
self.physical_resource_id = None
252
self.resource_properties = None
253
self.resource_status = None
254
self.resource_status_reason = None
255
self.resource_type = None
257
self.stack_name = None
258
self.timestamp = None
260
def startElement(self, name, attrs, connection):
263
def endElement(self, name, value, connection):
264
if name == "EventId":
265
self.event_id = value
266
elif name == "LogicalResourceId":
267
self.logical_resource_id = value
268
elif name == "PhysicalResourceId":
269
self.physical_resource_id = value
270
elif name == "ResourceProperties":
271
self.resource_properties = value
272
elif name == "ResourceStatus":
273
self.resource_status = value
274
elif name == "ResourceStatusReason":
275
self.resource_status_reason = value
276
elif name == "ResourceType":
277
self.resource_type = value
278
elif name == "StackId":
279
self.stack_id = value
280
elif name == "StackName":
281
self.stack_name = value
282
elif name == "Timestamp":
283
self.timestamp = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
285
setattr(self, name, value)
288
return "StackEvent %s %s %s" % (self.resource_type,
289
self.logical_resource_id, self.resource_status)