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
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)
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
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))