Handle network names in Manila resources
Added network names resolving. Change-Id: I037deaf27caf2fbd2808b9e55fa91e83c4d17a83
This commit is contained in:
parent
4959f1879e
commit
3cbf64703e
|
@ -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],
|
||||||
|
|
|
@ -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())
|
||||||
|
|
Loading…
Reference in New Issue