Ejemplo n.º 1
0
    def index(self):
        c.title = 'Nodetraq - LoadBalancer'
        c.selected_page = 'loadbalancer'
        c.subpage = 'index'
        lb = LoadBalancer(ip='lb_iphere')
        pools = lb.get_pools()
        pools.sort()
        c.pool_count = len(pools)

        c.link_append = '&' + urlencode(
            [p for p in request.params.items()\
                 if p[0] != 'page'])
        if c.link_append == '&':
            c.link_append = None

        if 'show_all' in request.params:
            c.page = 1
            c.total_pages = 1
            c.current_page_count = 1
            c.members = self.get_members_status(Session, pools)
        else:
            c.page = int(request.params['page'])\
                    if 'page' in request.params else 1
            c.total_pages = (c.pool_count+25-1)/25
            c.current_page_count = (c.page-1)*25
            c.members = self.get_members_status(Session,
                    pools[c.current_page_count:c.current_page_count+25])

        return render('/loadbalancer/index.mako')
Ejemplo n.º 2
0
    def index(self):
        c.title = 'Nodetraq - LoadBalancer'
        c.selected_page = 'loadbalancer'
        c.subpage = 'index'
        lb = LoadBalancer(ip='lb_iphere')
        pools = lb.get_pools()
        pools.sort()
        c.pool_count = len(pools)

        c.link_append = '&' + urlencode(
            [p for p in request.params.items()\
                 if p[0] != 'page'])
        if c.link_append == '&':
            c.link_append = None

        if 'show_all' in request.params:
            c.page = 1
            c.total_pages = 1
            c.current_page_count = 1
            c.members = self.get_members_status(Session, pools)
        else:
            c.page = int(request.params['page'])\
                    if 'page' in request.params else 1
            c.total_pages = (c.pool_count + 25 - 1) / 25
            c.current_page_count = (c.page - 1) * 25
            c.members = self.get_members_status(
                Session, pools[c.current_page_count:c.current_page_count + 25])

        return render('/loadbalancer/index.mako')
Ejemplo n.º 3
0
    def enablehost(self, format=None):
        valid = False
        response.content_type = "application/json"
        ids = None
        ips = None
        data = {}
        ports = []
        if 'ids[]' in request.params:
            ids = [v for k, v in request.params.items() if 'ids[]' in k]
        elif 'ips[]' in request.params:
            ips = [v for k, v in request.params.items() if 'ips[]' in k]
        if 'pool' in request.params:
            pool = request.params['pool']
            if 'ports[]' in request.params:
                ports = [v for k,v in request.params.items()\
                        if 'ports[]' in k]
                if ips or ids:
                    valid = True

        if not valid:
            session['flash'] = 'No ids were sent'
            session.save()
            if format == 'json':
                return '{"success": false}'
            else:
                return redirect(url(controller='loadbalancer', action='index'))

        lb = LoadBalancer(ip='your_lb_ip')
        if ids:
            data['hosts'] = [
                Session.query(Node.hostname)\
                    .filter(Node.id == id)\
                    .first()[0] for id in ids ]
            members = [
                    ':'.join([Session.query(Node.primary_ip)\
                        .filter(Node.id == id)\
                        .first()[0], ports[i]])\
                        for i,id in enumerate(ids)]
        elif ips:
            data['hosts'] = [
                Session.query(Node.hostname)\
                    .filter(or_(Node.primary_ip == ip,
                                Node.secondary_ip == ip))\
                    .first()[0] for ip in ips ]
            members = [':'.join([ip, ports[i]])\
                    for i,ip in enumerate(ips)]

        lb.enable_members(pool, members)
        data['pool'] = pool
        data['type'] = 'enable'
        ae = ActivityEngine(Session, session['active_user']['user_id'])

        status = ae.update('loadbalancer', None, data)
        session['flash'] = status
        session.save()
        if format == 'json':
            return '{"success": true}'
        else:
            return redirect(url(controller='loadbalancer', action='index'))
