comparison venv/lib/python2.7/site-packages/boto/cloudformation/stack.py @ 0:d67268158946 draft

planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
author bcclaywell
date Mon, 12 Oct 2015 17:43:33 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:d67268158946
1 from datetime import datetime
2
3 from boto.resultset import ResultSet
4
5
6 class Stack(object):
7 def __init__(self, connection=None):
8 self.connection = connection
9 self.creation_time = None
10 self.description = None
11 self.disable_rollback = None
12 self.notification_arns = []
13 self.outputs = []
14 self.parameters = []
15 self.capabilities = []
16 self.tags = []
17 self.stack_id = None
18 self.stack_status = None
19 self.stack_name = None
20 self.stack_name_reason = None
21 self.timeout_in_minutes = None
22
23 def startElement(self, name, attrs, connection):
24 if name == "Parameters":
25 self.parameters = ResultSet([('member', Parameter)])
26 return self.parameters
27 elif name == "Outputs":
28 self.outputs = ResultSet([('member', Output)])
29 return self.outputs
30 elif name == "Capabilities":
31 self.capabilities = ResultSet([('member', Capability)])
32 return self.capabilities
33 elif name == "Tags":
34 self.tags = Tag()
35 return self.tags
36 elif name == 'NotificationARNs':
37 self.notification_arns = ResultSet([('member', NotificationARN)])
38 return self.notification_arns
39 else:
40 return None
41
42 def endElement(self, name, value, connection):
43 if name == 'CreationTime':
44 try:
45 self.creation_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
46 except ValueError:
47 self.creation_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%S.%fZ')
48 elif name == "Description":
49 self.description = value
50 elif name == "DisableRollback":
51 if str(value).lower() == 'true':
52 self.disable_rollback = True
53 else:
54 self.disable_rollback = False
55 elif name == 'StackId':
56 self.stack_id = value
57 elif name == 'StackName':
58 self.stack_name = value
59 elif name == 'StackStatus':
60 self.stack_status = value
61 elif name == "StackStatusReason":
62 self.stack_status_reason = value
63 elif name == "TimeoutInMinutes":
64 self.timeout_in_minutes = int(value)
65 elif name == "member":
66 pass
67 else:
68 setattr(self, name, value)
69
70 def delete(self):
71 return self.connection.delete_stack(stack_name_or_id=self.stack_id)
72
73 def describe_events(self, next_token=None):
74 return self.connection.describe_stack_events(
75 stack_name_or_id=self.stack_id,
76 next_token=next_token
77 )
78
79 def describe_resource(self, logical_resource_id):
80 return self.connection.describe_stack_resource(
81 stack_name_or_id=self.stack_id,
82 logical_resource_id=logical_resource_id
83 )
84
85 def describe_resources(self, logical_resource_id=None,
86 physical_resource_id=None):
87 return self.connection.describe_stack_resources(
88 stack_name_or_id=self.stack_id,
89 logical_resource_id=logical_resource_id,
90 physical_resource_id=physical_resource_id
91 )
92
93 def list_resources(self, next_token=None):
94 return self.connection.list_stack_resources(
95 stack_name_or_id=self.stack_id,
96 next_token=next_token
97 )
98
99 def update(self):
100 rs = self.connection.describe_stacks(self.stack_id)
101 if len(rs) == 1 and rs[0].stack_id == self.stack_id:
102 self.__dict__.update(rs[0].__dict__)
103 else:
104 raise ValueError("%s is not a valid Stack ID or Name" %
105 self.stack_id)
106
107 def get_template(self):
108 return self.connection.get_template(stack_name_or_id=self.stack_id)
109
110 def get_policy(self):
111 """
112 Returns the stack policy for this stack. If it has no policy
113 then, a null value is returned.
114 """
115 return self.connection.get_stack_policy(self.stack_id)
116
117 def set_policy(self, stack_policy_body=None, stack_policy_url=None):
118 """
119 Sets a stack policy for this stack.
120
121 :type stack_policy_body: string
122 :param stack_policy_body: Structure containing the stack policy body.
123 (For more information, go to ` Prevent Updates to Stack Resources`_
124 in the AWS CloudFormation User Guide.)
125 You must pass `StackPolicyBody` or `StackPolicyURL`. If both are
126 passed, only `StackPolicyBody` is used.
127
128 :type stack_policy_url: string
129 :param stack_policy_url: Location of a file containing the stack
130 policy. The URL must point to a policy (max size: 16KB) located in
131 an S3 bucket in the same region as the stack. You must pass
132 `StackPolicyBody` or `StackPolicyURL`. If both are passed, only
133 `StackPolicyBody` is used.
134 """
135 return self.connection.set_stack_policy(self.stack_id,
136 stack_policy_body=stack_policy_body,
137 stack_policy_url=stack_policy_url)
138
139
140 class StackSummary(object):
141 def __init__(self, connection=None):
142 self.connection = connection
143 self.stack_id = None
144 self.stack_status = None
145 self.stack_name = None
146 self.creation_time = None
147 self.deletion_time = None
148 self.template_description = None
149
150 def startElement(self, name, attrs, connection):
151 return None
152
153 def endElement(self, name, value, connection):
154 if name == 'StackId':
155 self.stack_id = value
156 elif name == 'StackStatus':
157 self.stack_status = value
158 elif name == 'StackName':
159 self.stack_name = value
160 elif name == 'CreationTime':
161 try:
162 self.creation_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
163 except ValueError:
164 self.creation_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%S.%fZ')
165 elif name == "DeletionTime":
166 try:
167 self.deletion_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
168 except ValueError:
169 self.deletion_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%S.%fZ')
170 elif name == 'TemplateDescription':
171 self.template_description = value
172 elif name == "member":
173 pass
174 else:
175 setattr(self, name, value)
176
177
178 class Parameter(object):
179 def __init__(self, connection=None):
180 self.connection = None
181 self.key = None
182 self.value = None
183
184 def startElement(self, name, attrs, connection):
185 return None
186
187 def endElement(self, name, value, connection):
188 if name == "ParameterKey":
189 self.key = value
190 elif name == "ParameterValue":
191 self.value = value
192 else:
193 setattr(self, name, value)
194
195 def __repr__(self):
196 return "Parameter:\"%s\"=\"%s\"" % (self.key, self.value)
197
198
199 class Output(object):
200 def __init__(self, connection=None):
201 self.connection = connection
202 self.description = None
203 self.key = None
204 self.value = None
205
206 def startElement(self, name, attrs, connection):
207 return None
208
209 def endElement(self, name, value, connection):
210 if name == "Description":
211 self.description = value
212 elif name == "OutputKey":
213 self.key = value
214 elif name == "OutputValue":
215 self.value = value
216 else:
217 setattr(self, name, value)
218
219 def __repr__(self):
220 return "Output:\"%s\"=\"%s\"" % (self.key, self.value)
221
222
223 class Capability(object):
224 def __init__(self, connection=None):
225 self.connection = None
226 self.value = None
227
228 def startElement(self, name, attrs, connection):
229 return None
230
231 def endElement(self, name, value, connection):
232 self.value = value
233
234 def __repr__(self):
235 return "Capability:\"%s\"" % (self.value)
236
237
238 class Tag(dict):
239
240 def __init__(self, connection=None):
241 dict.__init__(self)
242 self.connection = connection
243 self._current_key = None
244 self._current_value = None
245
246 def startElement(self, name, attrs, connection):
247 return None
248
249 def endElement(self, name, value, connection):
250 if name == "Key":
251 self._current_key = value
252 elif name == "Value":
253 self._current_value = value
254 else:
255 setattr(self, name, value)
256
257 if self._current_key and self._current_value:
258 self[self._current_key] = self._current_value
259 self._current_key = None
260 self._current_value = None
261
262
263 class NotificationARN(object):
264 def __init__(self, connection=None):
265 self.connection = None
266 self.value = None
267
268 def startElement(self, name, attrs, connection):
269 return None
270
271 def endElement(self, name, value, connection):
272 self.value = value
273
274 def __repr__(self):
275 return "NotificationARN:\"%s\"" % (self.value)
276
277
278 class StackResource(object):
279 def __init__(self, connection=None):
280 self.connection = connection
281 self.description = None
282 self.logical_resource_id = None
283 self.physical_resource_id = None
284 self.resource_status = None
285 self.resource_status_reason = None
286 self.resource_type = None
287 self.stack_id = None
288 self.stack_name = None
289 self.timestamp = None
290
291 def startElement(self, name, attrs, connection):
292 return None
293
294 def endElement(self, name, value, connection):
295 if name == "Description":
296 self.description = value
297 elif name == "LogicalResourceId":
298 self.logical_resource_id = value
299 elif name == "PhysicalResourceId":
300 self.physical_resource_id = value
301 elif name == "ResourceStatus":
302 self.resource_status = value
303 elif name == "ResourceStatusReason":
304 self.resource_status_reason = value
305 elif name == "ResourceType":
306 self.resource_type = value
307 elif name == "StackId":
308 self.stack_id = value
309 elif name == "StackName":
310 self.stack_name = value
311 elif name == "Timestamp":
312 try:
313 self.timestamp = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
314 except ValueError:
315 self.timestamp = datetime.strptime(value, '%Y-%m-%dT%H:%M:%S.%fZ')
316 else:
317 setattr(self, name, value)
318
319 def __repr__(self):
320 return "StackResource:%s (%s)" % (self.logical_resource_id,
321 self.resource_type)
322
323
324 class StackResourceSummary(object):
325 def __init__(self, connection=None):
326 self.connection = connection
327 self.last_updated_time = None
328 self.logical_resource_id = None
329 self.physical_resource_id = None
330 self.resource_status = None
331 self.resource_status_reason = None
332 self.resource_type = None
333
334 def startElement(self, name, attrs, connection):
335 return None
336
337 def endElement(self, name, value, connection):
338 if name == "LastUpdatedTime":
339 try:
340 self.last_updated_time = datetime.strptime(
341 value,
342 '%Y-%m-%dT%H:%M:%SZ'
343 )
344 except ValueError:
345 self.last_updated_time = datetime.strptime(
346 value,
347 '%Y-%m-%dT%H:%M:%S.%fZ'
348 )
349 elif name == "LogicalResourceId":
350 self.logical_resource_id = value
351 elif name == "PhysicalResourceId":
352 self.physical_resource_id = value
353 elif name == "ResourceStatus":
354 self.resource_status = value
355 elif name == "ResourceStatusReason":
356 self.resource_status_reason = value
357 elif name == "ResourceType":
358 self.resource_type = value
359 else:
360 setattr(self, name, value)
361
362 def __repr__(self):
363 return "StackResourceSummary:%s (%s)" % (self.logical_resource_id,
364 self.resource_type)
365
366
367 class StackEvent(object):
368 valid_states = ("CREATE_IN_PROGRESS", "CREATE_FAILED", "CREATE_COMPLETE",
369 "DELETE_IN_PROGRESS", "DELETE_FAILED", "DELETE_COMPLETE")
370 def __init__(self, connection=None):
371 self.connection = connection
372 self.event_id = None
373 self.logical_resource_id = None
374 self.physical_resource_id = None
375 self.resource_properties = None
376 self.resource_status = None
377 self.resource_status_reason = None
378 self.resource_type = None
379 self.stack_id = None
380 self.stack_name = None
381 self.timestamp = None
382
383 def startElement(self, name, attrs, connection):
384 return None
385
386 def endElement(self, name, value, connection):
387 if name == "EventId":
388 self.event_id = value
389 elif name == "LogicalResourceId":
390 self.logical_resource_id = value
391 elif name == "PhysicalResourceId":
392 self.physical_resource_id = value
393 elif name == "ResourceProperties":
394 self.resource_properties = value
395 elif name == "ResourceStatus":
396 self.resource_status = value
397 elif name == "ResourceStatusReason":
398 self.resource_status_reason = value
399 elif name == "ResourceType":
400 self.resource_type = value
401 elif name == "StackId":
402 self.stack_id = value
403 elif name == "StackName":
404 self.stack_name = value
405 elif name == "Timestamp":
406 try:
407 self.timestamp = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ')
408 except ValueError:
409 self.timestamp = datetime.strptime(value, '%Y-%m-%dT%H:%M:%S.%fZ')
410 else:
411 setattr(self, name, value)
412
413 def __repr__(self):
414 return "StackEvent %s %s %s" % (self.resource_type,
415 self.logical_resource_id, self.resource_status)