diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-09-25 22:25:50 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-09-25 22:25:50 +0000 |
commit | 830534149aea02a0435bf86565e91b4652032bcd (patch) | |
tree | fba787139f2c095e840e74a46e96b8ae9a56a3a7 | |
parent | 04d8a2def2c8aecb9d9ca7f56f5d6c09db040a67 (diff) | |
parent | 3cebf6da901b93414224a75f10661081cbc11f12 (diff) | |
download | heat-830534149aea02a0435bf86565e91b4652032bcd.tar.gz |
Merge "Handle NotFoundException when deleting alarm" into stable/icehouse2014.1.3
-rw-r--r-- | heat/engine/resources/ceilometer/alarm.py | 12 | ||||
-rw-r--r-- | heat/tests/test_ceilometer_alarm.py | 29 |
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() |