Ejemplo n.º 4
0
    def disablehost(self, format=None):
        valid = False
        response.content_type = "application/json"
        ids = None
        ips = None
        data = {}
        if 'ids[]' in request.params:
            ids = [v for k,v in request.params.items() if 'ids[]' in k]
        elif 'ips[]' in request.params:
            ips = [v for k,v in reuqest.params.items() if 'ips[]' in k]
        if 'pool' in request.params:
            pool = request.params['pool']
            if 'ports[]' in request.params:
                ports = [v for k,v in request.params.items()\
                        if 'ports[]' in k]
                if ids or ips:
                    valid = True

        if not valid:
            session['flash'] = 'No ids were sent'
            session.save()
            if format == 'json':
                return '{"success": false}'
            else:
                return redirect(url(
                        controller='loadbalancer', action='index'))

        lb = LoadBalancer(ip='your_lb_ip')
        if ids:
            data['hosts'] = [ q[0] for q in\
                    Session.query(Node.hostname)\
                .filter(Node.id.in_(ids)).all() ]
            members = [
                ':'.join([Session.query(Node.primary_ip)\
                        .filter(Node.id == id)\
                        .first()[0], ports[i]])\
                    for i,id in enumerate(ids)]
        elif ips:
            data['hosts'] = [q[0] for q in Session.query(Node.hostname)\
                .filter(or_(Node.primary_ip.in_(ips),
                            Node.secondary_ip.in_(ips)))\
                            .all() ]
            members = [
                ':'.join([ip, ports[i]]) for i,ip in enumerate(ips)]

        lb.disable_members(pool, members)
        data['type'] = 'disable'
        data['pool'] = pool
        ae = ActivityEngine(
            Session, session['active_user']['user_id'])

        status = ae.update('loadbalancer', None, data)
        session['flash'] = status
        if format == 'json':
            return '{"success": true}'
        else:
            return redirect(url(
                    controller='loadbalancer', action='index'))
Ejemplo n.º 5
0
 def show(self, pool):
     c.title = 'Nodetraq - Loadbalancer - Show'
     c.selected_page = 'loadbalancer'
     c.subpage = 'show'
     lb = LoadBalancer(ip='your_lb_ip')
     c.members = self.get_members_status(Session, [pool])[0]
     return render('/loadbalancer/show.mako')
Ejemplo n.º 6
0
    def get_members_status(Session, pools):
        lb = LoadBalancer(ip='your_lb_ip')
        pool_members = lb.get_member_status(pools)
        for x,pool in enumerate(pool_members):
            for y,member in enumerate(pool):
                node = Session.query(Node)\
                        .filter(or_(
                            Node.primary_ip == member['member']['address'],
                            Node.secondary_ip == member['member']['address']))\
                                    .first()
                if member.session_state == "STATE_ENABLED":
                    member.session_state = True
                else:
                    member.session_state = False
                pool_members[x][y] = (node, member['member']['port'], member.session_state)

        return zip(pools, pool_members)
Ejemplo n.º 7
0
    def get_members_status(Session, pools):
        lb = LoadBalancer(ip='your_lb_ip')
        pool_members = lb.get_member_status(pools)
        for x, pool in enumerate(pool_members):
            for y, member in enumerate(pool):
                node = Session.query(Node)\
                        .filter(or_(
                            Node.primary_ip == member['member']['address'],
                            Node.secondary_ip == member['member']['address']))\
                                    .first()
                if member.session_state == "STATE_ENABLED":
                    member.session_state = True
                else:
                    member.session_state = False
                pool_members[x][y] = (node, member['member']['port'],
                                      member.session_state)

        return zip(pools, pool_members)
Ejemplo n.º 8
0
    def deletepool(self, format=None):
        if 'pools[]' in request.params:
            pool = [v for k, v in request.params.items() if 'pools[]' in k]
        else:
            return '{"success": false}'

        lb = LoadBalancer(ip='your_lb_ip')
        lb.delete_pool(pool)
        data = {}
        data['pools'] = pool
        ae = ActivityEngine(Session, session['active_user']['user_id'])

        status = ae.destroy('loadbalancer', data)
        session['flash'] = status
        session.save()
        if format == 'json':
            return '{"success": true}'
        else:
            return redirect(url(controller='loadbalancer', action='index'))
Ejemplo n.º 9
0
    def deletepool(self, format=None):
        if 'pools[]' in request.params:
            pool = [v for k,v in request.params.items() if 'pools[]' in k]
        else:
            return '{"success": false}'

        lb = LoadBalancer(ip='your_lb_ip')
        lb.delete_pool(pool)
        data = {}
        data['pools'] = pool
        ae = ActivityEngine(
            Session, session['active_user']['user_id'])

        status = ae.destroy('loadbalancer', data)
        session['flash'] = status
        session.save()
        if format == 'json':
            return '{"success": true}'
        else:
            return redirect(url(
                    controller='loadbalancer', action='index'))
