예제 #1
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'))
예제 #2
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'))
예제 #3
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'))
예제 #4
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'))