Add show_resource function to Nova resources (1)

AWS resources will not be changed due to they do not support additional
attributes. So 'show' attribute will be presented in their shemas, but
will return always None.

This patch adds entity attribute for heat (nova) resources:
 - keypair
 - floating ip
 - server group
 - flavor

Change-Id: Icaf0efb33707895d5407cdded552f95deeed6347
This commit is contained in:
Sergey Kraynev
2015-06-25 09:34:10 -04:00
parent 02275f8901
commit 909eedb2d3
8 changed files with 39 additions and 1 deletions

View File

@@ -49,6 +49,8 @@ class NovaFlavor(resource.Resource):
default_client_name = 'nova'
entity = 'flavors'
PROPERTIES = (
RAM, VCPUS, DISK, SWAP, EPHEMERAL,
RXTX_FACTOR, EXTRA_SPECS,

View File

@@ -58,6 +58,8 @@ class NovaFloatingIp(resource.Resource):
default_client_name = 'nova'
entity = 'floating_ips'
def __init__(self, name, json_snippet, stack):
super(NovaFloatingIp, self).__init__(name, json_snippet, stack)
self._floating_ip = None

View File

@@ -85,6 +85,8 @@ class KeyPair(resource.Resource):
default_client_name = 'nova'
entity = 'keypairs'
def __init__(self, name, json_snippet, stack):
super(KeyPair, self).__init__(name, json_snippet, stack)
self._public_key = None

View File

@@ -26,6 +26,8 @@ class ServerGroup(resource.Resource):
default_client_name = 'nova'
entity = 'server_groups'
PROPERTIES = (
NAME, POLICIES
) = (

View File

@@ -93,3 +93,14 @@ class NovaFlavorTest(common.HeatTestCase):
self.assertIsNone(self.my_flavor.handle_delete())
self.flavors.delete.side_effect = fakes.fake_exception()
self.assertIsNone(self.my_flavor.handle_delete())
def test_flavor_show_resourse(self):
self.my_flavor.resource_id = 'flavor_test_id'
self.my_flavor.client = mock.MagicMock()
flavors = mock.MagicMock()
flavor = mock.MagicMock()
flavor.to_dict.return_value = {'flavor': 'info'}
flavors.get.return_value = flavor
self.my_flavor.client().flavors = flavors
self.assertEqual({'flavor': 'info'}, self.my_flavor.FnGetAtt('show'))
flavors.get.assert_called_once_with('flavor_test_id')

View File

@@ -118,6 +118,10 @@ class NovaFloatingIPTest(common.HeatTestCase):
def test_floating_ip_create(self):
rsrc = self.prepare_floating_ip()
fip = mock.MagicMock()
fip.to_dict.return_value = {'fip': 'info'}
self.novaclient.floating_ips.get('1').AndReturn(fip)
self.m.ReplayAll()
rsrc.validate()
@@ -128,6 +132,8 @@ class NovaFloatingIPTest(common.HeatTestCase):
self.assertEqual('11.0.0.1', rsrc.FnGetAtt('ip'))
self.assertEqual('public', rsrc.FnGetAtt('pool'))
self.assertEqual({'fip': 'info'}, rsrc.FnGetAtt('show'))
self.m.VerifyAll()
def test_floating_ip_delete(self):

View File

@@ -84,12 +84,14 @@ class NovaKeyPairTest(common.HeatTestCase):
"""Test basic create."""
key_name = "generate_no_save"
tp_test, created_key = self._get_mock_kp_for_create(key_name)
self.fake_keypairs.get(key_name).AndReturn(created_key)
self.fake_keypairs.get(key_name).MultipleTimes().AndReturn(created_key)
created_key.to_dict().AndReturn({'key_pair': 'info'})
self.m.ReplayAll()
scheduler.TaskRunner(tp_test.create)()
self.assertEqual("", tp_test.FnGetAtt('private_key'))
self.assertEqual("generated test public key",
tp_test.FnGetAtt('public_key'))
self.assertEqual({'key_pair': 'info'}, tp_test.FnGetAtt('show'))
self.assertEqual((tp_test.CREATE, tp_test.COMPLETE), tp_test.state)
self.assertEqual(tp_test.resource_id, created_key.name)
self.m.VerifyAll()

View File

@@ -105,3 +105,14 @@ class NovaServerGroupTest(common.HeatTestCase):
self.sg_mgr.delete.assert_called_once_with('test')
self.assertEqual((self.sg.DELETE, self.sg.COMPLETE),
self.sg.state)
def test_sg_show_resourse(self):
self._create_sg('test')
self.sg.client = mock.MagicMock()
s_groups = mock.MagicMock()
sg = mock.MagicMock()
sg.to_dict.return_value = {'server_gr': 'info'}
s_groups.get.return_value = sg
self.sg.client().server_groups = s_groups
self.assertEqual({'server_gr': 'info'}, self.sg.FnGetAtt('show'))
s_groups.get.assert_called_once_with('test')