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.py61
1 files changed, 45 insertions, 16 deletions
diff --git a/snaps/openstack/create_router.py b/snaps/openstack/create_router.py
index 4f95c3b..3269bbd 100644
--- a/snaps/openstack/create_router.py
+++ b/snaps/openstack/create_router.py
@@ -14,7 +14,7 @@
# limitations under the License.
import logging
-from neutronclient.common.exceptions import NotFound
+from neutronclient.common.exceptions import NotFound, Unauthorized
from snaps.config.router import RouterConfig
from snaps.openstack.openstack_creator import OpenStackNetworkObject
@@ -61,22 +61,28 @@ class OpenStackRouter(OpenStackNetworkObject):
"""
super(self.__class__, self).initialize()
- self.__router = neutron_utils.get_router(
- self._neutron, router_settings=self.router_settings)
+ try:
+ self.__router = neutron_utils.get_router(
+ self._neutron, self._keystone,
+ router_settings=self.router_settings,
+ project_name=self._os_creds.project_name)
+ except Unauthorized as e:
+ logger.warn('Unable to lookup router with name %s - %s',
+ self.router_settings.name, e)
if self.__router:
- for internal_subnet_name in self.router_settings.internal_subnets:
- internal_subnet = neutron_utils.get_subnet(
- self._neutron, subnet_name=internal_subnet_name)
+ for sub_config in self.router_settings.internal_subnets:
+ internal_subnet = self.__get_internal_subnet(sub_config)
if internal_subnet:
self.__internal_subnets.append(internal_subnet)
else:
raise RouterCreationError(
- 'Subnet not found with name ' + internal_subnet_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)
+ self._neutron, self._keystone, port_settings=port_setting,
+ project_name=self._os_creds.project_name)
if port:
self.__ports.append(port)
@@ -93,9 +99,8 @@ class OpenStackRouter(OpenStackNetworkObject):
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)
+ for sub_config in self.router_settings.internal_subnets:
+ internal_subnet = self.__get_internal_subnet(sub_config)
if internal_subnet:
self.__internal_subnets.append(internal_subnet)
if internal_subnet:
@@ -106,11 +111,12 @@ class OpenStackRouter(OpenStackNetworkObject):
self.__internal_router_interface = router_intf
else:
raise RouterCreationError(
- 'Subnet not found with name ' + internal_subnet_name)
+ 'Subnet not found with name {}'.format(sub_config))
for port_setting in self.router_settings.port_settings:
port = neutron_utils.get_port(
- self._neutron, port_settings=port_setting)
+ self._neutron, self._keystone, port_settings=port_setting,
+ project_name=self._os_creds.project_name)
logger.info(
'Retrieved port %s for router - %s', port_setting.name,
self.router_settings.name)
@@ -126,9 +132,8 @@ class OpenStackRouter(OpenStackNetworkObject):
port_setting.name,
self.router_settings.name)
self.__ports.append(port)
- neutron_utils.add_interface_router(self._neutron,
- self.__router,
- port=port)
+ neutron_utils.add_interface_router(
+ self._neutron, self.__router, port=port)
else:
raise RouterCreationError(
'Error creating port with name - '
@@ -138,6 +143,28 @@ class OpenStackRouter(OpenStackNetworkObject):
self._neutron, self.__router.id)
return self.__router
+ def __get_internal_subnet(self, sub_config):
+ """
+ returns the Subnet domain object from the subnet configurator
+ :param sub_config:
+ :return:
+ """
+ if isinstance(sub_config, dict):
+ sub_dict = sub_config['subnet']
+ network = neutron_utils.get_network(
+ self._neutron, self._keystone,
+ network_name=sub_dict['network_name'],
+ project_name=sub_dict['project_name'])
+ if network:
+ return neutron_utils.get_subnet(
+ self._neutron, network,
+ subnet_name=sub_dict['subnet_name'])
+ else:
+ return neutron_utils.get_subnet_by_name(
+ self._neutron, self._keystone,
+ subnet_name=sub_config,
+ project_name=self._os_creds.project_name)
+
def clean(self):
"""
Removes and deletes all items created in reverse order.
@@ -173,6 +200,8 @@ class OpenStackRouter(OpenStackNetworkObject):
pass
self.__router = None
+ super(self.__class__, self).clean()
+
def get_router(self):
"""
Returns the OpenStack router object