def _validate_create_routing_lsp_by_subnet(self, network_id, subnet_id, router_id=None): if not network_id: raise ElementNotFoundError( 'Unable to add router interface. ' 'Subnet {subnet_id} does not belong to any network'.format( subnet_id=subnet_id)) network_subnet = self._get_dhcp_by_network_id(network_id) if not network_subnet or str(network_subnet.uuid) != subnet_id: raise BadRequestError( 'Subnet {subnet_id} does not belong to network {network_id}'. format(subnet_id=subnet_id, network_id=network_id)) old_router_id = self._get_subnet_gateway_router_id(subnet_id) if old_router_id: if old_router_id == router_id: raise BadRequestError( 'Can not add subnet {subnet} to router {router}. Subnet is' ' already connected to this router'.format( subnet=subnet_id, router=router_id)) else: raise BadRequestError( 'Can not add subnet {subnet} to router. Subnet is' ' already connected to router {old_router}'.format( subnet=subnet_id, router=router_id, old_router=old_router_id))
def _delete_router_interface(self, router_id, port_id, lrp, network_id, lsp, lr): if lrp not in lr.ports: raise BadRequestError( 'Port {port} is not connected to router {router}'.format( port=port_id, router=router_id)) self._disconnect_port_from_router(lsp) self._update_port_address(lsp, network_id=network_id, mac=lrp.mac) self.idl.lrp_del(str(lrp.uuid)).execute()
def _delete_router_interface_by_port(self, router_id, port_id): lsp = self._get_switch_port(port_id) lrp_name = lsp.options.get(ovnconst.LSP_OPTION_ROUTER_PORT) if not lrp_name: raise BadRequestError( 'Port {port} is not connected to a router'.format( port=port_id)) lrp = self._get_lrp(lrp_name) network_id = self._get_port_network(lsp) lr = self._get_router(router_id) self._delete_router_interface(router_id, port_id, lrp, network_id, lsp, lr)
def _update_routing_lsp_by_port(self, port_id, router_id): port = self._get_switch_port(port_id) if port.type == ovnconst.LSP_TYPE_ROUTER: raise BadRequestError( 'Can not add {port} to router. Port is already connected to a' ' router'.format(port=port_id)) lrp_ip = self._get_ip_from_port(port, router_id) lrp_name = self._create_router_port_name(port.uuid) mac = ip_utils.get_port_mac(port) self._connect_port_to_router(port, lrp_name, is_enabled=True) return (port_id, lrp_name, lrp_ip, str(self._get_port_network(port).uuid), mac)
def delete_subnet(self, subnet_id): subnet = self._get_subnet(subnet_id) router_id = self._get_subnet_gateway_router_id(subnet_id) if router_id: raise BadRequestError( 'Unable to delete subnet {subnet} because it is connected to ' 'router {router}. Please disconnect the subnet from the router' ' first.'.format(subnet=subnet_id, router=router_id)) network_id = subnet.external_ids.get(SubnetMapper.OVN_NETWORK_ID) network = self._get_network(network_id) self.idl.dhcp_options_del(subnet_id).execute() for port in network.ports: if port.type == ovnconst.LSP_TYPE_ROUTER: continue self._update_port_address(port, network_id=network_id)
def post_tokens(content, parameters): received_auth = get_entity(content, 'auth') try: if 'passwordCredentials' in received_auth: password_credentials = received_auth['passwordCredentials'] user_at_domain = password_credentials['username'] user_password = password_credentials['password'] token = auth.create_token(user_at_domain=user_at_domain, user_password=user_password) else: token = received_auth['token']['id'] except KeyError as e: raise BadRequestError(e) if not auth.validate_token(token): raise auth.Forbidden() neutronurl = neutron_url() keystoneurl = keystone_url() novaurl = nova_url_with_version() region = openstack_region() neutron_id = openstack_neutron_id() keystone_id = openstack_keystone_id() # OpenStack Identity API v2.0 specifies HTTP 200 as return code for # successful token creation http_code = httplib.OK return Response( { 'access': { 'token': { 'id': token, 'expires': _get_token_expires() }, 'user': { 'username': '******', 'roles_links': [], 'id': '', 'roles': [{ 'name': 'admin' }], 'name': 'admin' }, 'serviceCatalog': [{ 'endpoints': [{ 'adminURL': neutronurl, 'internalURL': neutronurl, 'publicURL': neutronurl, 'region': region, 'id': neutron_id, }], 'endpoints_links': [], 'type': 'network', 'name': 'neutron', }, { 'endpoints': [{ 'adminURL': keystoneurl, 'region': region, 'internalURL': keystoneurl, 'id': keystone_id, 'publicURL': keystoneurl }], 'endpoints_links': [], 'type': 'identity', 'name': 'keystone' }, { 'endpoints': [{ 'adminURL': novaurl, 'region': region, 'internalURL': novaurl, 'id': keystone_id, 'publicURL': novaurl }], 'endpoints_links': [], 'type': 'compute', 'name': 'nova' }] }, }, code=http_code)
def get_entity(content, entity_name=None): try: content_json = json.loads(content) return content_json[entity_name] if entity_name else content_json except (ValueError, KeyError) as e: raise BadRequestError(e)