Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Unified Diff: boto/ec2/autoscale/group.py

Issue 8386013: Merging in latest boto. (Closed) Base URL: svn://svn.chromium.org/boto
Patch Set: Redoing vendor drop by deleting and then merging. Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « boto/ec2/autoscale/activity.py ('k') | boto/ec2/autoscale/instance.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: boto/ec2/autoscale/group.py
diff --git a/boto/ec2/autoscale/group.py b/boto/ec2/autoscale/group.py
index 3fa6d68f53cec63990e7939a40753e5b9a454001..eb658534cf92cdfece90cc7ccb9497364070ac3b 100644
--- a/boto/ec2/autoscale/group.py
+++ b/boto/ec2/autoscale/group.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2009 Reza Lotun http://reza.lotun.name/
+# Copyright (c) 2009-2011 Reza Lotun http://reza.lotun.name/
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
@@ -19,37 +19,75 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
-import weakref
from boto.ec2.elb.listelement import ListElement
from boto.resultset import ResultSet
-from boto.ec2.autoscale.trigger import Trigger
+from boto.ec2.autoscale.launchconfig import LaunchConfiguration
from boto.ec2.autoscale.request import Request
+from boto.ec2.autoscale.instance import Instance
-class Instance(object):
+
+class ProcessType(object):
def __init__(self, connection=None):
self.connection = connection
- self.instance_id = ''
+ self.process_name = None
def __repr__(self):
- return 'Instance:%s' % self.instance_id
+ return 'ProcessType(%s)' % self.process_name
def startElement(self, name, attrs, connection):
- return None
+ pass
def endElement(self, name, value, connection):
- if name == 'InstanceId':
- self.instance_id = value
- else:
- setattr(self, name, value)
+ if name == 'ProcessName':
+ self.process_name = value
+
+
+class SuspendedProcess(object):
+ def __init__(self, connection=None):
+ self.connection = connection
+ self.process_name = None
+ self.reason = None
+
+ def __repr__(self):
+ return 'SuspendedProcess(%s, %s)' % (self.process_name, self.reason)
+
+ def startElement(self, name, attrs, connection):
+ pass
+
+ def endElement(self, name, value, connection):
+ if name == 'ProcessName':
+ self.process_name = value
+ elif name == 'SuspensionReason':
+ self.reason = value
+
+
+class EnabledMetric(object):
+ def __init__(self, connection=None, metric=None, granularity=None):
+ self.connection = connection
+ self.metric = metric
+ self.granularity = granularity
+
+ def __repr__(self):
+ return 'EnabledMetric(%s, %s)' % (self.metric, self.granularity)
+
+ def startElement(self, name, attrs, connection):
+ pass
+
+ def endElement(self, name, value, connection):
+ if name == 'Granularity':
+ self.granularity = value
+ elif name == 'Metric':
+ self.metric = value
class AutoScalingGroup(object):
- def __init__(self, connection=None, group_name=None,
- availability_zone=None, launch_config=None,
- availability_zones=None,
- load_balancers=None, cooldown=0,
- min_size=None, max_size=None):
+ def __init__(self, connection=None, name=None,
+ launch_config=None, availability_zones=None,
+ load_balancers=None, default_cooldown=None,
+ health_check_type=None, health_check_period=None,
+ placement_group=None, vpc_zone_identifier=None, desired_capacity=None,
+ min_size=None, max_size=None, **kwargs):
"""
Creates a new AutoScalingGroup with the specified name.
@@ -59,57 +97,85 @@ class AutoScalingGroup(object):
used in other calls.
:type name: str
- :param name: Name of autoscaling group.
+ :param name: Name of autoscaling group (required).
+
+ :type availability_zones: list
+ :param availability_zones: List of availability zones (required).
+
+ :type default_cooldown: int
+ :param default_cooldown: Number of seconds after a Scaling Activity completes
+ before any further scaling activities can start.
- :type availability_zone: str
- :param availability_zone: An availability zone. DEPRECATED - use the
- availability_zones parameter, which expects
- a list of availability zone
- strings
+ :type desired_capacity: int
+ :param desired_capacity: The desired capacity for the group.
- :type availability_zone: list
- :param availability_zone: List of availability zones.
+ :type health_check_period: str
+ :param health_check_period: Length of time in seconds after a new EC2 instance
+ comes into service that Auto Scaling starts checking its
+ health.
+
+ :type health_check_type: str
+ :param health_check_type: The service you want the health status from,
+ Amazon EC2 or Elastic Load Balancer.
+
+ :type launch_config: str or LaunchConfiguration
+ :param launch_config: Name of launch configuration (required).
- :type launch_config: str
- :param launch_config: Name of launch configuration name.
:type load_balancers: list
:param load_balancers: List of load balancers.
- :type minsize: int
- :param minsize: Minimum size of group
+ :type max_size: int
+ :param maxsize: Maximum size of group (required).
+
+ :type min_size: int
+ :param minsize: Minimum size of group (required).
- :type maxsize: int
- :param maxsize: Maximum size of group
+ :type placement_group: str
+ :param placement_group: Physical location of your cluster placement
+ group created in Amazon EC2.
- :type cooldown: int
- :param cooldown: Amount of time after a Scaling Activity completes
- before any further scaling activities can start.
+ :type vpc_zone_identifier: str
+ :param vpc_zone_identifier: The subnet identifier of the Virtual Private Cloud.
- :rtype: tuple
- :return: Updated healthcheck for the instances.
+ :rtype: :class:`boto.ec2.autoscale.group.AutoScalingGroup`
+ :return: An autoscale group.
"""
- self.name = group_name
+ self.name = name or kwargs.get('group_name') # backwards compatibility
self.connection = connection
- self.min_size = min_size
- self.max_size = max_size
+ self.min_size = int(min_size) if min_size is not None else None
+ self.max_size = int(max_size) if max_size is not None else None
self.created_time = None
- self.cooldown = cooldown
- self.launch_config = launch_config
- if self.launch_config:
- self.launch_config_name = self.launch_config.name
- else:
- self.launch_config_name = None
- self.desired_capacity = None
+ default_cooldown = default_cooldown or kwargs.get('cooldown') # backwards compatibility
+ self.default_cooldown = int(default_cooldown) if default_cooldown is not None else None
+ self.launch_config_name = launch_config
+ if launch_config and isinstance(launch_config, LaunchConfiguration):
+ self.launch_config_name = launch_config.name
+ self.desired_capacity = desired_capacity
lbs = load_balancers or []
self.load_balancers = ListElement(lbs)
zones = availability_zones or []
- self.availability_zone = availability_zone
self.availability_zones = ListElement(zones)
+ self.health_check_period = health_check_period
+ self.health_check_type = health_check_type
+ self.placement_group = placement_group
+ self.autoscaling_group_arn = None
+ self.vpc_zone_identifier = vpc_zone_identifier
self.instances = None
+ # backwards compatible access to 'cooldown' param
+ def _get_cooldown(self):
+ return self.default_cooldown
+ def _set_cooldown(self, val):
+ self.default_cooldown = val
+ cooldown = property(_get_cooldown, _set_cooldown)
+
def __repr__(self):
- return 'AutoScalingGroup:%s' % self.name
+ return 'AutoScalingGroup<%s>: created:%s, minsize:%s, maxsize:%s, capacity:%s' % (self.name,
+ self.created_time,
+ self.min_size,
+ self.max_size,
+ self.desired_capacity)
def startElement(self, name, attrs, connection):
if name == 'Instances':
@@ -119,24 +185,40 @@ class AutoScalingGroup(object):
return self.load_balancers
elif name == 'AvailabilityZones':
return self.availability_zones
+ elif name == 'EnabledMetrics':
+ self.enabled_metrics = ResultSet([('member', EnabledMetric)])
+ return self.enabled_metrics
+ elif name == 'SuspendedProcesses':
+ self.suspended_processes = ResultSet([('member', SuspendedProcess)])
+ return self.suspended_processes
else:
return
def endElement(self, name, value, connection):
if name == 'MinSize':
- self.min_size = value
+ self.min_size = int(value)
+ elif name == 'AutoScalingGroupARN':
+ self.autoscaling_group_arn = value
elif name == 'CreatedTime':
self.created_time = value
- elif name == 'Cooldown':
- self.cooldown = value
+ elif name == 'DefaultCooldown':
+ self.default_cooldown = int(value)
elif name == 'LaunchConfigurationName':
self.launch_config_name = value
elif name == 'DesiredCapacity':
- self.desired_capacity = value
+ self.desired_capacity = int(value)
elif name == 'MaxSize':
- self.max_size = value
+ self.max_size = int(value)
elif name == 'AutoScalingGroupName':
self.name = value
+ elif name == 'PlacementGroup':
+ self.placement_group = value
+ elif name == 'HealthCheckGracePeriod':
+ self.health_check_period = int(value)
+ elif name == 'HealthCheckType':
+ self.health_check_type = value
+ elif name == 'VPCZoneIdentifier':
+ self.vpc_zone_identifier = value
else:
setattr(self, name, value)
@@ -161,29 +243,48 @@ class AutoScalingGroup(object):
"""
self.min_size = 0
self.max_size = 0
+ self.desired_capacity = 0
self.update()
- def get_all_triggers(self):
- """ Get all triggers for this auto scaling group. """
- params = {'AutoScalingGroupName' : self.name}
- triggers = self.connection.get_list('DescribeTriggers', params,
- [('member', Trigger)])
-
- # allow triggers to be able to access the autoscale group
- for tr in triggers:
- tr.autoscale_group = weakref.proxy(self)
-
- return triggers
-
- def delete(self):
- """ Delete this auto-scaling group. """
- params = {'AutoScalingGroupName' : self.name}
- return self.connection.get_object('DeleteAutoScalingGroup', params,
- Request)
+ def delete(self, force_delete=False):
+ """ Delete this auto-scaling group if no instances attached or no
+ scaling activities in progress.
+ """
+ return self.connection.delete_auto_scaling_group(self.name, force_delete)
- def get_activities(self, activity_ids=None, max_records=100):
+ def get_activities(self, activity_ids=None, max_records=50):
"""
Get all activies for this group.
"""
return self.connection.get_all_activities(self, activity_ids, max_records)
+ def suspend_processes(self, scaling_processes=None):
+ """ Suspends Auto Scaling processes for an Auto Scaling group. """
+ return self.connection.suspend_processes(self.name, scaling_processes)
+
+ def resume_processes(self, scaling_processes=None):
+ """ Resumes Auto Scaling processes for an Auto Scaling group. """
+ return self.connection.resume_processes(self.name, scaling_processes)
+
+
+class AutoScalingGroupMetric(object):
+ def __init__(self, connection=None):
+
+ self.connection = connection
+ self.metric = None
+ self.granularity = None
+
+ def __repr__(self):
+ return 'AutoScalingGroupMetric:%s' % self.metric
+
+ def startElement(self, name, attrs, connection):
+ return
+
+ def endElement(self, name, value, connection):
+ if name == 'Metric':
+ self.metric = value
+ elif name == 'Granularity':
+ self.granularity = value
+ else:
+ setattr(self, name, value)
+
« no previous file with comments | « boto/ec2/autoscale/activity.py ('k') | boto/ec2/autoscale/instance.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698