Ejemplo n.º 10
0
    def createpool(self, format=None):
        response.content_type = "application/json"
        has_members = False
        ids = None
        ips = None
        use_primary = True

        if 'pool' in request.params:
            pool = request.params['pool']
        else:
            session['flash'] = 'Pool was not created'
            session.save()
            if format == 'json':
                return '{"success": false}'
            else:
                return redirect(url(controller='loadbalancer', action='index'))

        if 'ids[]' in request.params:
            ids = [v for k, v in request.params.items() if 'ids[]' in k]
            if 'use_secondary' in request.params:
                use_primary = False
        if 'ips[]' in request.params:
            ips = [v for k, v in request.params.items() if 'ips[]' in k]
        if ips or ids:
            if 'port' in request.params:
                port = request.params['port']
                has_members = True
        else:
            ids, ips, port = None, None, None

        lb = LoadBalancer(ip='your_lb_ip')
        mem_seq = lb.b.LocalLB.Pool.typefactory.create(
            'Common.IPPortDefinitionSequence')
        if ids:
            if use_primary:
                mem_seq.item = [lb._member_factory(
                    ':'.join([Session.query(Node.primary_ip)\
                            .filter(Node.id == id)\
                            .first()[0], port])) for id in ids]
            else:
                mem_seq.item = [lb._member_factory(
                    ':'.join([Session.query(Node.secondary_ip)\
                            .filter(Node.id == id)\
                            .first()[0], port])) for id in ids]
        elif ips:
            mem_seq.item = [
                lb._member_factory(':'.join([ip, port])) for ip in ips
            ]

        if not has_members:
            mem_seq = []

        lb.create_pool(pool, mem_seq)
        data = {}
        data['pool'] = pool
        if ids:
            data['hosts'] = [
                Session.query(Node)\
                    .filter(Node.id == id).first()\
                    for id in ids ]
        if ips:
            data['hosts'] = [
                Session.query(Node)\
                    .filter(or_(Node.primary_ip.in_([ips]),
                                Node.secondary_ip.in_([ips])))\
                    .first() for id in ids ]
        ae = ActivityEngine(Session, session['active_user']['user_id'])

        status = ae.create('loadbalancer', data)
        session['flash'] = status
        session.save()
        if format == 'json':
            return '{"success": true}'
        else:
            return redirect(url(controller='loadbalancer', action='index'))
Ejemplo n.º 11
0
    def removehost(self, format=None):
        valid = False
        response.content_type = "application/json"
        ids = []
        ips = []
        data = {}
        ports = []
        if 'ids[]' in request.params:
            ids = [v for k, v in request.params.items() if 'ids[]' in k]
        if 'ips[]' in request.params:
            ips = [v for k, v in request.params.items() if 'ips[]' in k]
        if 'pool' in request.params:
            pool = request.params['pool']
            if 'ports[]' in request.params:
                ports = [v for k,v in request.params.items()\
                        if 'ports[]' in k]
        if ids or ips:
            if ports:
                valid = True

        if not valid:
            session['flash'] = 'No ids were sent'
            session.save()
            if format == 'json':
                return '{"success": false}'
            else:
                return redirect(url(controller='loadbalancer', action='index'))
        lb = LoadBalancer(ip='your_lb_ip')
        members = lb.b.LocalLB.Pool.typefactory.create(
            'Common.IPPortDefinitionSequence')

        if ids:
            data['hosts'] = [
                q[0] for q in\
                    Session.query(Node.hostname)\
                    .filter(Node.id.in_(ids)).all() ]

            members.item = [lb._member_factory(
                ':'.join([Session.query(Node.primary_ip)\
                        .filter(Node.id == id).first()[0],
                        ports[i]])) for i,id in enumerate(ids)]
        if ips:
            data['hosts'] = [ q[0] for q in \
                    Session.query(Node.hostname)\
                    .filter(or_(Node.primary_ip.in_(ips),
                            Node.secondary_ip.in_(ips)))\
                            .all() ]
            members.item = [
                lb._member_factory(':'.join(ip, ports[i]))
                for i, ip in enumerate(ips)
            ]

        lb.remove_members(pool, members)
        data['type'] = 'remove'
        data['pool'] = pool
        ae = ActivityEngine(Session, session['active_user']['user_id'])
        status = ae.update('loadbalancer', None, data)
        session['flash'] = status
        session.save()
        if format == 'json':

            return '{"success": true}'
        else:
            return redirect(url(controller='loadbalancer', action='index'))
