Handle network names in Manila resources

Added network names resolving.

Change-Id: I037deaf27caf2fbd2808b9e55fa91e83c4d17a83
This commit is contained in:
Dmitriy Uvarenkov 2016-03-03 20:05:44 +02:00
parent 4959f1879e
commit 3cbf64703e
2 changed files with 78 additions and 2 deletions

View File

@ -18,6 +18,7 @@ from heat.engine import constraints
from heat.engine import properties from heat.engine import properties
from heat.engine import resource from heat.engine import resource
from heat.engine import support from heat.engine import support
from heat.engine import translation
class ManilaShareNetwork(resource.Resource): class ManilaShareNetwork(resource.Resource):
@ -127,6 +128,39 @@ class ManilaShareNetwork(resource.Resource):
raise exception.ResourcePropertyConflict(self.NEUTRON_SUBNET, raise exception.ResourcePropertyConflict(self.NEUTRON_SUBNET,
self.NOVA_NETWORK) self.NOVA_NETWORK)
def translation_rules(self, props):
if self.is_using_neutron():
translation_rules = [
translation.TranslationRule(
props,
translation.TranslationRule.RESOLVE,
[self.NEUTRON_NETWORK],
client_plugin=self.client_plugin('neutron'),
finder='find_resourceid_by_name_or_id',
entity='network'
),
translation.TranslationRule(
props,
translation.TranslationRule.RESOLVE,
[self.NEUTRON_SUBNET],
client_plugin=self.client_plugin('neutron'),
finder='find_resourceid_by_name_or_id',
entity='subnet'
)
]
else:
translation_rules = [
translation.TranslationRule(
props,
translation.TranslationRule.RESOLVE,
[self.NOVA_NETWORK],
client_plugin=self.client_plugin('nova'),
finder='get_nova_network_id'
)
]
return translation_rules
def handle_create(self): def handle_create(self):
network = self.client().share_networks.create( network = self.client().share_networks.create(
name=self.properties[self.NAME], name=self.properties[self.NAME],

View File

@ -47,6 +47,11 @@ class DummyShareNetwork(object):
self.network_type = '6' self.network_type = '6'
class ShareNetworkWithNova(share_network.ManilaShareNetwork):
def is_using_neutron(self):
return False
class ManilaShareNetworkTest(common.HeatTestCase): class ManilaShareNetworkTest(common.HeatTestCase):
def setUp(self): def setUp(self):
@ -63,14 +68,32 @@ class ManilaShareNetworkTest(common.HeatTestCase):
self.patchobject(share_network.ManilaShareNetwork, 'client', self.patchobject(share_network.ManilaShareNetwork, 'client',
return_value=self.client) return_value=self.client)
self.client_plugin = mock.Mock() self.client_plugin = mock.Mock()
def resolve_neutron(resource_type, name):
return name
def resolve_nova(name):
return name
self.client_plugin.find_resourceid_by_name_or_id.side_effect = (
resolve_neutron
)
self.client_plugin.get_nova_network_id.side_effect = (
resolve_nova
)
self.patchobject(share_network.ManilaShareNetwork, 'client_plugin', self.patchobject(share_network.ManilaShareNetwork, 'client_plugin',
return_value=self.client_plugin) return_value=self.client_plugin)
self.stub_NetworkConstraint_validate() self.stub_NetworkConstraint_validate()
self.stub_NovaNetworkConstraint() self.stub_NovaNetworkConstraint()
self.stub_SubnetConstraint_validate() self.stub_SubnetConstraint_validate()
def _create_network(self, name, snippet, stack): def _create_network(self, name, snippet, stack, use_neutron=True):
net = share_network.ManilaShareNetwork(name, snippet, stack) if not use_neutron:
net = ShareNetworkWithNova(name, snippet, stack)
else:
net = share_network.ManilaShareNetwork(name, snippet, stack)
self.client.share_networks.create.return_value = DummyShareNetwork() self.client.share_networks.create.return_value = DummyShareNetwork()
self.client.share_networks.get.return_value = DummyShareNetwork() self.client.share_networks.get.return_value = DummyShareNetwork()
@ -99,6 +122,25 @@ class ManilaShareNetworkTest(common.HeatTestCase):
calls, any_order=True) calls, any_order=True)
self.assertEqual('share_networks', net.entity) self.assertEqual('share_networks', net.entity)
def test_create_with_nova(self):
t = template_format.parse(stack_template)
t['resources']['share_network']['properties']['nova_network'] = 'n'
del t['resources']['share_network']['properties']['neutron_network']
del t['resources']['share_network']['properties']['neutron_subnet']
stack = utils.parse_stack(t)
rsrc_defn = stack.t.resource_definitions(stack)['share_network']
net = self._create_network('share_network', rsrc_defn, stack,
use_neutron=False)
self.assertEqual((net.CREATE, net.COMPLETE), net.state)
self.assertEqual('42', net.resource_id)
net.client().share_networks.create.assert_called_with(
name='1', description='2', neutron_net_id=None,
neutron_subnet_id=None, nova_net_id='n')
calls = [mock.call('42', '6'), mock.call('42', '7')]
net.client().share_networks.add_security_service.assert_has_calls(
calls, any_order=True)
self.assertEqual('share_networks', net.entity)
def test_create_fail(self): def test_create_fail(self):
self.client.share_networks.add_security_service.side_effect = ( self.client.share_networks.add_security_service.side_effect = (
Exception()) Exception())