summaryrefslogtreecommitdiff
path: root/heat/scaling/cooldown.py
diff options
context:
space:
mode:
authortengqm <tengqim@cn.ibm.com>2014-08-14 16:36:49 +0800
committertengqm <tengqim@cn.ibm.com>2014-08-14 17:20:24 +0800
commit6e22014cadf0a2da5590b6005f84a045b6f41ddb (patch)
tree6b9868cc55adda6bc0f4cd1b53295d1725207433 /heat/scaling/cooldown.py
parent60e6eeb075ce22116e63dd6d99c322b143fe7c66 (diff)
downloadheat-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.py44
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)