X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=snaps%2Fopenstack%2Fcreate_router.py;h=3269bbd585e469290582253e0b0ccc8b7c49fa23;hb=e6ec3766be49d69a44ca1e1348bbf5e6ed692c84;hp=4f95c3b05cef4792c40e890da9278c93a5f3300d;hpb=7cf2a28e78404a3835bfde3516d1fb7ff93aa58d;p=snaps.git 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