self.__os_creds = os_creds
if not router_settings:
- raise Exception('router_settings is required')
+ raise RouterCreationError('router_settings is required')
self.router_settings = router_settings
self.__neutron = None
self.__internal_subnets.append(internal_subnet)
if internal_subnet and not cleanup and not existing:
logger.debug('Adding router to subnet...')
- self.__internal_router_interface = neutron_utils.add_interface_router(
+ router_intf = neutron_utils.add_interface_router(
self.__neutron, self.__router, subnet=internal_subnet)
+ self.__internal_router_interface = router_intf
else:
- raise Exception(
+ raise RouterCreationError(
'Subnet not found with name ' + internal_subnet_name)
for port_setting in self.router_settings.port_settings:
- port = neutron_utils.get_port_by_name(self.__neutron,
- port_setting.name)
+ port = neutron_utils.get_port(
+ self.__neutron, port_settings=port_setting)
logger.info(
'Retrieved port %s for router - %s', port_setting.name,
self.router_settings.name)
self.__router,
port=port)
else:
- raise Exception(
+ raise RouterCreationError(
'Error creating port with name - ' + port_setting.name)
return self.__router
for port in self.__ports:
logger.info(
'Removing router interface from router %s and port %s',
- self.router_settings.name, port['port']['name'])
+ self.router_settings.name, port.name)
try:
neutron_utils.remove_interface_router(self.__neutron,
self.__router, port=port)
for internal_subnet in self.__internal_subnets:
logger.info(
'Removing router interface from router %s and subnet %s',
- self.router_settings.name, internal_subnet['subnet']['name'])
+ self.router_settings.name, internal_subnet.name)
try:
neutron_utils.remove_interface_router(self.__neutron,
self.__router,
return self.__internal_router_interface
+class RouterCreationError(Exception):
+ """
+ Exception to be thrown when an router instance cannot be created
+ """
+
+
class RouterSettings:
"""
Class representing a router configuration
self.internal_subnets = list()
self.port_settings = list()
- if kwargs.get('interfaces'):
- interfaces = kwargs['interfaces']
+ if kwargs.get('interfaces', kwargs.get('port_settings')):
+ interfaces = kwargs.get('interfaces', kwargs.get('port_settings'))
for interface in interfaces:
- if interface.get('port'):
+ if isinstance(interface, PortSettings):
+ self.port_settings.append(interface)
+ else:
self.port_settings.append(
PortSettings(**interface['port']))
if not self.name:
- raise Exception('Name is required')
+ raise RouterSettingsError('Name is required')
def dict_for_neutron(self, neutron, os_creds):
"""
out = dict()
ext_gw = dict()
- project_id = None
-
if self.name:
out['name'] = self.name
if self.project_name:
keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(keystone, self.project_name)
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
project_id = None
if project:
project_id = project.id
if project_id:
- out['project_id'] = project_id
+ out['tenant_id'] = project_id
else:
- raise Exception(
+ raise RouterSettingsError(
'Could not find project ID for project named - ' +
self.project_name)
if self.admin_state_up is not None:
out['admin_state_up'] = self.admin_state_up
if self.external_gateway:
- ext_net = neutron_utils.get_network(neutron, self.external_gateway,
- project_id)
+ ext_net = neutron_utils.get_network(
+ neutron, network_name=self.external_gateway)
if ext_net:
- ext_gw['network_id'] = ext_net['network']['id']
+ ext_gw['network_id'] = ext_net.id
out['external_gateway_info'] = ext_gw
else:
- raise Exception(
+ raise RouterSettingsError(
'Could not find the external network named - ' +
self.external_gateway)
- # TODO: Enable SNAT option for Router
- # TODO: Add external_fixed_ips Tests
-
return {'router': out}
+
+
+class RouterSettingsError(Exception):
+ """
+ Exception to be thrown when router settings attributes are incorrect
+ """