summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-09-25 22:25:50 +0000
committerGerrit Code Review <review@openstack.org>2014-09-25 22:25:50 +0000
commit830534149aea02a0435bf86565e91b4652032bcd (patch)
treefba787139f2c095e840e74a46e96b8ae9a56a3a7
parent04d8a2def2c8aecb9d9ca7f56f5d6c09db040a67 (diff)
parent3cebf6da901b93414224a75f10661081cbc11f12 (diff)
downloadheat-830534149aea02a0435bf86565e91b4652032bcd.tar.gz
Merge "Handle NotFoundException when deleting alarm" into stable/icehouse2014.1.3
-rw-r--r--heat/engine/resources/ceilometer/alarm.py12
-rw-r--r--heat/tests/test_ceilometer_alarm.py29
2 files changed, 39 insertions, 2 deletions
diff --git a/heat/engine/resources/ceilometer/alarm.py b/heat/engine/resources/ceilometer/alarm.py
index a0b92863e..1d288f6b8 100644
--- a/heat/engine/resources/ceilometer/alarm.py
+++ b/heat/engine/resources/ceilometer/alarm.py
@@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations
# under the License.
+from ceilometerclient import exc as ceilometerclient_exc
+
from heat.common import exception
from heat.engine import constraints
from heat.engine import properties
@@ -195,7 +197,10 @@ class CeilometerAlarm(resource.Resource):
pass
if self.resource_id is not None:
- self.ceilometer().alarms.delete(self.resource_id)
+ try:
+ self.ceilometer().alarms.delete(self.resource_id)
+ except ceilometerclient_exc.HTTPNotFound:
+ pass
class CombinationAlarm(resource.Resource):
@@ -260,7 +265,10 @@ class CombinationAlarm(resource.Resource):
alarm_id=self.resource_id, enabled=True)
def handle_delete(self):
- self.ceilometer().alarms.delete(self.resource_id)
+ try:
+ self.ceilometer().alarms.delete(self.resource_id)
+ except ceilometerclient_exc.HTTPNotFound:
+ pass
def resource_mapping():
diff --git a/heat/tests/test_ceilometer_alarm.py b/heat/tests/test_ceilometer_alarm.py
index 82271043a..3aac4c5c5 100644
--- a/heat/tests/test_ceilometer_alarm.py
+++ b/heat/tests/test_ceilometer_alarm.py
@@ -330,6 +330,23 @@ class CeilometerAlarmTest(HeatTestCase):
'MEMAlarmHigh', snippet['Resources']['MEMAlarmHigh'], stack)
self.assertIsNone(rsrc.validate())
+ def test_delete_alarm_not_found(self):
+ t = template_format.parse(alarm_template)
+
+ self.stack = self.create_stack(template=json.dumps(t))
+ self.m.StubOutWithMock(self.fa.alarms, 'delete')
+ self.fa.alarms.delete('foo').AndRaise(
+ alarm.ceilometerclient_exc.HTTPNotFound())
+
+ self.m.ReplayAll()
+ self.stack.create()
+ rsrc = self.stack['MEMAlarmHigh']
+
+ scheduler.TaskRunner(rsrc.delete)()
+ self.assertEqual((rsrc.DELETE, rsrc.COMPLETE), rsrc.state)
+
+ self.m.VerifyAll()
+
@testtools.skipIf(ceilometerclient is None, 'ceilometerclient unavailable')
class CombinationAlarmTest(HeatTestCase):
@@ -431,3 +448,15 @@ class CombinationAlarmTest(HeatTestCase):
self.assertEqual((rsrc.DELETE, rsrc.COMPLETE), rsrc.state)
self.m.VerifyAll()
+
+ def test_delete_not_found(self):
+ rsrc = self.create_alarm()
+ self.m.StubOutWithMock(self.fc.alarms, 'delete')
+ self.fc.alarms.delete('foo').AndRaise(
+ alarm.ceilometerclient_exc.HTTPNotFound())
+ self.m.ReplayAll()
+ scheduler.TaskRunner(rsrc.create)()
+ scheduler.TaskRunner(rsrc.delete)()
+ self.assertEqual((rsrc.DELETE, rsrc.COMPLETE), rsrc.state)
+
+ self.m.VerifyAll()