OLD | NEW |
(Empty) | |
| 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 self.creation_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ') |
| 45 elif name == "Description": |
| 46 self.description = value |
| 47 elif name == "DisableRollback": |
| 48 self.disable_rollback = bool(value) |
| 49 elif name == 'StackId': |
| 50 self.stack_id = value |
| 51 elif name == 'StackName': |
| 52 self.stack_name = value |
| 53 elif name == 'StackStatus': |
| 54 self.stack_status = value |
| 55 elif name == "StackStatusReason": |
| 56 self.stack_status_reason = value |
| 57 elif name == "TimeoutInMinutes": |
| 58 self.timeout_in_minutes = int(value) |
| 59 elif name == "member": |
| 60 pass |
| 61 else: |
| 62 setattr(self, name, value) |
| 63 |
| 64 def delete(self): |
| 65 return self.connection.delete_stack(stack_name_or_id=self.stack_id) |
| 66 |
| 67 def describe_events(self, next_token=None): |
| 68 return self.connection.describe_stack_events( |
| 69 stack_name_or_id=self.stack_id, |
| 70 next_token=next_token |
| 71 ) |
| 72 |
| 73 def describe_resource(self, logical_resource_id): |
| 74 return self.connection.describe_stack_resource( |
| 75 stack_name_or_id=self.stack_id, |
| 76 logical_resource_id=logical_resource_id |
| 77 ) |
| 78 |
| 79 def describe_resources(self, logical_resource_id=None, |
| 80 physical_resource_id=None): |
| 81 return self.connection.describe_stack_resources( |
| 82 stack_name_or_id=self.stack_id, |
| 83 logical_resource_id=logical_resource_id, |
| 84 physical_resource_id=physical_resource_id |
| 85 ) |
| 86 |
| 87 def list_resources(self, next_token=None): |
| 88 return self.connection.list_stack_resources( |
| 89 stack_name_or_id=self.stack_id, |
| 90 next_token=next_token |
| 91 ) |
| 92 |
| 93 def update(self): |
| 94 rs = self.connection.describe_stacks(self.stack_id) |
| 95 if len(rs) == 1 and rs[0].stack_id == self.stack_id: |
| 96 self.__dict__.update(rs[0].__dict__) |
| 97 else: |
| 98 raise ValueError("%s is not a valid Stack ID or Name" % |
| 99 self.stack_id) |
| 100 |
| 101 def get_template(self): |
| 102 return self.connection.get_template(stack_name_or_id=self.stack_id) |
| 103 |
| 104 |
| 105 class StackSummary(object): |
| 106 def __init__(self, connection=None): |
| 107 self.connection = connection |
| 108 self.stack_id = None |
| 109 self.stack_status = None |
| 110 self.stack_name = None |
| 111 self.creation_time = None |
| 112 self.deletion_time = None |
| 113 self.template_description = None |
| 114 |
| 115 def startElement(self, name, attrs, connection): |
| 116 return None |
| 117 |
| 118 def endElement(self, name, value, connection): |
| 119 if name == 'StackId': |
| 120 self.stack_id = value |
| 121 elif name == 'StackStatus': |
| 122 self.stack_status = value |
| 123 elif name == 'StackName': |
| 124 self.stack_name = value |
| 125 elif name == 'CreationTime': |
| 126 self.creation_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ') |
| 127 elif name == "DeletionTime": |
| 128 self.deletion_time = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ') |
| 129 elif name == 'TemplateDescription': |
| 130 self.template_description = value |
| 131 elif name == "member": |
| 132 pass |
| 133 else: |
| 134 setattr(self, name, value) |
| 135 |
| 136 |
| 137 class Parameter(object): |
| 138 def __init__(self, connection=None): |
| 139 self.connection = None |
| 140 self.key = None |
| 141 self.value = None |
| 142 |
| 143 def startElement(self, name, attrs, connection): |
| 144 return None |
| 145 |
| 146 def endElement(self, name, value, connection): |
| 147 if name == "ParameterKey": |
| 148 self.key = value |
| 149 elif name == "ParameterValue": |
| 150 self.value = value |
| 151 else: |
| 152 setattr(self, name, value) |
| 153 |
| 154 def __repr__(self): |
| 155 return "Parameter:\"%s\"=\"%s\"" % (self.key, self.value) |
| 156 |
| 157 |
| 158 class Output(object): |
| 159 def __init__(self, connection=None): |
| 160 self.connection = connection |
| 161 self.description = None |
| 162 self.key = None |
| 163 self.value = None |
| 164 |
| 165 def startElement(self, name, attrs, connection): |
| 166 return None |
| 167 |
| 168 def endElement(self, name, value, connection): |
| 169 if name == "Description": |
| 170 self.description = value |
| 171 elif name == "OutputKey": |
| 172 self.key = value |
| 173 elif name == "OutputValue": |
| 174 self.value = value |
| 175 else: |
| 176 setattr(self, name, value) |
| 177 |
| 178 def __repr__(self): |
| 179 return "Output:\"%s\"=\"%s\"" % (self.key, self.value) |
| 180 |
| 181 |
| 182 class Capability(object): |
| 183 def __init__(self, connection=None): |
| 184 self.connection = None |
| 185 self.value = None |
| 186 |
| 187 def startElement(self, name, attrs, connection): |
| 188 return None |
| 189 |
| 190 def endElement(self, name, value, connection): |
| 191 self.value = value |
| 192 |
| 193 def __repr__(self): |
| 194 return "Capability:\"%s\"" % (self.value) |
| 195 |
| 196 |
| 197 class Tag(dict): |
| 198 |
| 199 def __init__(self, connection=None): |
| 200 dict.__init__(self) |
| 201 self.connection = connection |
| 202 self._current_key = None |
| 203 |
| 204 def startElement(self, name, attrs, connection): |
| 205 return None |
| 206 |
| 207 def endElement(self, name, value, connection): |
| 208 if name == "Key": |
| 209 self._current_key = value |
| 210 elif name == "Value": |
| 211 self[self._current_key] = value |
| 212 else: |
| 213 setattr(self, name, value) |
| 214 |
| 215 |
| 216 class NotificationARN(object): |
| 217 def __init__(self, connection=None): |
| 218 self.connection = None |
| 219 self.value = None |
| 220 |
| 221 def startElement(self, name, attrs, connection): |
| 222 return None |
| 223 |
| 224 def endElement(self, name, value, connection): |
| 225 self.value = value |
| 226 |
| 227 def __repr__(self): |
| 228 return "NotificationARN:\"%s\"" % (self.value) |
| 229 |
| 230 |
| 231 class StackResource(object): |
| 232 def __init__(self, connection=None): |
| 233 self.connection = connection |
| 234 self.description = None |
| 235 self.logical_resource_id = None |
| 236 self.physical_resource_id = None |
| 237 self.resource_status = None |
| 238 self.resource_status_reason = None |
| 239 self.resource_type = None |
| 240 self.stack_id = None |
| 241 self.stack_name = None |
| 242 self.timestamp = None |
| 243 |
| 244 def startElement(self, name, attrs, connection): |
| 245 return None |
| 246 |
| 247 def endElement(self, name, value, connection): |
| 248 if name == "Description": |
| 249 self.description = value |
| 250 elif name == "LogicalResourceId": |
| 251 self.logical_resource_id = value |
| 252 elif name == "PhysicalResourceId": |
| 253 self.physical_resource_id = value |
| 254 elif name == "ResourceStatus": |
| 255 self.resource_status = value |
| 256 elif name == "ResourceStatusReason": |
| 257 self.resource_status_reason = value |
| 258 elif name == "ResourceType": |
| 259 self.resource_type = value |
| 260 elif name == "StackId": |
| 261 self.stack_id = value |
| 262 elif name == "StackName": |
| 263 self.stack_name = value |
| 264 elif name == "Timestamp": |
| 265 self.timestamp = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ') |
| 266 else: |
| 267 setattr(self, name, value) |
| 268 |
| 269 def __repr__(self): |
| 270 return "StackResource:%s (%s)" % (self.logical_resource_id, |
| 271 self.resource_type) |
| 272 |
| 273 |
| 274 class StackResourceSummary(object): |
| 275 def __init__(self, connection=None): |
| 276 self.connection = connection |
| 277 self.last_updated_timestamp = None |
| 278 self.logical_resource_id = None |
| 279 self.physical_resource_id = None |
| 280 self.resource_status = None |
| 281 self.resource_status_reason = None |
| 282 self.resource_type = None |
| 283 |
| 284 def startElement(self, name, attrs, connection): |
| 285 return None |
| 286 |
| 287 def endElement(self, name, value, connection): |
| 288 if name == "LastUpdatedTimestamp": |
| 289 self.last_updated_timestamp = datetime.strptime(value, |
| 290 '%Y-%m-%dT%H:%M:%SZ') |
| 291 elif name == "LogicalResourceId": |
| 292 self.logical_resource_id = value |
| 293 elif name == "PhysicalResourceId": |
| 294 self.physical_resource_id = value |
| 295 elif name == "ResourceStatus": |
| 296 self.resource_status = value |
| 297 elif name == "ResourceStatusReason": |
| 298 self.resource_status_reason = value |
| 299 elif name == "ResourceType": |
| 300 self.resource_type = value |
| 301 else: |
| 302 setattr(self, name, value) |
| 303 |
| 304 def __repr__(self): |
| 305 return "StackResourceSummary:%s (%s)" % (self.logical_resource_id, |
| 306 self.resource_type) |
| 307 |
| 308 |
| 309 class StackEvent(object): |
| 310 valid_states = ("CREATE_IN_PROGRESS", "CREATE_FAILED", "CREATE_COMPLETE", |
| 311 "DELETE_IN_PROGRESS", "DELETE_FAILED", "DELETE_COMPLETE") |
| 312 def __init__(self, connection=None): |
| 313 self.connection = connection |
| 314 self.event_id = None |
| 315 self.logical_resource_id = None |
| 316 self.physical_resource_id = None |
| 317 self.resource_properties = None |
| 318 self.resource_status = None |
| 319 self.resource_status_reason = None |
| 320 self.resource_type = None |
| 321 self.stack_id = None |
| 322 self.stack_name = None |
| 323 self.timestamp = None |
| 324 |
| 325 def startElement(self, name, attrs, connection): |
| 326 return None |
| 327 |
| 328 def endElement(self, name, value, connection): |
| 329 if name == "EventId": |
| 330 self.event_id = value |
| 331 elif name == "LogicalResourceId": |
| 332 self.logical_resource_id = value |
| 333 elif name == "PhysicalResourceId": |
| 334 self.physical_resource_id = value |
| 335 elif name == "ResourceProperties": |
| 336 self.resource_properties = value |
| 337 elif name == "ResourceStatus": |
| 338 self.resource_status = value |
| 339 elif name == "ResourceStatusReason": |
| 340 self.resource_status_reason = value |
| 341 elif name == "ResourceType": |
| 342 self.resource_type = value |
| 343 elif name == "StackId": |
| 344 self.stack_id = value |
| 345 elif name == "StackName": |
| 346 self.stack_name = value |
| 347 elif name == "Timestamp": |
| 348 self.timestamp = datetime.strptime(value, '%Y-%m-%dT%H:%M:%SZ') |
| 349 else: |
| 350 setattr(self, name, value) |
| 351 |
| 352 def __repr__(self): |
| 353 return "StackEvent %s %s %s" % (self.resource_type, |
| 354 self.logical_resource_id, self.resource_status) |
OLD | NEW |