OLD | NEW |
(Empty) | |
| 1 from datetime import datetime |
| 2 |
| 3 from boto.resultset import ResultSet |
| 4 |
| 5 class Stack: |
| 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 = [] |
| 12 self.outputs = [] |
| 13 self.parameters = [] |
| 14 self.stack_id = None |
| 15 self.stack_status = None |
| 16 self.stack_name = None |
| 17 self.stack_name_reason = None |
| 18 self.timeout_in_minutes = None |
| 19 |
| 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)]) |
| 26 return self.outputs |
| 27 else: |
| 28 return None |
| 29 |
| 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': |
| 40 self.stack_id = value |
| 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": |
| 50 pass |
| 51 else: |
| 52 setattr(self, name, value) |
| 53 |
| 54 def delete(self): |
| 55 return self.connection.delete_stack(stack_name_or_id=self.stack_id) |
| 56 |
| 57 def describe_events(self, next_token=None): |
| 58 return self.connection.describe_stack_events( |
| 59 stack_name_or_id=self.stack_id, |
| 60 next_token=next_token |
| 61 ) |
| 62 |
| 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 |
| 67 ) |
| 68 |
| 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 |
| 75 ) |
| 76 |
| 77 def list_resources(self, next_token=None): |
| 78 return self.connection.list_stack_resources( |
| 79 stack_name_or_id=self.stack_id, |
| 80 next_token=next_token |
| 81 ) |
| 82 |
| 83 def update(self): |
| 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__) |
| 87 else: |
| 88 raise ValueError("%s is not a valid Stack ID or Name" % |
| 89 self.stack_id) |
| 90 |
| 91 def get_template(self): |
| 92 return self.connection.get_template(stack_name_or_id=self.stack_id) |
| 93 |
| 94 class StackSummary: |
| 95 def __init__(self, connection=None): |
| 96 self.connection = connection |
| 97 self.stack_id = None |
| 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 |
| 103 |
| 104 def startElement(self, name, attrs, connection): |
| 105 return None |
| 106 |
| 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": |
| 121 pass |
| 122 else: |
| 123 setattr(self, name, value) |
| 124 |
| 125 class Parameter: |
| 126 def __init__(self, connection=None): |
| 127 self.connection = None |
| 128 self.key = None |
| 129 self.value = None |
| 130 |
| 131 def startElement(self, name, attrs, connection): |
| 132 return None |
| 133 |
| 134 def endElement(self, name, value, connection): |
| 135 if name == "ParameterKey": |
| 136 self.key = value |
| 137 elif name == "ParameterValue": |
| 138 self.value = value |
| 139 else: |
| 140 setattr(self, name, value) |
| 141 |
| 142 def __repr__(self): |
| 143 return "Parameter:\"%s\"=\"%s\"" % (self.key, self.value) |
| 144 |
| 145 class Output: |
| 146 def __init__(self, connection=None): |
| 147 self.connection = connection |
| 148 self.description = None |
| 149 self.key = None |
| 150 self.value = None |
| 151 |
| 152 def startElement(self, name, attrs, connection): |
| 153 return None |
| 154 |
| 155 def endElement(self, name, value, connection): |
| 156 if name == "Description": |
| 157 self.description = value |
| 158 elif name == "OutputKey": |
| 159 self.key = value |
| 160 elif name == "OutputValue": |
| 161 self.value = value |
| 162 else: |
| 163 setattr(self, name, value) |
| 164 |
| 165 def __repr__(self): |
| 166 return "Output:\"%s\"=\"%s\"" % (self.key, self.value) |
| 167 |
| 168 class StackResource: |
| 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 |
| 177 self.stack_id = None |
| 178 self.stack_name = None |
| 179 self.timestamp = None |
| 180 |
| 181 def startElement(self, name, attrs, connection): |
| 182 return None |
| 183 |
| 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') |
| 203 else: |
| 204 setattr(self, name, value) |
| 205 |
| 206 def __repr__(self): |
| 207 return "StackResource:%s (%s)" % (self.logical_resource_id, |
| 208 self.resource_type) |
| 209 |
| 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 |
| 219 |
| 220 def startElement(self, name, attrs, connection): |
| 221 return None |
| 222 |
| 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 |
| 237 else: |
| 238 setattr(self, name, value) |
| 239 |
| 240 def __repr__(self): |
| 241 return "StackResourceSummary:%s (%s)" % (self.logical_resource_id, |
| 242 self.resource_type) |
| 243 |
| 244 class StackEvent: |
| 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 |
| 249 self.event_id = None |
| 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 |
| 256 self.stack_id = None |
| 257 self.stack_name = None |
| 258 self.timestamp = None |
| 259 |
| 260 def startElement(self, name, attrs, connection): |
| 261 return None |
| 262 |
| 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') |
| 284 else: |
| 285 setattr(self, name, value) |
| 286 |
| 287 def __repr__(self): |
| 288 return "StackEvent %s %s %s" % (self.resource_type, |
| 289 self.logical_resource_id, self.resource_status) |
OLD | NEW |