From 9cf5a38a6e48a5c97dc552fcdd00c26b05bb2842 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bartosz=20G=C3=B3rski?= Date: Wed, 14 Aug 2013 03:52:37 -0700 Subject: [PATCH] Allowing to pass network name to router gateway This patch allows to pass newtork name instead of network id to create router gateway. It is really useful feature because often router has gateway as public network. It is easy to pass the name because id will change after deleting the network and creating it again. Change-Id: I5768408b86b509ecfd117f17b10db06af82369d8 --- heat/engine/resources/neutron/router.py | 6 +++++- heat/tests/test_neutron.py | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/heat/engine/resources/neutron/router.py b/heat/engine/resources/neutron/router.py index 793b212e..243c1718 100644 --- a/heat/engine/resources/neutron/router.py +++ b/heat/engine/resources/neutron/router.py @@ -19,6 +19,7 @@ from heat.engine import scheduler if clients.neutronclient is not None: from neutronclient.common.exceptions import NeutronClientException + from neutronclient.neutron import v2_0 as neutronV20 from heat.openstack.common import log as logging @@ -117,7 +118,10 @@ class RouterGateway(neutron.NeutronResource): def handle_create(self): router_id = self.properties.get('router_id') - network_id = self.properties.get('network_id') + network_id = neutronV20.find_resourceid_by_name_or_id( + self.neutron(), + 'network', + self.properties.get('network_id')) self.neutron().add_gateway_router( router_id, {'network_id': network_id}) diff --git a/heat/tests/test_neutron.py b/heat/tests/test_neutron.py index 59500d75..dff9d5ba 100644 --- a/heat/tests/test_neutron.py +++ b/heat/tests/test_neutron.py @@ -12,6 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. +import mox from testtools import skipIf @@ -524,6 +525,7 @@ class NeutronSubnetTest(HeatTestCase): @skipIf(neutronclient is None, 'neutronclient unavailable') class NeutronRouterTest(HeatTestCase): + @skipIf(router.neutronV20 is None, "Missing Neutron v2_0") def setUp(self): super(NeutronRouterTest, self).setUp() self.m.StubOutWithMock(neutronclient.Client, 'create_router') @@ -533,6 +535,8 @@ class NeutronRouterTest(HeatTestCase): self.m.StubOutWithMock(neutronclient.Client, 'remove_interface_router') self.m.StubOutWithMock(neutronclient.Client, 'add_gateway_router') self.m.StubOutWithMock(neutronclient.Client, 'remove_gateway_router') + self.m.StubOutWithMock(router.neutronV20, + 'find_resourceid_by_name_or_id') self.m.StubOutWithMock(clients.OpenStackClients, 'keystone') utils.setup_dummy_db() @@ -702,6 +706,11 @@ class NeutronRouterTest(HeatTestCase): def test_gateway_router(self): clients.OpenStackClients.keystone().AndReturn( fakes.FakeKeystoneClient()) + router.neutronV20.find_resourceid_by_name_or_id( + mox.IsA(neutronclient.Client), + 'network', + 'fc68ea2c-b60b-4b4f-bd82-94ec81110766' + ).AndReturn('fc68ea2c-b60b-4b4f-bd82-94ec81110766') neutronclient.Client.add_gateway_router( '3e46229d-8fce-4733-819a-b5fe630550f8', {'network_id': 'fc68ea2c-b60b-4b4f-bd82-94ec81110766'} -- 2.45.2