summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/create_router.py
diff options
context:
space:
mode:
Diffstat (limited to 'snaps/openstack/create_router.py')
-rw-r--r--snaps/openstack/create_router.py114
1 files changed, 67 insertions, 47 deletions
diff --git a/snaps/openstack/create_router.py b/snaps/openstack/create_router.py
index ef27fab..98e3e14 100644
--- a/snaps/openstack/create_router.py
+++ b/snaps/openstack/create_router.py
@@ -16,6 +16,7 @@ import logging
from neutronclient.common.exceptions import NotFound
from snaps.openstack.create_network import PortSettings
+from snaps.openstack.openstack_creator import OpenStackNetworkObject
from snaps.openstack.utils import neutron_utils, keystone_utils
__author__ = 'spisarski'
@@ -23,9 +24,9 @@ __author__ = 'spisarski'
logger = logging.getLogger('OpenStackNetwork')
-class OpenStackRouter:
+class OpenStackRouter(OpenStackNetworkObject):
"""
- Class responsible for creating a router in OpenStack
+ Class responsible for managing a router in OpenStack
"""
def __init__(self, os_creds, router_settings):
@@ -36,13 +37,12 @@ class OpenStackRouter:
(must be an instance of the RouterSettings
class)
"""
- self.__os_creds = os_creds
+ super(self.__class__, self).__init__(os_creds)
if not router_settings:
raise RouterCreationError('router_settings is required')
self.router_settings = router_settings
- self.__neutron = None
# Attributes instantiated on create()
self.__router = None
@@ -53,64 +53,84 @@ class OpenStackRouter:
# interfaces are the value
self.__ports = list()
- def create(self, cleanup=False):
+ def initialize(self):
"""
- Responsible for creating the router.
- :param cleanup: When true, only perform lookups for OpenStack objects.
- :return: the router object
+ Loads the existing router.
+ :return: the Router domain object
"""
- self.__neutron = neutron_utils.neutron_client(self.__os_creds)
-
- logger.debug(
- 'Creating Router with name - ' + self.router_settings.name)
- existing = False
- router_inst = neutron_utils.get_router(
- self.__neutron, router_settings=self.router_settings)
- if router_inst:
- self.__router = router_inst
- existing = True
- else:
- if not cleanup:
- self.__router = neutron_utils.create_router(
- self.__neutron, self.__os_creds, self.router_settings)
+ super(self.__class__, self).initialize()
+
+ self.__router = neutron_utils.get_router(
+ self._neutron, router_settings=self.router_settings)
for internal_subnet_name in self.router_settings.internal_subnets:
internal_subnet = neutron_utils.get_subnet(
- self.__neutron, subnet_name=internal_subnet_name)
+ self._neutron, subnet_name=internal_subnet_name)
if internal_subnet:
self.__internal_subnets.append(internal_subnet)
- if internal_subnet and not cleanup and not existing:
- logger.debug('Adding router to subnet...')
- router_intf = neutron_utils.add_interface_router(
- self.__neutron, self.__router, subnet=internal_subnet)
- self.__internal_router_interface = router_intf
else:
raise RouterCreationError(
'Subnet not found with name ' + internal_subnet_name)
for port_setting in self.router_settings.port_settings:
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._neutron, port_settings=port_setting)
if port:
self.__ports.append(port)
- if not port and not cleanup and not existing:
- port = neutron_utils.create_port(self.__neutron,
- self.__os_creds, port_setting)
- if port:
- logger.info(
- 'Created port %s for router - %s', port_setting.name,
- self.router_settings.name)
- self.__ports.append(port)
- neutron_utils.add_interface_router(self.__neutron,
- self.__router,
- port=port)
+ return self.__router
+
+ def create(self):
+ """
+ Responsible for creating the router.
+ :return: the Router domain object
+ """
+ self.initialize()
+
+ if not self.__router:
+ self.__router = neutron_utils.create_router(
+ self._neutron, self._os_creds, self.router_settings)
+
+ for internal_subnet_name in self.router_settings.internal_subnets:
+ internal_subnet = neutron_utils.get_subnet(
+ self._neutron, subnet_name=internal_subnet_name)
+ if internal_subnet:
+ self.__internal_subnets.append(internal_subnet)
+ if internal_subnet:
+ logger.debug('Adding router to subnet...')
+ router_intf = neutron_utils.add_interface_router(
+ self._neutron, self.__router,
+ subnet=internal_subnet)
+ self.__internal_router_interface = router_intf
else:
raise RouterCreationError(
- 'Error creating port with name - ' + port_setting.name)
+ 'Subnet not found with name ' + internal_subnet_name)
+
+ for port_setting in self.router_settings.port_settings:
+ 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)
+ if port:
+ self.__ports.append(port)
+
+ if not port:
+ port = neutron_utils.create_port(
+ self._neutron, self._os_creds, port_setting)
+ if port:
+ logger.info(
+ 'Created port %s for router - %s',
+ port_setting.name,
+ self.router_settings.name)
+ self.__ports.append(port)
+ neutron_utils.add_interface_router(self._neutron,
+ self.__router,
+ port=port)
+ else:
+ raise RouterCreationError(
+ 'Error creating port with name - '
+ + port_setting.name)
return self.__router
@@ -123,7 +143,7 @@ class OpenStackRouter:
'Removing router interface from router %s and port %s',
self.router_settings.name, port.name)
try:
- neutron_utils.remove_interface_router(self.__neutron,
+ neutron_utils.remove_interface_router(self._neutron,
self.__router, port=port)
except NotFound:
pass
@@ -134,7 +154,7 @@ class OpenStackRouter:
'Removing router interface from router %s and subnet %s',
self.router_settings.name, internal_subnet.name)
try:
- neutron_utils.remove_interface_router(self.__neutron,
+ neutron_utils.remove_interface_router(self._neutron,
self.__router,
subnet=internal_subnet)
except NotFound:
@@ -144,7 +164,7 @@ class OpenStackRouter:
if self.__router:
logger.info('Removing router ' + self.router_settings.name)
try:
- neutron_utils.delete_router(self.__neutron, self.__router)
+ neutron_utils.delete_router(self._neutron, self.__router)
except NotFound:
pass
self.__router = None