Example #1
0
 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'])
Example #2
0
 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()))
Example #3
0
 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 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)
Example #5
0
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})
Example #6
0
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
Example #7
0
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
Example #8
0
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'])
Example #9
0
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'])
Example #10
0
    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)