コード例 #1
0
    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))
コード例 #2
0
 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()
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
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)
コード例 #7
0
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)