Fix for validating firewall resource status
In case of firewall resource, Stack creation is not waiting for resource status and returning as stack COMPLETE status. Following fix validate for create complete. Change-Id: I71bd16b3a5c851e16ddc9cd963be73501cdced8d Closes-Bug: 1648059
This commit is contained in:
parent
b6e1be2f7a
commit
ae1ebcc760
|
@ -11,6 +11,7 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from heat.common import exception
|
||||
from heat.common.i18n import _
|
||||
from heat.engine import attributes
|
||||
from heat.engine import constraints
|
||||
|
@ -137,6 +138,22 @@ class Firewall(neutron.NeutronResource):
|
|||
def _show_resource(self):
|
||||
return self.client().show_firewall(self.resource_id)['firewall']
|
||||
|
||||
def check_create_complete(self, data):
|
||||
attributes = self._show_resource()
|
||||
status = attributes['status']
|
||||
if status == 'PENDING_CREATE':
|
||||
return False
|
||||
elif status == 'ACTIVE':
|
||||
return True
|
||||
elif status == 'ERROR':
|
||||
raise exception.ResourceInError(
|
||||
resource_status=status,
|
||||
status_reason=_('Error in Firewall'))
|
||||
else:
|
||||
raise exception.ResourceUnknownStatus(
|
||||
resource_status=status,
|
||||
result=_('Firewall creation failed'))
|
||||
|
||||
def handle_create(self):
|
||||
props = self.prepare_properties(
|
||||
self.properties,
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.v2_0 import client as neutronclient
|
||||
from oslo_config import cfg
|
||||
import six
|
||||
|
||||
from heat.common import exception
|
||||
|
@ -109,11 +110,31 @@ class FirewallTest(common.HeatTestCase):
|
|||
|
||||
def test_create(self):
|
||||
rsrc = self.create_firewall()
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ACTIVE'}})
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(rsrc.create)()
|
||||
self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_create_failed_error_status(self):
|
||||
cfg.CONF.set_override('action_retry_limit', 0, enforce_type=True)
|
||||
rsrc = self.create_firewall()
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'PENDING_CREATE'}})
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ERROR'}})
|
||||
self.m.ReplayAll()
|
||||
|
||||
error = self.assertRaises(exception.ResourceFailure,
|
||||
scheduler.TaskRunner(rsrc.create))
|
||||
self.assertEqual(
|
||||
'ResourceInError: resources.firewall: '
|
||||
'Went to status ERROR due to "Error in Firewall"',
|
||||
six.text_type(error))
|
||||
self.assertEqual((rsrc.CREATE, rsrc.FAILED), rsrc.state)
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_create_failed(self):
|
||||
neutronclient.Client.create_firewall({
|
||||
'firewall': {
|
||||
|
@ -139,11 +160,14 @@ class FirewallTest(common.HeatTestCase):
|
|||
self.m.VerifyAll()
|
||||
|
||||
def test_delete(self):
|
||||
rsrc = self.create_firewall()
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ACTIVE'}})
|
||||
|
||||
neutronclient.Client.delete_firewall('5678')
|
||||
neutronclient.Client.show_firewall('5678').AndRaise(
|
||||
exceptions.NeutronClientException(status_code=404))
|
||||
|
||||
rsrc = self.create_firewall()
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(rsrc.create)()
|
||||
scheduler.TaskRunner(rsrc.delete)()
|
||||
|
@ -155,6 +179,8 @@ class FirewallTest(common.HeatTestCase):
|
|||
exceptions.NeutronClientException(status_code=404))
|
||||
|
||||
rsrc = self.create_firewall()
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ACTIVE'}})
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(rsrc.create)()
|
||||
scheduler.TaskRunner(rsrc.delete)()
|
||||
|
@ -166,6 +192,8 @@ class FirewallTest(common.HeatTestCase):
|
|||
exceptions.NeutronClientException(status_code=400))
|
||||
|
||||
rsrc = self.create_firewall()
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ACTIVE'}})
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(rsrc.create)()
|
||||
error = self.assertRaises(exception.ResourceFailure,
|
||||
|
@ -179,6 +207,8 @@ class FirewallTest(common.HeatTestCase):
|
|||
|
||||
def test_attribute(self):
|
||||
rsrc = self.create_firewall()
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ACTIVE'}})
|
||||
neutronclient.Client.show_firewall('5678').MultipleTimes(
|
||||
).AndReturn(
|
||||
{'firewall': {'admin_state_up': True,
|
||||
|
@ -194,6 +224,8 @@ class FirewallTest(common.HeatTestCase):
|
|||
|
||||
def test_attribute_failed(self):
|
||||
rsrc = self.create_firewall()
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ACTIVE'}})
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(rsrc.create)()
|
||||
error = self.assertRaises(exception.InvalidTemplateAttribute,
|
||||
|
@ -205,6 +237,8 @@ class FirewallTest(common.HeatTestCase):
|
|||
|
||||
def test_update(self):
|
||||
rsrc = self.create_firewall()
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ACTIVE'}})
|
||||
neutronclient.Client.update_firewall(
|
||||
'5678', {'firewall': {'admin_state_up': False}})
|
||||
self.m.ReplayAll()
|
||||
|
@ -219,6 +253,8 @@ class FirewallTest(common.HeatTestCase):
|
|||
|
||||
def test_update_with_value_specs(self):
|
||||
rsrc = self.create_firewall(value_specs=False)
|
||||
neutronclient.Client.show_firewall('5678').AndReturn(
|
||||
{'firewall': {'status': 'ACTIVE'}})
|
||||
neutronclient.Client.update_firewall(
|
||||
'5678', {'firewall': {'router_ids': ['router_1',
|
||||
'router_2']}})
|
||||
|
|
Loading…
Reference in New Issue