def test_vip_get(self): def get_vip(*args, **kwargs): return self.loadbalancer.get_vip(*args, **kwargs) self.plugin.return_value.get_vip.side_effect = get_vip vip_id = _uuid() id_perms = IdPermsType(uuid=vip_id, enable=True) props = self._virtual_ip_properties_build() vip = VirtualIp(virtual_ip_properties=props, id_perms=id_perms, display_name='vip1') vip.parent_uuid = _uuid() vip.uuid = vip_id instance = self.api_server instance.virtual_ip_read.return_value = vip return_value = { 'name': 'vip1', 'admin_state_up': True, 'tenant_id': vip.parent_uuid, 'status': "ACTIVE", 'id': vip_id } res = self.api.get(_get_path('lb/vips', id=vip_id, fmt=self.fmt)) self.assertEqual(res.status_int, exc.HTTPOk.code) res = self.deserialize(res) self.assertIn('vip', res) self.assertDictContainsSubset(return_value, res['vip'])
def test_vip_get(self): def get_vip(*args, **kwargs): return self.loadbalancer.get_vip(*args, **kwargs) self.plugin.return_value.get_vip.side_effect = get_vip vip_id = _uuid() id_perms = IdPermsType(uuid=vip_id, enable=True) props = self._virtual_ip_properties_build() vip = VirtualIp(virtual_ip_properties=props, id_perms=id_perms, display_name='vip1') vip.parent_uuid = _uuid() vip.uuid = vip_id instance = self.api_server instance.virtual_ip_read.return_value = vip return_value = {'name': 'vip1', 'admin_state_up': True, 'tenant_id': vip.parent_uuid, 'status': "ACTIVE", 'id': vip_id} res = self.api.get(_get_path('lb/vips', id=vip_id, fmt=self.fmt)) self.assertEqual(res.status_int, exc.HTTPOk.code) res = self.deserialize(res) self.assertIn('vip', res) self.assertDictContainsSubset(return_value, res['vip'])
def virtual_ip_read(*args, **kwargs): name = None props = VirtualIpType() props.address = '127.0.0.1' if kwargs['id'] == vip1_id: name = 'vip1' props.protocol = 'HTTP' elif kwargs['id'] == vip2_id: name = 'vip2' props.protocol = 'HTTPS' props.protocol_port = 80 props.connection_limit = 100 props.subnet_id = _uuid() props.admin_state = True vip = VirtualIp(virtual_ip_properties=props, display_name=name) vip.uuid = kwargs['id'] vip.parent_uuid = _uuid() return vip
def test_create_pool(self): tenant_id = _uuid() pool_id = _uuid() vip_id = _uuid() subnet_id = _uuid() api = self.api_server project = Project(name='test') project.uuid = tenant_id template = ServiceTemplate('lb-test', project) template.uuid = _uuid() pool_attrs = LoadbalancerPoolType() pool_attrs.subnet_id = subnet_id pool = LoadbalancerPool( pool_id, project, loadbalancer_pool_properties=pool_attrs) pool.uuid = pool_id vip_attrs = VirtualIpType() vip_attrs.subnet_id = subnet_id vip_attrs.address = '127.0.0.1' vip = VirtualIp(vip_id, project, virtual_ip_properties=vip_attrs) vip.uuid = vip_id vip.set_loadbalancer_pool(pool) vnet = VirtualNetwork('test', project) vnet.uuid = _uuid() vmi = VirtualMachineInterface(vip_id, project) vmi.uuid = _uuid() vmi.set_virtual_network(vnet) iip = InstanceIp(vip_id, instance_ip_address='127.0.0.1') iip.uuid = _uuid() iip.set_virtual_machine_interface(vmi) iip_refs = [ {'to': iip.get_fq_name(), 'uuid': iip.uuid} ] vmi.get_instance_ip_back_refs = mock.Mock() vmi.get_instance_ip_back_refs.return_value = iip_refs vip.set_virtual_machine_interface(vmi) api.virtual_service_template_read = template api.loadbalancer_pool_read.return_value = pool api.virtual_ip_read.return_value = vip api.kv_retrieve.return_value = '%s %s' % (vnet.uuid, subnet_id) api.virtual_machine_interface_read.return_value = vmi api.instance_ip_read.return_value = iip api.service_instance_read.side_effect = NoIdError('404') context = {} pool_data = { 'id': pool_id, 'vip_id': vip_id } self.driver.create_pool(context, pool_data) api.service_instance_create.assert_called_with(mock.ANY)
def create(self, context, vip): """ Create a VIP. """ v = vip['vip'] tenant_id = self._get_tenant_id_for_create(context, v) project = self._project_read(project_id=tenant_id) if v['pool_id']: try: pool = self._api.loadbalancer_pool_read(id=v['pool_id']) except NoIdError: raise loadbalancer.PoolNotFound(pool_id=v['pool_id']) project_id = pool.parent_uuid if str(uuid.UUID(tenant_id)) != project_id: raise n_exc.NotAuthorized() protocol = pool.get_loadbalancer_pool_properties().get_protocol() if protocol != v['protocol']: raise loadbalancer.ProtocolMismatch(vip_proto=v['protocol'], pool_proto=protocol) if pool.get_virtual_ip_back_refs(): raise loadbalancer.VipExists(pool_id=v['pool_id']) else: pool = None obj_uuid = uuidutils.generate_uuid() name = self._get_resource_name('virtual-ip', project, v['name'], obj_uuid) id_perms = IdPermsType(enable=True, description=v['description']) vip = VirtualIp(name, project, id_perms=id_perms, display_name=v['name']) vip.uuid = obj_uuid if pool: vip.set_loadbalancer_pool(pool) vmi, vip_address = self._create_virtual_interface( project, obj_uuid, v['subnet_id'], v.get('address')) vip.set_virtual_machine_interface(vmi) props = self.make_properties(v) props.set_address(vip_address) vip.set_virtual_ip_properties(props) self._api.virtual_ip_create(vip) return self.make_dict(vip)
def create(self, context, vip): """ Create a VIP. """ v = vip['vip'] tenant_id = self._get_tenant_id_for_create(context, v) project = self._project_read(project_id=tenant_id) if v['pool_id']: try: pool = self._api.loadbalancer_pool_read(id=v['pool_id']) except NoIdError: raise loadbalancer.PoolNotFound(pool_id=v['pool_id']) project_id = pool.parent_uuid if str(uuid.UUID(tenant_id)) != project_id: raise n_exc.NotAuthorized() protocol = pool.get_loadbalancer_pool_properties().get_protocol() if protocol != v['protocol']: raise loadbalancer.ProtocolMismatch( vip_proto=v['protocol'], pool_proto=protocol) if pool.get_virtual_ip_back_refs(): raise loadbalancer.VipExists(pool_id=v['pool_id']) else: pool = None obj_uuid = uuidutils.generate_uuid() name = self._get_resource_name('virtual-ip', project, v['name'], obj_uuid) id_perms = IdPermsType(enable=True, description=v['description']) vip = VirtualIp(name, project, id_perms=id_perms, display_name=v['name']) vip.uuid = obj_uuid if pool: vip.set_loadbalancer_pool(pool) vmi, vip_address = self._create_virtual_interface(project, obj_uuid, v['subnet_id'], v.get('address')) vip.set_virtual_machine_interface(vmi) props = self.make_properties(v) props.set_address(vip_address) vip.set_virtual_ip_properties(props) self._api.virtual_ip_create(vip) return self.make_dict(vip)
def create(self, context, vip): """ Create a VIP. """ v = vip['vip'] tenant_id = self._get_tenant_id_for_create(context, v) project = self._project_read(project_id=tenant_id) if v['pool_id']: try: pool = self._api.loadbalancer_pool_read(id=v['pool_id']) except NoIdError: raise loadbalancer.PoolNotFound(pool_id=v['pool_id']) project_id = pool.parent_uuid if tenant_id != project_id: raise n_exc.NotAuthorized() # TODO: check that the pool has no vip configured # if pool.protocol != v['protocol']: # raise loadbalancer.ProtocolMismatch( # vip_proto=v['protocol'], pool_proto=pool.protocol) else: pool = None uuid = uuidutils.generate_uuid() name = self._get_resource_name('virtual-ip', project, v['name'], uuid) props = self.make_properties(v) id_perms = IdPermsType(uuid=uuid, enable=True, description=v['description']) vip = VirtualIp(name, project, virtual_ip_properties=props, id_perms=id_perms, display_name=v['name']) vip.uuid = uuid if pool: vip.set_loadbalancer_pool(pool) vmi = self._create_virtual_interface(project, uuid, v['subnet_id'], v.get('address')) vip.set_virtual_machine_interface(vmi) self._api.virtual_ip_create(vip) return self.make_dict(vip)
def virtual_ip_read(*args, **kwargs): props = self._virtual_ip_properties_build() vip = VirtualIp(virtual_ip_properties=props) vip.uuid = kwargs['id'] vip.parent_uuid = _uuid() return vip