def _create_virtual_interface(self, project, lb_id, subnet_id, network_id,
                                  ip_address):

        iip_obj = InstanceIp(name=lb_id)
        if subnet_id and subnet_id != ATTR_NOT_SPECIFIED:
            network_id = utils.get_subnet_network_id(self._api, subnet_id)
            vnet = utils.get_vnet_obj(self._api, network_id)
            iip_obj.set_subnet_uuid(subnet_id)
        elif network_id and network_id != ATTR_NOT_SPECIFIED:
            vnet = utils.get_vnet_obj(self._api, network_id)
        else:
            msg = 'vip-network-id or vip-subnet-id should be specified'
            raise BadRequest(resource='loadbalancer', msg=msg)

        vmi = VirtualMachineInterface(lb_id, project)
        vmi.set_virtual_network(vnet)
        vmi.set_virtual_machine_interface_device_owner(
            DEVICE_OWNER_LOADBALANCER)

        sg_obj = SecurityGroup("default", project)
        vmi.add_security_group(sg_obj)
        self._api.virtual_machine_interface_create(vmi)

        iip_obj.set_virtual_network(vnet)
        iip_obj.set_virtual_machine_interface(vmi)
        if ip_address and ip_address != ATTR_NOT_SPECIFIED:
            iip_obj.set_instance_ip_address(ip_address)
        self._api.instance_ip_create(iip_obj)
        iip = self._api.instance_ip_read(id=iip_obj.uuid)
        vip_address = iip.get_instance_ip_address()
        vip_subnet_id = iip.get_subnet_uuid()

        return vmi, vip_address, vip_subnet_id
    def _update_virtual_ip_properties(self, props, id, vip):
        """
        Update virtual ip properties and return True if the have been
        modified
        """
        # according to the spec:
        # status, subnet_id, address, port and protocol are immutable
        immutable = ['address', 'protocol', 'protocol_port', 'subnet_id']
        for field in immutable:
            if field not in vip:
                continue
            if getattr(props, field) != vip[field]:
                msg = 'Attribute %s in vip %s is immutable' % (field, id)
                raise BadRequest(resource='vip', msg=msg)

        # update
        change = self.update_properties_subr(props, vip)

        if 'session_persistence' in vip:
            sp = vip['session_persistence']

            new_type = sp.get('type', None)
            if props.persistence_type != new_type:
                props.persistence_type = new_type
                change = True
            new_cookie_name = sp.get('cookie_name', None)
            if props.persistence_cookie_name != new_cookie_name and \
                    props.persistence_type == 'APP_COOKIE':
                props.persistence_cookie_name = new_cookie_name
                change = True

        return change
    def add_router_interface(self, context, router_id, interface_info):
        """Add interface to a router."""

        if not interface_info:
            msg = _("Either subnet_id or port_id must be specified")
            raise BadRequest(resource='router', msg=msg)

        if 'port_id' in interface_info:
            if 'subnet_id' in interface_info:
                msg = _("Cannot specify both subnet-id and port-id")
                raise BadRequest(resource='router', msg=msg)

        res_dict = self._encode_resource(resource_id=router_id,
                                         resource=interface_info)
        status_code, res_info = self._request_backend(context, res_dict,
                                                      'router', 'ADDINTERFACE')
        if status_code != requests.codes.ok:
            plugin_base._raise_contrail_error(info=res_info,
                                              obj_name='add_router_interface')
        return res_info
Exemple #4
0
    def add_router_interface(self, context, router_id, interface_info):
        """Add interface to a router."""

        if not interface_info:
            msg = "Either subnet_id or port_id must be specified"
            raise BadRequest(resource='router', msg=msg)

        if 'port_id' in interface_info:
            if 'subnet_id' in interface_info:
                msg = "Cannot specify both subnet-id and port-id"
                raise BadRequest(resource='router', msg=msg)

        self._set_user_auth_token()
        port_id = interface_info.get('port_id')
        subnet_id = interface_info.get('subnet_id')

        rtr_iface_handler = LogicalRouterInterfaceHandler(
            self._vnc_lib)
        return rtr_iface_handler.add_router_interface(
            self._get_context_dict(context), router_id,
            port_id=port_id, subnet_id=subnet_id)
