def test_sticky_get_all_by_sf_id(self): values = get_fake_sticky('1') st1 = db_api.sticky_create(self.conf, values) values = get_fake_sticky('2') st2 = db_api.sticky_create(self.conf, values) stickies1 = db_api.sticky_get_all_by_sf_id(self.conf, '1') stickies2 = db_api.sticky_get_all_by_sf_id(self.conf, '2') self.assertEqual(len(stickies1), 1) self.assertEqual(stickies1[0]['id'], st1['id']) self.assertEqual(len(stickies2), 1) self.assertEqual(stickies2[0]['id'], st2['id'])
def test_sticky_get_all_by_sf_id(self): values = get_fake_sticky('1') st1 = db_api.sticky_create(self.conf, values) values = get_fake_sticky('2') st2 = db_api.sticky_create(self.conf, values) stickies1 = db_api.sticky_get_all_by_sf_id(self.conf, '1') stickies2 = db_api.sticky_get_all_by_sf_id(self.conf, '2') self.assertEqual(len(stickies1), 1) self.assertEqual(dict(st1.iteritems()), dict(stickies1[0].iteritems())) self.assertEqual(len(stickies2), 1) self.assertEqual(dict(st2.iteritems()), dict(stickies2[0].iteritems()))
def create_virtual_ip(self, vip_ref, sf_ref): LOG.debug("Called create_virtual_ip(), vip_ref: %r, sf_ref: %r", vip_ref, sf_ref) vservers = self.client.LocalLB.VirtualServer.typefactory.create( 'Common.VirtualServerSequence') vservers.item = [self._define_vserver(vip_ref)] profiles = self.client.LocalLB.VirtualServer.typefactory.\ create('LocalLB.VirtualServer.' 'VirtualServerProfileSequence') profiles.item = [self._define_tcp_profile()] protocol = vip_ref['extra']['protocol'] if protocol == 'HTTP': profiles.item.append(self._define_http_profile()) resources = self.client.LocalLB.VirtualServer.typefactory.\ create('LocalLB.VirtualServer.' 'VirtualServerResourceSequence') resources.item = [self._define_vserver_resource(sf_ref)] self.client.LocalLB.VirtualServer.create(definitions=vservers, wildmasks=[vip_ref['mask']], resources=resources, profiles=[profiles]) self.client.LocalLB.VirtualServer.\ set_snat_automap(virtual_servers=[vip_name(vip_ref)]) stickies = db_api.sticky_get_all_by_sf_id(self.conf, sf_ref['id']) for sticky_ref in stickies: self._add_persistence_profile(sticky_name(sticky_ref), vip_ref) LOG.debug("Ended create_virtual_ip(), vip_ref: %r, sf_ref: %r", vip_ref, sf_ref)
def update_lb(conf, tenant_id, lb_id, lb_body): lb_ref = db_api.loadbalancer_get(conf, lb_id, tenant_id=tenant_id) old_lb_ref = copy.deepcopy(lb_ref) db_api.pack_update(lb_ref, lb_body) lb_ref = db_api.loadbalancer_update(conf, lb_id, lb_ref) if (lb_ref['algorithm'] == old_lb_ref['algorithm'] and lb_ref['protocol'] == old_lb_ref['protocol']): LOG.debug("In LB %r algorithm and protocol have not changed, " "nothing to do on the device %r.", lb_ref['id'], lb_ref['device_id']) return sf_ref = db_api.serverfarm_get_all_by_lb_id(conf, lb_ref['id'])[0] if lb_ref['algorithm'] != old_lb_ref['algorithm']: predictor_ref = db_api.predictor_get_by_sf_id(conf, sf_ref['id']) db_api.predictor_update(conf, predictor_ref['id'], {'type': lb_ref['algorithm']}) vips = db_api.virtualserver_get_all_by_sf_id(conf, sf_ref['id']) if lb_ref['protocol'] != old_lb_ref['protocol']: vip_update_values = {'protocol': lb_ref['protocol']} for vip in vips: db_api.pack_update(vip, vip_update_values) db_api.virtualserver_update(conf, vip['id'], vip) servers = db_api.server_get_all_by_sf_id(conf, sf_ref['id']) probes = db_api.probe_get_all_by_sf_id(conf, sf_ref['id']) stickies = db_api.sticky_get_all_by_sf_id(conf, sf_ref['id']) device_ref = scheduler.reschedule(conf, lb_ref) if device_ref['id'] != lb_ref['device_id']: from_driver = drivers.get_device_driver(conf, lb_ref['device_id']) to_driver = drivers.get_device_driver(conf, device_ref['id']) lb_ref = db_api.loadbalancer_update(conf, lb_ref['id'], {'device_id': device_ref['id']}) else: from_driver = drivers.get_device_driver(conf, device_ref['id']) to_driver = from_driver with from_driver.request_context() as ctx: try: commands.delete_loadbalancer(ctx, sf_ref, vips, servers, probes, stickies) except Exception: with utils.save_and_reraise_exception(): db_api.loadbalancer_update(conf, lb_ref['id'], {'status': lb_status.ERROR}) with to_driver.request_context() as ctx: try: commands.create_loadbalancer(ctx, sf_ref, vips, servers, probes, stickies) except Exception: with utils.save_and_reraise_exception(): db_api.loadbalancer_update(conf, lb_ref['id'], {'status': lb_status.ERROR}) db_api.loadbalancer_update(conf, lb_ref['id'], {'status': lb_status.ACTIVE})
def lb_show_sticky(conf, lb_id): try: sf_ref = db_api.serverfarm_get_all_by_lb_id(conf, lb_id)[0] except IndexError: raise exc.ServerFarmNotFound stickies = db_api.sticky_get_all_by_sf_id(conf, sf_ref['id']) list = [] dict = {"sessionPersistence": {}} for sticky in stickies: list.append(db_api.unpack_extra(sticky)) dict['sessionPersistence'] = list return dict
def lb_show_details(conf, lb_id): lb = db_api.loadbalancer_get(conf, lb_id) sf = db_api.serverfarm_get_all_by_lb_id(conf, lb_id)[0] vips = db_api.virtualserver_get_all_by_sf_id(conf, sf['id']) rs = db_api.server_get_all_by_sf_id(conf, sf['id']) probes = db_api.probe_get_all_by_sf_id(conf, sf['id']) stickies = db_api.sticky_get_all_by_sf_id(conf, sf['id']) lb_ref = db_api.unpack_extra(lb) lb_ref['nodes'] = [db_api.unpack_extra(rserver) for rserver in rs] lb_ref['virtualIps'] = [db_api.unpack_extra(vip) for vip in vips] lb_ref['healthMonitor'] = [db_api.unpack_extra(probe) for probe in probes] lb_ref['sessionPersistence'] = [db_api.unpack_extra(sticky)\ for sticky in stickies] return lb_ref
def delete_lb(conf, tenant_id, lb_id): lb_ref = db_api.loadbalancer_get(conf, lb_id, tenant_id=tenant_id) sf_ref = db_api.serverfarm_get_all_by_lb_id(conf, lb_ref['id'])[0] vips = db_api.virtualserver_get_all_by_sf_id(conf, sf_ref['id']) servers = db_api.server_get_all_by_sf_id(conf, sf_ref['id']) probes = db_api.probe_get_all_by_sf_id(conf, sf_ref['id']) stickies = db_api.sticky_get_all_by_sf_id(conf, sf_ref['id']) device_driver = drivers.get_device_driver(conf, lb_ref['device_id']) with device_driver.request_context() as ctx: commands.delete_loadbalancer(ctx, sf_ref, vips, servers, probes, stickies) db_api.probe_destroy_by_sf_id(conf, sf_ref['id']) db_api.sticky_destroy_by_sf_id(conf, sf_ref['id']) db_api.server_destroy_by_sf_id(conf, sf_ref['id']) db_api.virtualserver_destroy_by_sf_id(conf, sf_ref['id']) db_api.predictor_destroy_by_sf_id(conf, sf_ref['id']) db_api.serverfarm_destroy(conf, sf_ref['id']) db_api.loadbalancer_destroy(conf, lb_ref['id'])
def delete_loadbalancer(ctx, lb): sf = db_api.serverfarm_get_all_by_lb_id(ctx.conf, lb['id'])[0] vips = db_api.virtualserver_get_all_by_sf_id(ctx.conf, sf['id']) rs = db_api.server_get_all_by_sf_id(ctx.conf, sf['id']) probes = db_api.probe_get_all_by_sf_id(ctx.conf, sf['id']) stickies = db_api.sticky_get_all_by_sf_id(ctx.conf, sf['id']) for vip in vips: delete_vip(ctx, vip) for rserver in rs: delete_rserver_from_server_farm(ctx, sf, rserver) delete_rserver(ctx, rserver) for probe in probes: remove_probe_from_server_farm(ctx, sf, probe) delete_probe(ctx, probe) for sticky in stickies: delete_sticky(ctx, sticky) delete_server_farm(ctx, sf) db_api.predictor_destroy_by_sf_id(ctx.conf, sf['id']) db_api.server_destroy_by_sf_id(ctx.conf, sf['id']) db_api.probe_destroy_by_sf_id(ctx.conf, sf['id']) db_api.virtualserver_destroy_by_sf_id(ctx.conf, sf['id']) db_api.sticky_destroy_by_sf_id(ctx.conf, sf['id']) db_api.serverfarm_destroy(ctx.conf, sf['id']) db_api.loadbalancer_destroy(ctx.conf, lb['id'])
def loadFromDB(self, lb_id): self.lb = db_api.loadbalancer_get(self.conf, lb_id) self.sf = db_api.serverfarm_get_all_by_lb_id(self.conf, lb_id)[0] sf_id = self.sf['id'] self.vips = db_api.virtualserver_get_all_by_sf_id(self.conf, sf_id) predictor = db_api.predictor_get_all_by_sf_id(self.conf, sf_id)[0] self.sf._predictor = predictor self.rs = db_api.server_get_all_by_sf_id(self.conf, sf_id) self.sf._rservers = [] for rs in self.rs: self.sf._rservers.append(rs) self.probes = db_api.probe_get_all_by_sf_id(self.conf, sf_id) self.sf._probes = [] for prob in self.probes: self.sf._probes.append(prob) sticks = db_api.sticky_get_all_by_sf_id(self.conf, sf_id) self.sf._sticky = [] for st in sticks: self.sf._sticky.append(st)