Refactored port retrieval to include PortSettigs.
[snaps.git] / snaps / openstack / create_router.py
index 89c3431..6bbfcf9 100644 (file)
@@ -39,7 +39,7 @@ class OpenStackRouter:
         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
@@ -81,15 +81,16 @@ class OpenStackRouter:
                 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)
@@ -108,7 +109,7 @@ class OpenStackRouter:
                                                        self.__router,
                                                        port=port)
                 else:
-                    raise Exception(
+                    raise RouterCreationError(
                         'Error creating port with name - ' + port_setting.name)
 
         return self.__router
@@ -131,7 +132,7 @@ class OpenStackRouter:
         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,
@@ -163,6 +164,12 @@ class OpenStackRouter:
         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
@@ -209,7 +216,7 @@ class RouterSettings:
                         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):
         """
@@ -226,36 +233,38 @@ class RouterSettings:
         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
+    """