Exemple #5
0
    def wrapper(*args, **kwargs):
        self = args[0]
        context = args[1]

        try:
            auth_token = getcurrent().contrail_vars.token
        except Exception as exc:
            raise BadRequest(resource='loadbalancer', msg=str(exc))

        if not auth_token:
            msg = "Auth-token in thread storage is set to None"
            raise BadRequest(resource='loadbalancer', msg=str(msg))

        if context.auth_token != auth_token:
            LOG.warning("Token in thread is different from context token")
            LOG.debug("Tenant ID %s" % context.tenant_id)

        # forward user token to API server for RBAC
        self.api.set_auth_token(auth_token)

        return func(*args, **kwargs)
    def remove_router_interface(self, context, router_id, interface_info):
        """Delete interface from a router."""

        if not interface_info:
            msg = _("Either subnet_id or port_id must be specified")
            raise BadRequest(resource='router', msg=msg)

        res_dict = self._encode_resource(resource_id=router_id,
                                         resource=interface_info)
        status_code, res_info = self._request_backend(context, res_dict,
                                                      'router', 'DELINTERFACE')
        if status_code != requests.codes.ok:
            plugin_base._raise_contrail_error(info=res_info,
                                              obj_name='remove_router_interface')
        return res_info
Exemple #7
0
    def remove_router_interface(self, context, router_id, interface_info):
        """Delete interface from a router."""

        if not interface_info:
            msg = "Either subnet_id or port_id must be specified"
            raise BadRequest(resource='router', msg=msg)

        port_id = interface_info.get('port_id')
        subnet_id = interface_info.get('subnet_id')

        self._set_user_auth_token()
        rtr_iface_handler = LogicalRouterInterfaceHandler(
            self._vnc_lib)
        return rtr_iface_handler.remove_router_interface(
            self._get_context_dict(context), router_id, port_id=port_id,
            subnet_id=subnet_id)
    def _update_listener_properties(self, props, id, ll):
        """
        Update listener properties and return True if the have been
        modified
        """
        # according to the spec:
        # port and protocol are immutable
        immutable = ['protocol', 'protocol_port']
        for field in immutable:
            if field not in ll:
                continue
            if getattr(props, field) != ll[field]:
                msg = 'Attribute %s in listener %s is immutable' % (field, id)
                raise BadRequest(resource='listener', msg=msg)

        # update
        change = self.update_properties_subr(props, ll)
        return change
    def _update_loadbalancer_properties(self, props, id, lb):
        """
        Update loadbalancer properties and return True if the have been
        modified
        """
        # according to the spec:
        # vip_address, vip_subnet_id are immutable
        immutable = ['vip_address', 'vip_subnet_id']
        for field in immutable:
            if field not in lb:
                continue
            if getattr(props, field) != lb[field]:
                msg = 'Attribute %s in loadbalancer %s is immutable' % (field,
                                                                        id)
                raise BadRequest(resource='loadbalancer', msg=msg)

        # update
        change = self.update_properties_subr(props, lb)
        return change
 def create_health_monitor(self, context, health_monitor):
     try:
         return self.monitor_manager.create(context, health_monitor)
     except vnc_exc.PermissionDenied as ex:
         raise BadRequest(resource='health_monitor', msg=str(ex))
 def create_member(self, context, member):
     try:
         return self.member_manager.create(context, member)
     except vnc_exc.PermissionDenied as ex:
         raise BadRequest(resource='member', msg=str(ex))
 def create_pool(self, context, pool):
     try:
         return self.pool_manager.create(context, pool)
     except vnc_exc.PermissionDenied as ex:
         raise BadRequest(resource='pool', msg=str(ex))
 def create_vip(self, context, vip):
     try:
         return self.vip_manager.create(context, vip)
     except vnc_exc.PermissionDenied as ex:
         raise BadRequest(resource='vip', msg=str(ex))
 def create_loadbalancer(self, context, loadbalancer):
     self.api.set_auth_token(context.auth_token)
     try:
         return self.loadbalancer_manager.create(context, loadbalancer)
     except vnc_exc.PermissionDenied as ex:
         raise BadRequest(resource='loadbalancer', msg=str(ex))
 def create_pool_member(self, context, pool_id, member):
     self.api.set_auth_token(context.auth_token)
     try:
         return self.member_manager.create(context, pool_id, member)
     except vnc_exc.PermissionDenied as ex:
         raise BadRequest(resource='member', msg=str(ex))