diff options
author | tengqm <tengqim@cn.ibm.com> | 2014-08-14 16:36:49 +0800 |
---|---|---|
committer | tengqm <tengqim@cn.ibm.com> | 2014-08-14 17:20:24 +0800 |
commit | 6e22014cadf0a2da5590b6005f84a045b6f41ddb (patch) | |
tree | 6b9868cc55adda6bc0f4cd1b53295d1725207433 /heat/scaling/cooldown.py | |
parent | 60e6eeb075ce22116e63dd6d99c322b143fe7c66 (diff) | |
download | heat-6e22014cadf0a2da5590b6005f84a045b6f41ddb.tar.gz |
Move CooldownMixin into separate file
CooldownMixin is a class that can be shared between OS and AWS
auto-scaling implementations. This patch moves it to a shared
subdirectory.
Implements: partial-blueprint reorg-asg-code
Change-Id: I40e470460e84944d317f5b1772fc562abf62896d
Diffstat (limited to 'heat/scaling/cooldown.py')
-rw-r--r-- | heat/scaling/cooldown.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/heat/scaling/cooldown.py b/heat/scaling/cooldown.py new file mode 100644 index 000000000..54e84ccc2 --- /dev/null +++ b/heat/scaling/cooldown.py @@ -0,0 +1,44 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from heat.openstack.common import timeutils + + +class CooldownMixin(object): + ''' + Utility class to encapsulate Cooldown related logic which is shared + between AutoScalingGroup and ScalingPolicy + ''' + def _cooldown_inprogress(self): + inprogress = False + try: + # Negative values don't make sense, so they are clamped to zero + cooldown = max(0, self.properties[self.COOLDOWN]) + except TypeError: + # If not specified, it will be None, same as cooldown == 0 + cooldown = 0 + + metadata = self.metadata_get() + if metadata and cooldown != 0: + last_adjust = metadata.keys()[0] + if not timeutils.is_older_than(last_adjust, cooldown): + inprogress = True + return inprogress + + def _cooldown_timestamp(self, reason): + # Save resource metadata with a timestamp and reason + # If we wanted to implement the AutoScaling API like AWS does, + # we could maintain event history here, but since we only need + # the latest event for cooldown, just store that for now + metadata = {timeutils.strtime(): reason} + self.metadata_set(metadata) |