Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/boto/ec2/autoscale/group.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
author | shellac |
---|---|
date | Sat, 02 May 2020 07:14:21 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:26e78fe6e8c4 |
---|---|
1 # Copyright (c) 2009-2011 Reza Lotun http://reza.lotun.name/ | |
2 # | |
3 # Permission is hereby granted, free of charge, to any person obtaining a | |
4 # copy of this software and associated documentation files (the | |
5 # "Software"), to deal in the Software without restriction, including | |
6 # without limitation the rights to use, copy, modify, merge, publish, dis- | |
7 # tribute, sublicense, and/or sell copies of the Software, and to permit | |
8 # persons to whom the Software is furnished to do so, subject to the fol- | |
9 # lowing conditions: | |
10 # | |
11 # The above copyright notice and this permission notice shall be included | |
12 # in all copies or substantial portions of the Software. | |
13 # | |
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | |
16 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | |
17 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
18 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
20 # IN THE SOFTWARE. | |
21 | |
22 from boto.ec2.elb.listelement import ListElement | |
23 from boto.resultset import ResultSet | |
24 from boto.ec2.autoscale.launchconfig import LaunchConfiguration | |
25 from boto.ec2.autoscale.request import Request | |
26 from boto.ec2.autoscale.instance import Instance | |
27 from boto.ec2.autoscale.tag import Tag | |
28 | |
29 | |
30 class ProcessType(object): | |
31 def __init__(self, connection=None): | |
32 self.connection = connection | |
33 self.process_name = None | |
34 | |
35 def __repr__(self): | |
36 return 'ProcessType(%s)' % self.process_name | |
37 | |
38 def startElement(self, name, attrs, connection): | |
39 pass | |
40 | |
41 def endElement(self, name, value, connection): | |
42 if name == 'ProcessName': | |
43 self.process_name = value | |
44 | |
45 | |
46 class SuspendedProcess(object): | |
47 def __init__(self, connection=None): | |
48 self.connection = connection | |
49 self.process_name = None | |
50 self.reason = None | |
51 | |
52 def __repr__(self): | |
53 return 'SuspendedProcess(%s, %s)' % (self.process_name, self.reason) | |
54 | |
55 def startElement(self, name, attrs, connection): | |
56 pass | |
57 | |
58 def endElement(self, name, value, connection): | |
59 if name == 'ProcessName': | |
60 self.process_name = value | |
61 elif name == 'SuspensionReason': | |
62 self.reason = value | |
63 | |
64 | |
65 class EnabledMetric(object): | |
66 def __init__(self, connection=None, metric=None, granularity=None): | |
67 self.connection = connection | |
68 self.metric = metric | |
69 self.granularity = granularity | |
70 | |
71 def __repr__(self): | |
72 return 'EnabledMetric(%s, %s)' % (self.metric, self.granularity) | |
73 | |
74 def startElement(self, name, attrs, connection): | |
75 pass | |
76 | |
77 def endElement(self, name, value, connection): | |
78 if name == 'Granularity': | |
79 self.granularity = value | |
80 elif name == 'Metric': | |
81 self.metric = value | |
82 | |
83 | |
84 class TerminationPolicies(list): | |
85 | |
86 def startElement(self, name, attrs, connection): | |
87 pass | |
88 | |
89 def endElement(self, name, value, connection): | |
90 if name == 'member': | |
91 self.append(value) | |
92 | |
93 | |
94 class AutoScalingGroup(object): | |
95 def __init__(self, connection=None, name=None, | |
96 launch_config=None, availability_zones=None, | |
97 load_balancers=None, default_cooldown=None, | |
98 health_check_type=None, health_check_period=None, | |
99 placement_group=None, vpc_zone_identifier=None, | |
100 desired_capacity=None, min_size=None, max_size=None, | |
101 tags=None, termination_policies=None, instance_id=None, | |
102 **kwargs): | |
103 """ | |
104 Creates a new AutoScalingGroup with the specified name. | |
105 | |
106 You must not have already used up your entire quota of | |
107 AutoScalingGroups in order for this call to be successful. Once the | |
108 creation request is completed, the AutoScalingGroup is ready to be | |
109 used in other calls. | |
110 | |
111 :type name: str | |
112 :param name: Name of autoscaling group (required). | |
113 | |
114 :type availability_zones: list | |
115 :param availability_zones: List of availability zones (required). | |
116 | |
117 :type default_cooldown: int | |
118 :param default_cooldown: Number of seconds after a Scaling Activity | |
119 completes before any further scaling activities can start. | |
120 | |
121 :type desired_capacity: int | |
122 :param desired_capacity: The desired capacity for the group. | |
123 | |
124 :type health_check_period: str | |
125 :param health_check_period: Length of time in seconds after a new | |
126 EC2 instance comes into service that Auto Scaling starts | |
127 checking its health. | |
128 | |
129 :type health_check_type: str | |
130 :param health_check_type: The service you want the health status from, | |
131 Amazon EC2 or Elastic Load Balancer. | |
132 | |
133 :type launch_config: str or LaunchConfiguration | |
134 :param launch_config: Name of launch configuration (required). | |
135 | |
136 :type load_balancers: list | |
137 :param load_balancers: List of load balancers. | |
138 | |
139 :type max_size: int | |
140 :param max_size: Maximum size of group (required). | |
141 | |
142 :type min_size: int | |
143 :param min_size: Minimum size of group (required). | |
144 | |
145 :type placement_group: str | |
146 :param placement_group: Physical location of your cluster placement | |
147 group created in Amazon EC2. | |
148 | |
149 :type vpc_zone_identifier: str or list | |
150 :param vpc_zone_identifier: A comma-separated string or python list of | |
151 the subnet identifiers of the Virtual Private Cloud. | |
152 | |
153 :type tags: list | |
154 :param tags: List of :class:`boto.ec2.autoscale.tag.Tag`s | |
155 | |
156 :type termination_policies: list | |
157 :param termination_policies: A list of termination policies. Valid values | |
158 are: "OldestInstance", "NewestInstance", "OldestLaunchConfiguration", | |
159 "ClosestToNextInstanceHour", "Default". If no value is specified, | |
160 the "Default" value is used. | |
161 | |
162 :type instance_id: str | |
163 :param instance_id: The ID of the Amazon EC2 instance you want to use | |
164 to create the Auto Scaling group. | |
165 | |
166 :rtype: :class:`boto.ec2.autoscale.group.AutoScalingGroup` | |
167 :return: An autoscale group. | |
168 """ | |
169 self.name = name or kwargs.get('group_name') # backwards compat | |
170 self.connection = connection | |
171 self.min_size = int(min_size) if min_size is not None else None | |
172 self.max_size = int(max_size) if max_size is not None else None | |
173 self.created_time = None | |
174 # backwards compatibility | |
175 default_cooldown = default_cooldown or kwargs.get('cooldown') | |
176 if default_cooldown is not None: | |
177 default_cooldown = int(default_cooldown) | |
178 self.default_cooldown = default_cooldown | |
179 self.launch_config_name = launch_config | |
180 if launch_config and isinstance(launch_config, LaunchConfiguration): | |
181 self.launch_config_name = launch_config.name | |
182 self.desired_capacity = desired_capacity | |
183 lbs = load_balancers or [] | |
184 self.load_balancers = ListElement(lbs) | |
185 zones = availability_zones or [] | |
186 self.availability_zones = ListElement(zones) | |
187 self.health_check_period = health_check_period | |
188 self.health_check_type = health_check_type | |
189 self.placement_group = placement_group | |
190 self.autoscaling_group_arn = None | |
191 if type(vpc_zone_identifier) is list: | |
192 vpc_zone_identifier = ','.join(vpc_zone_identifier) | |
193 self.vpc_zone_identifier = vpc_zone_identifier | |
194 self.instances = None | |
195 self.tags = tags or None | |
196 termination_policies = termination_policies or [] | |
197 self.termination_policies = ListElement(termination_policies) | |
198 self.instance_id = instance_id | |
199 | |
200 # backwards compatible access to 'cooldown' param | |
201 def _get_cooldown(self): | |
202 return self.default_cooldown | |
203 | |
204 def _set_cooldown(self, val): | |
205 self.default_cooldown = val | |
206 | |
207 cooldown = property(_get_cooldown, _set_cooldown) | |
208 | |
209 def __repr__(self): | |
210 return 'AutoScaleGroup<%s>' % self.name | |
211 | |
212 def startElement(self, name, attrs, connection): | |
213 if name == 'Instances': | |
214 self.instances = ResultSet([('member', Instance)]) | |
215 return self.instances | |
216 elif name == 'LoadBalancerNames': | |
217 return self.load_balancers | |
218 elif name == 'AvailabilityZones': | |
219 return self.availability_zones | |
220 elif name == 'EnabledMetrics': | |
221 self.enabled_metrics = ResultSet([('member', EnabledMetric)]) | |
222 return self.enabled_metrics | |
223 elif name == 'SuspendedProcesses': | |
224 self.suspended_processes = ResultSet([('member', SuspendedProcess)]) | |
225 return self.suspended_processes | |
226 elif name == 'Tags': | |
227 self.tags = ResultSet([('member', Tag)]) | |
228 return self.tags | |
229 elif name == 'TerminationPolicies': | |
230 return self.termination_policies | |
231 else: | |
232 return | |
233 | |
234 def endElement(self, name, value, connection): | |
235 if name == 'MinSize': | |
236 self.min_size = int(value) | |
237 elif name == 'AutoScalingGroupARN': | |
238 self.autoscaling_group_arn = value | |
239 elif name == 'CreatedTime': | |
240 self.created_time = value | |
241 elif name == 'DefaultCooldown': | |
242 self.default_cooldown = int(value) | |
243 elif name == 'LaunchConfigurationName': | |
244 self.launch_config_name = value | |
245 elif name == 'DesiredCapacity': | |
246 self.desired_capacity = int(value) | |
247 elif name == 'MaxSize': | |
248 self.max_size = int(value) | |
249 elif name == 'AutoScalingGroupName': | |
250 self.name = value | |
251 elif name == 'PlacementGroup': | |
252 self.placement_group = value | |
253 elif name == 'HealthCheckGracePeriod': | |
254 try: | |
255 self.health_check_period = int(value) | |
256 except ValueError: | |
257 self.health_check_period = None | |
258 elif name == 'HealthCheckType': | |
259 self.health_check_type = value | |
260 elif name == 'VPCZoneIdentifier': | |
261 self.vpc_zone_identifier = value | |
262 elif name == 'InstanceId': | |
263 self.instance_id = value | |
264 else: | |
265 setattr(self, name, value) | |
266 | |
267 def set_capacity(self, capacity): | |
268 """ | |
269 Set the desired capacity for the group. | |
270 """ | |
271 params = {'AutoScalingGroupName': self.name, | |
272 'DesiredCapacity': capacity} | |
273 req = self.connection.get_object('SetDesiredCapacity', params, | |
274 Request) | |
275 self.connection.last_request = req | |
276 return req | |
277 | |
278 def update(self): | |
279 """ | |
280 Sync local changes with AutoScaling group. | |
281 """ | |
282 return self.connection._update_group('UpdateAutoScalingGroup', self) | |
283 | |
284 def shutdown_instances(self): | |
285 """ | |
286 Convenience method which shuts down all instances associated with | |
287 this group. | |
288 """ | |
289 self.min_size = 0 | |
290 self.max_size = 0 | |
291 self.desired_capacity = 0 | |
292 self.update() | |
293 | |
294 def delete(self, force_delete=False): | |
295 """ | |
296 Delete this auto-scaling group if no instances attached or no | |
297 scaling activities in progress. | |
298 """ | |
299 return self.connection.delete_auto_scaling_group(self.name, | |
300 force_delete) | |
301 | |
302 def get_activities(self, activity_ids=None, max_records=50): | |
303 """ | |
304 Get all activies for this group. | |
305 """ | |
306 return self.connection.get_all_activities(self, activity_ids, | |
307 max_records) | |
308 | |
309 def put_notification_configuration(self, topic, notification_types): | |
310 """ | |
311 Configures an Auto Scaling group to send notifications when | |
312 specified events take place. Valid notification types are: | |
313 'autoscaling:EC2_INSTANCE_LAUNCH', | |
314 'autoscaling:EC2_INSTANCE_LAUNCH_ERROR', | |
315 'autoscaling:EC2_INSTANCE_TERMINATE', | |
316 'autoscaling:EC2_INSTANCE_TERMINATE_ERROR', | |
317 'autoscaling:TEST_NOTIFICATION' | |
318 """ | |
319 return self.connection.put_notification_configuration(self, | |
320 topic, | |
321 notification_types) | |
322 | |
323 def delete_notification_configuration(self, topic): | |
324 """ | |
325 Deletes notifications created by put_notification_configuration. | |
326 """ | |
327 return self.connection.delete_notification_configuration(self, topic) | |
328 | |
329 def suspend_processes(self, scaling_processes=None): | |
330 """ | |
331 Suspends Auto Scaling processes for an Auto Scaling group. | |
332 """ | |
333 return self.connection.suspend_processes(self.name, scaling_processes) | |
334 | |
335 def resume_processes(self, scaling_processes=None): | |
336 """ | |
337 Resumes Auto Scaling processes for an Auto Scaling group. | |
338 """ | |
339 return self.connection.resume_processes(self.name, scaling_processes) | |
340 | |
341 | |
342 class AutoScalingGroupMetric(object): | |
343 def __init__(self, connection=None): | |
344 | |
345 self.connection = connection | |
346 self.metric = None | |
347 self.granularity = None | |
348 | |
349 def __repr__(self): | |
350 return 'AutoScalingGroupMetric:%s' % self.metric | |
351 | |
352 def startElement(self, name, attrs, connection): | |
353 return | |
354 | |
355 def endElement(self, name, value, connection): | |
356 if name == 'Metric': | |
357 self.metric = value | |
358 elif name == 'Granularity': | |
359 self.granularity = value | |
360 else: | |
361 setattr(self, name, value) |