Ejemplo n.º 12
0
    def createpool(self, format=None):
        response.content_type = "application/json"
        has_members = False
        ids = None
        ips = None
        use_primary = True

        if 'pool' in request.params:
            pool = request.params['pool']
        else:
            session['flash'] = 'Pool was not created'
            session.save()
            if format == 'json':
                return '{"success": false}'
            else:
                return redirect(url(
                        controller='loadbalancer', action='index'))

        if 'ids[]' in request.params:
            ids = [v for k,v in request.params.items() if 'ids[]' in k]
            if 'use_secondary' in request.params:
                use_primary = False
        if 'ips[]' in request.params:
            ips = [v for k,v in request.params.items() if 'ips[]' in k]
        if ips or ids:
            if 'port' in request.params:
                port = request.params['port']
                has_members = True
        else:
            ids,ips,port = None,None,None

        lb = LoadBalancer(ip='your_lb_ip')
        mem_seq = lb.b.LocalLB.Pool.typefactory.create(
                'Common.IPPortDefinitionSequence')
        if ids:
            if use_primary:
                mem_seq.item = [lb._member_factory(
                    ':'.join([Session.query(Node.primary_ip)\
                            .filter(Node.id == id)\
                            .first()[0], port])) for id in ids]
            else:
                mem_seq.item = [lb._member_factory(
                    ':'.join([Session.query(Node.secondary_ip)\
                            .filter(Node.id == id)\
                            .first()[0], port])) for id in ids]
        elif ips:
            mem_seq.item = [lb._member_factory(
                ':'.join([ip, port])) for ip in ips]

        if not has_members:
            mem_seq = []

        lb.create_pool(pool, mem_seq)
        data = {}
        data['pool'] = pool
        if ids:
            data['hosts'] = [
                Session.query(Node)\
                    .filter(Node.id == id).first()\
                    for id in ids ]
        if ips:
            data['hosts'] = [
                Session.query(Node)\
                    .filter(or_(Node.primary_ip.in_([ips]),
                                Node.secondary_ip.in_([ips])))\
                    .first() for id in ids ]
        ae = ActivityEngine(
            Session, session['active_user']['user_id'])

        status = ae.create('loadbalancer', data)
        session['flash'] = status
        session.save()
        if format == 'json':
            return '{"success": true}'
        else:
            return redirect(url(
                    controller='loadbalancer', action='index'))
Ejemplo n.º 13
0
    def addhost(self, format=None):
        valid = False
        response.content_type = "application/json"
        ids = []
        ips = []
        ports = []
        if 'ids[]' in request.params:
            ids = [v for k,v in request.params.items() if 'ids[]' in k]
        if 'ips[]' in request.params:
            ips = [v for k,v in request.params.items() if 'ips[]' in k]
        if 'pool' in request.params:
            pool = request.params['pool']
            if 'ports[]' in request.params:
                ports = [v for k,v in request.params.items()\
                        if 'ports[]' in k]
        if ids or ips:
            if ports:
                valid = True

        if not valid:
            session['flash'] = 'No ids were sent'
            session.save()
            if format == 'json':
                return '{"success": false}'
            else:
                return redirect(url(
                        controller='loadbalancer', action='index'))

        lb = LoadBalancer(ip='your_lb_ip')
        members = lb.b.LocalLB.Pool.typefactory.create(
                'Common.IPPortDefinitionSequence')

        data = {}
        if ids:
            data['hosts'] = [
                Session.query(Node.hostname)\
                    .filter(Node.id == id)\
                    .first()[0] for id in ids ]
            iplist = [ip[0] for ip in Session.query(Node.primary_ip)\
                .filter(Node.id.in_(ids)).all()]

            members.item = [lb._member_factory(
                ':'.join([ip, ports[i]]))\
                                for i,ip in enumerate(iplist)]
        if ips:
            data['hosts'] = [ q[0] for q in\
                Session.query(Node.hostname)\
                    .filter(or_(Node.primary_ip == ip,
                                Node.secondary_ip == ip))\
                    .all() for ip in ips ]
            members.item = [lb._member_factory(
                ':'.join([ip, port]))\
                                for i,ip in enumerate(ips)]

        lb.add_members(pool, members)
        data['pool'] = pool
        data['type'] = 'add'
        ae = ActivityEngine(
            Session, session['active_user']['user_id'])
        if len(ids) > 2 or len(ips) > 2:
            status = ae.update_many('loadbalancer', data)
        else:
            status = ae.update('loadbalancer', None, data)
        session['flash'] = status
        session.save()
        if format == 'json':
            return '{"success": true}'
        else:
            return redirect(url(
                    controller='loadbalancer', action='index'))
Ejemplo n.º 14
0
 def loadbalancerlist(self):
     lb = LoadBalancer(ip='your_f5_lb')
     c.loadbalancers = lb.get_pools()
     c.loadbalancers.sort()
     return render('/menus/loadbalancer/list.mako')
Ejemplo n.º 15
0
 def loadbalancerlist(self):
     lb = LoadBalancer(ip='your_f5_lb')
     c.loadbalancers = lb.get_pools()
     c.loadbalancers.sort()
     return render('/menus/loadbalancer/list.mako')