Mercurial > repos > bcclaywell > argo_navis
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) |
