~ubuntu-branches/ubuntu/trusty/python-boto/trusty

« back to all changes in this revision

Viewing changes to boto/cloudformation/stack.py

  • Committer: Package Import Robot
  • Author(s): Eric Evans
  • Date: 2012-04-15 20:21:21 UTC
  • mfrom: (1.1.9)
  • Revision ID: package-import@ubuntu.com-20120415202121-3fpf6q355s0xqpyu
Tags: 2.3.0-1
* New upstream release (Closes: #664478)
* Update debian/watch for Boto's move to Github.  Thanks Scott
  Moser. (Closes: #650480)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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)