Пример #1
0
def create_vip_request(vip_request, user):
    """Create Vip Request."""

    try:
        vip = VipRequest()
        vip.create_v3(vip_request, user)
    except ValidationAPIException, e:
        raise ValidationAPIException(str(e))
Пример #2
0
def create_vip_request(vip_request, user):
    """Create Vip Request."""

    try:
        vip = VipRequest()
        vip.create_v3(vip_request, user)
    except ValidationAPIException, e:
        raise ValidationAPIException(str(e))
Пример #3
0
def patch_real_vip_request(vip_requests, user):

    load_balance = dict()
    keys = list()
    for vip in vip_requests:

        vip_old = VipRequest.get_by_pk(vip.get('id'))
        serializer_vips = vip_slz.VipRequestV3Serializer(
            vip_old,
            many=False,
            include=('ports__identifier',)
        )

        vip_dict = serializer_vips.data

        # validate and save
        vip_dict['options']['persistence'] = vip['options']['persistence']

        update_vip_request(vip_dict, user, permit_created=True)

        load_balance = prepare_apply(
            load_balance, vip_dict, created=True, user=user)

        keys.append(sorted([str(key) for key in load_balance.keys()]))

    # vips are in differents load balancers
    keys = [','.join(key) for key in keys]
    if len(list(set(keys))) > 1:
        raise Exception('Vips Request are in differents load balancers')

    for lb in load_balance:
        inst = copy.deepcopy(load_balance.get(lb))
        log.info('started call:%s' % lb)
        inst.get('plugin').partial_update_vip(inst)
        log.info('ended call')
Пример #4
0
def patch_real_vip_request(vip_requests, user):

    load_balance = dict()
    keys = list()
    for vip in vip_requests:

        vip_old = VipRequest.get_by_pk(vip.get('id'))
        serializer_vips = vip_slz.VipRequestV3Serializer(
            vip_old, many=False, include=('ports__identifier', ))

        vip_dict = serializer_vips.data

        # validate and save
        vip_dict['options']['persistence'] = vip['options']['persistence']

        update_vip_request(vip_dict, user, permit_created=True)

        load_balance = prepare_apply(load_balance,
                                     vip_dict,
                                     created=True,
                                     user=user)

        keys.append(sorted([str(key) for key in load_balance.keys()]))

    # vips are in differents load balancers
    keys = [','.join(key) for key in keys]
    if len(list(set(keys))) > 1:
        raise Exception('Vips Request are in differents load balancers')

    for lb in load_balance:
        inst = copy.deepcopy(load_balance.get(lb))
        log.info('started call:%s' % lb)
        inst.get('plugin').partial_update_vip(inst)
        log.info('ended call')
    def test_task_id_create_in_put_deploy_one_vip_request_success(self, *args):
        """Test success of id task generate for vip request put deploy success."""

        mock_get_user = args[1]
        mock_get_vip = args[2]
        mock_update_real_vip = args[3]

        user = Usuario(id=1, nome='test')

        vip = VipRequest(id=1)

        mock_update_real_vip.return_value = vip
        mock_get_vip.return_value = vip
        mock_get_user.return_value = user

        redeploy({'id': vip.id}, user.id)

        mock_update_real_vip.assert_called_with([{'id': vip.id}], user)
    def test_task_id_create_in_delete_deploy_one_vip_request_success(self, *args):
        """Test success of id task generate for vip request delete deploy success."""
        mock_get_user = args[1]
        mock_get_vip = args[2]
        mock_delete_real_vip = args[3]

        user = Usuario(id=1, nome='test')

        vip = VipRequest(id=1)
        vip_serializer = VipRequestV3Serializer(
            vip, include=('ports__identifier',))

        mock_delete_real_vip.return_value = vip
        mock_get_vip.return_value = vip
        mock_get_user.return_value = user

        undeploy(vip.id, user.id)

        mock_delete_real_vip.assert_called_with(
            [vip_serializer.data], user)
Пример #7
0
def update_real_vip_request(vip_requests, user):

    load_balance = dict()
    keys = list()
    for vip in vip_requests:

        # old VIP
        vip_old = VipRequest.get_by_pk(vip.get('id'))
        serializer_vips = vip_slz.VipRequestV3Serializer(
            vip_old,
            many=False,
            include=('ports__identifier',)
        )
        slz_vips_old = copy.deepcopy(serializer_vips.data)

        # Save
        update_vip_request(vip, user, permit_created=True)

        # new VIP
        vip_new = VipRequest.get_by_pk(vip.get('id'))
        serializer_vips = vip_slz.VipRequestV3Serializer(
            vip_new,
            many=False,
            include=('ports__identifier',)
        )
        vip_request = copy.deepcopy(serializer_vips.data)

        # Ids of ports of old vip
        ids_port_old = [port.get('id')
                        for port in slz_vips_old.get('ports')]

        # Ids of ports of new vip
        ids_port_upt = [port.get('id')
                        for port in vip_request.get('ports')]

        # Ids of ports to delete
        ids_port_to_del = list(set(ids_port_old) - set(ids_port_upt))

        # Ports to change or insert
        for idx_port, port in enumerate(vip_request.get('ports')):

            # Port changed
            if port.get('id') in ids_port_old:

                # Get old port
                idx_old_port = ids_port_old.index(port.get('id'))
                old_port = slz_vips_old.get('ports')[idx_old_port]

                # Ids of old pools
                ids_old_pool = [pool.get('id')
                                for pool in old_port.get('pools')]

                # Ids of new pools
                ids_upt_pool = [pool.get('id') for pool in port.get('pools')]

                # Ids of pools to delete
                ids_pool_to_del = list(set(ids_old_pool) - set(ids_upt_pool))

                # Ids of pools to insert
                ids_pool_to_ins = list(set(ids_upt_pool) - set(ids_old_pool))

                # Ids of pools with same ids
                ids_pool_equal = list(set(ids_upt_pool) & set(ids_old_pool))

                # Pools to insert in port
                for id_pool in ids_pool_to_ins:
                    idx_pool = ids_upt_pool.index(id_pool)
                    vip_request['ports'][idx_port][
                        'pools'][idx_pool]['insert'] = True

                # Pools to delete in port
                for id_pool in ids_pool_to_del:

                    # Indexs pool to delete
                    idx_pool_del = ids_old_pool.index(id_pool)

                    # Pool to delete
                    pool_del = copy\
                        .deepcopy(old_port.get('pools')[idx_pool_del])
                    pool_del['delete'] = True

                    # Addes pool in list pools of port
                    vip_request['ports'][idx_port]['pools'].append(pool_del)

                # pools to delete in port when id of internal controle was not
                # changed.
                # Example: OLD - Id: 1, Server_pool: 12, ..
                #          NEW - Id: 1, Server_pool: 13, ..
                for id_pool in ids_pool_equal:

                    idx_pool_old = ids_old_pool.index(id_pool)
                    idx_pool_cur = ids_upt_pool.index(id_pool)

                    # server_pool was changed
                    if old_port.get('pools')[idx_pool_old]['server_pool'] != \
                            port.get('pools')[idx_pool_cur]['server_pool']:
                        # pool to delete
                        pool_del = copy\
                            .deepcopy(old_port.get('pools')[idx_pool_old])
                        pool_del['delete'] = True
                        vip_request['ports'][idx_port]['pools']\
                            .append(pool_del)

            # New port
            else:
                vip_request['ports'][idx_port]['insert'] = True

        # Ports to delete
        for id_port in ids_port_to_del:
            # idx pool to delete
            idx_port_del = ids_port_old.index(id_port)

            # Port to delete
            port_del = copy.deepcopy(slz_vips_old.get('ports')[idx_port_del])
            port_del['delete'] = True
            vip_request['ports'].append(port_del)

        load_balance = prepare_apply(load_balance, vip_request,
                                     created=True, user=user)

        keys.append(sorted([str(key) for key in load_balance.keys()]))

    # vips are in differents load balancers
    keys = [','.join(key) for key in keys]
    if len(list(set(keys))) > 1:
        raise Exception('Vips Request are in differents load balancers')

    pools_ids_ins = list()
    pools_ids_del = list()

    for lb in load_balance:
        inst = copy.deepcopy(load_balance.get(lb))
        log.info('started call:%s' % lb)
        pool_ins, pool_del = inst.get('plugin').update_vip(inst)
        log.info('ended call')
        pools_ids_ins += pool_ins
        pools_ids_del += pool_del

    if pools_ids_ins:
        pools_ids_ins = list(set(pools_ids_ins))
        ServerPool.objects.filter(
            id__in=pools_ids_ins).update(pool_created=True)

    if pools_ids_del:
        pools_ids_del = list(set(pools_ids_del))
        ServerPool.objects.filter(
            id__in=pools_ids_del).update(pool_created=False)
Пример #8
0
def update_real_vip_request(vip_requests, user):

    load_balance = dict()
    keys = list()
    for vip in vip_requests:

        # old VIP
        vip_old = VipRequest.get_by_pk(vip.get('id'))
        serializer_vips = vip_slz.VipRequestV3Serializer(
            vip_old, many=False, include=('ports__identifier', ))
        slz_vips_old = copy.deepcopy(serializer_vips.data)

        # Save
        update_vip_request(vip, user, permit_created=True)

        # new VIP
        vip_new = VipRequest.get_by_pk(vip.get('id'))
        serializer_vips = vip_slz.VipRequestV3Serializer(
            vip_new, many=False, include=('ports__identifier', ))
        vip_request = copy.deepcopy(serializer_vips.data)

        # Ids of ports of old vip
        ids_port_old = [port.get('id') for port in slz_vips_old.get('ports')]

        # Ids of ports of new vip
        ids_port_upt = [port.get('id') for port in vip_request.get('ports')]

        # Ids of ports to delete
        ids_port_to_del = list(set(ids_port_old) - set(ids_port_upt))

        # Ports to change or insert
        for idx_port, port in enumerate(vip_request.get('ports')):

            # Port changed
            if port.get('id') in ids_port_old:

                # Get old port
                idx_old_port = ids_port_old.index(port.get('id'))
                old_port = slz_vips_old.get('ports')[idx_old_port]

                # Ids of old pools
                ids_old_pool = [
                    pool.get('id') for pool in old_port.get('pools')
                ]

                # Ids of new pools
                ids_upt_pool = [pool.get('id') for pool in port.get('pools')]

                # Ids of pools to delete
                ids_pool_to_del = list(set(ids_old_pool) - set(ids_upt_pool))

                # Ids of pools to insert
                ids_pool_to_ins = list(set(ids_upt_pool) - set(ids_old_pool))

                # Ids of pools with same ids
                ids_pool_equal = list(set(ids_upt_pool) & set(ids_old_pool))

                # Pools to insert in port
                for id_pool in ids_pool_to_ins:
                    idx_pool = ids_upt_pool.index(id_pool)
                    vip_request['ports'][idx_port]['pools'][idx_pool][
                        'insert'] = True

                # Pools to delete in port
                for id_pool in ids_pool_to_del:

                    # Indexs pool to delete
                    idx_pool_del = ids_old_pool.index(id_pool)

                    # Pool to delete
                    pool_del = copy\
                        .deepcopy(old_port.get('pools')[idx_pool_del])
                    pool_del['delete'] = True

                    # Addes pool in list pools of port
                    vip_request['ports'][idx_port]['pools'].append(pool_del)

                # pools to delete in port when id of internal controle was not
                # changed.
                # Example: OLD - Id: 1, Server_pool: 12, ..
                #          NEW - Id: 1, Server_pool: 13, ..
                for id_pool in ids_pool_equal:

                    idx_pool_old = ids_old_pool.index(id_pool)
                    idx_pool_cur = ids_upt_pool.index(id_pool)

                    # server_pool was changed
                    if old_port.get('pools')[idx_pool_old]['server_pool'] != \
                            port.get('pools')[idx_pool_cur]['server_pool']:
                        # pool to delete
                        pool_del = copy\
                            .deepcopy(old_port.get('pools')[idx_pool_old])
                        pool_del['delete'] = True
                        vip_request['ports'][idx_port]['pools']\
                            .append(pool_del)

            # New port
            else:
                vip_request['ports'][idx_port]['insert'] = True

        # Ports to delete
        for id_port in ids_port_to_del:
            # idx pool to delete
            idx_port_del = ids_port_old.index(id_port)

            # Port to delete
            port_del = copy.deepcopy(slz_vips_old.get('ports')[idx_port_del])
            port_del['delete'] = True
            vip_request['ports'].append(port_del)

        load_balance = prepare_apply(load_balance,
                                     vip_request,
                                     created=True,
                                     user=user)

        keys.append(sorted([str(key) for key in load_balance.keys()]))

    # vips are in differents load balancers
    keys = [','.join(key) for key in keys]
    if len(list(set(keys))) > 1:
        raise Exception('Vips Request are in differents load balancers')

    pools_ids_ins = list()
    pools_ids_del = list()

    for lb in load_balance:
        inst = copy.deepcopy(load_balance.get(lb))
        log.info('started call:%s' % lb)
        pool_ins, pool_del = inst.get('plugin').update_vip(inst)
        log.info('ended call')
        pools_ids_ins += pool_ins
        pools_ids_del += pool_del

    if pools_ids_ins:
        pools_ids_ins = list(set(pools_ids_ins))
        ServerPool.objects.filter(id__in=pools_ids_ins).update(
            pool_created=True)

    if pools_ids_del:
        pools_ids_del = list(set(pools_ids_del))
        ServerPool.objects.filter(id__in=pools_ids_del).update(
            pool_created=False)
Пример #9
0
def old_to_new(vip_request):

    from networkapi.ambiente.models import EnvironmentVip
    from networkapi.api_vip_request.models import VipRequest, VipRequestDSCP, VipRequestOptionVip, \
        VipRequestPort, VipRequestPortOptionVip, VipRequestPortPool
    from networkapi.requisicaovips.models import DsrL3_to_Vip, OptionVip, OptionVipEnvironmentVip, \
        VipPortToPool

    mp = vip_request.variables_to_map()
    try:

        try:
            ev = EnvironmentVip().get_by_values(
                mp['finalidade'], mp['cliente'], mp['ambiente'])
        except:
            ev = EnvironmentVip()
            ev.finalidade_txt = mp['finalidade']
            ev.cliente_txt = mp['cliente']
            ev.ambiente_p44_txt = mp['ambiente']
            ev.description = '%s - %s - %s' % (
                mp['finalidade'], mp['cliente'], mp['ambiente'])
            ev.save()
        finally:

            vp = VipRequest()
            vp.environmentvip = ev
            vp.id = vip_request.id
            vp.name = mp['host'] if mp.get('host') else None
            vp.business = mp['areanegocio'] if mp.get(
                'areanegocio') else vp.name
            vp.service = mp['nome_servico'] if mp.get(
                'nome_servico') else vp.name
            vp.ipv4 = vip_request.ip if vip_request.ip else None
            vp.ipv6 = vip_request.ipv6 if vip_request.ipv6 else None
            vp.created = vip_request.vip_criado
            vp.save()

            if mp.get('persistencia'):
                persistencia = mp['persistencia']
            else:
                persistencia = '(nenhum)'

            try:
                op_per = OptionVip.objects.filter(
                    tipo_opcao=u'Persistencia',
                    nome_opcao_txt=persistencia)[0]
                try:
                    opv = OptionVipEnvironmentVip.objects.get(
                        option=op_per,
                        environment=ev)
                except:
                    opv = OptionVipEnvironmentVip()
                    opv.option = op_per
                    opv.environment = ev
                    opv.save()
            except:
                op_per = OptionVip()
                op_per.tipo_opcao = u'Persistencia'
                op_per.nome_opcao_txt = persistencia
                op_per.save()
                opv = OptionVipEnvironmentVip()
                opv.option = op_per
                opv.environment = ev
                opv.save()
            finally:
                try:
                    vro = VipRequestOptionVip.objects.get(
                        optionvip=op_per,
                        vip_request=vp)
                except:
                    vro = VipRequestOptionVip()
                    vro.optionvip = op_per
                    vro.vip_request = vp
                    vro.save()

            if mp.get('timeout'):
                timeout = mp['timeout']
            else:
                timeout = '5'

            try:
                op_time = OptionVip.objects.filter(
                    tipo_opcao=u'timeout',
                    nome_opcao_txt=timeout)[0]
                try:
                    opv = OptionVipEnvironmentVip.objects.get(
                        option=op_time,
                        environment=ev)
                except:
                    opv = OptionVipEnvironmentVip()
                    opv.option = op_time
                    opv.environment = ev
                    opv.save()
            except:
                op_time = OptionVip()
                op_time.tipo_opcao = u'timeout'
                op_time.nome_opcao_txt = timeout
                op_time.save()
                opv = OptionVipEnvironmentVip()
                opv.option = op_time
                opv.environment = ev
                opv.save()
            finally:
                try:
                    vro = VipRequestOptionVip.objects.get(
                        optionvip=op_time,
                        vip_request=vp)
                except:
                    vro = VipRequestOptionVip()
                    vro.optionvip = op_time
                    vro.vip_request = vp
                    vro.save()

            if mp.get('trafficreturn'):
                trafficreturn = mp['trafficreturn']
            else:
                trafficreturn = 12

            try:
                op_traffic = OptionVip.objects.filter(
                    tipo_opcao=u'Retorno de trafego',
                    id=trafficreturn)[0]
                try:
                    opv = OptionVipEnvironmentVip.objects.get(
                        option=op_traffic,
                        environment=ev)
                except:
                    opv = OptionVipEnvironmentVip()
                    opv.option = op_traffic
                    opv.environment = ev
                    opv.save()
            except:
                op_traffic = OptionVip()
                op_traffic.tipo_opcao = u'Retorno de trafego'
                op_traffic.nome_opcao_txt = trafficreturn
                op_traffic.save()
                opv = OptionVipEnvironmentVip()
                opv.option = op_traffic
                opv.environment = ev
                opv.save()
            finally:
                try:
                    vro = VipRequestOptionVip.objects.get(
                        optionvip=op_traffic,
                        vip_request=vp)
                except:
                    vro = VipRequestOptionVip()
                    vro.optionvip = op_traffic
                    vro.vip_request = vp
                    vro.save()

            if int(trafficreturn) == 48:
                dsrl3 = DsrL3_to_Vip.get_by_vip_id(vip_request.id)

                try:
                    vp_dsrl3 = VipRequestDSCP.objects.get(vip_request=vp)
                except:
                    vp_dsrl3 = VipRequestDSCP()
                    vp_dsrl3.vip_request = vp

                vp_dsrl3.dscp = dsrl3.id_dsrl3
                vp_dsrl3.save()
            else:
                try:
                    vp_dsrl3 = VipRequestDSCP.objects.get(vip_request=vp)
                    vp_dsrl3.delete()
                except:
                    pass

            if mp.get('cache'):
                cache = mp['cache']
            else:
                cache = '(nenhum)'

            try:
                op_cache = OptionVip.objects.filter(
                    tipo_opcao=u'cache',
                    nome_opcao_txt=cache)[0]
                try:
                    opv = OptionVipEnvironmentVip.objects.get(
                        option=op_cache,
                        environment=ev)
                except:
                    opv = OptionVipEnvironmentVip()
                    opv.option = op_cache
                    opv.environment = ev
                    opv.save()
            except:
                op_cache = OptionVip()
                op_cache.tipo_opcao = u'cache'
                op_cache.nome_opcao_txt = cache
                op_cache.save()
                opv = OptionVipEnvironmentVip()
                opv.option = op_cache
                opv.environment = ev
                opv.save()
            finally:

                try:
                    vro = VipRequestOptionVip.objects.get(
                        optionvip=op_cache,
                        vip_request=vp)
                except:
                    vro = VipRequestOptionVip()
                    vro.optionvip = op_cache
                    vro.vip_request = vp
                    vro.save()

            # delete optionvip(op_cache, op_traffic, op_time, op_per)
            # in port removed in old table
            VipRequestOptionVip.objects.filter(
                vip_request=vp
            ).exclude(
                optionvip__id__in=[op_cache.id, op_traffic.id,
                                   op_time.id, op_per.id]
            ).delete()

            pools = VipPortToPool.get_by_vip_id(vip_request.id)
            # delete old ports
            ports_current = VipRequestPort.objects.filter(vip_request=vp)
            ports_ids = [port.id for port in ports_current]
            pools_ids = [pl.id for pl in pools]
            ids_to_del = list(set(ports_ids) - set(pools_ids))
            ports_current.filter(id__in=ids_to_del).delete()

            # delete pools removed in old table
            # ptid = [ptid.server_pool.id for ptid in pools]
            # VipRequestPortPool.objects.filter(
            #     vip_request_port=vrp
            # ).exclude(
            #     server_pool__id__in=ptid
            # ).delete()

            for pool in pools:

                # saving ports of vip

                vrp = VipRequestPort()
                vrp.id = pool.id
                vrp.vip_request = vp
                vrp.port = pool.port_vip

                if not pool.identifier:
                    from networkapi.api_equipment import facade as facade_eqpt
                    from networkapi.plugins.factory import PluginFactory

                    eqpts = facade_eqpt.get_eqpt_by_envvip(ev.id)
                    if eqpts:
                        plugin = PluginFactory.factory(eqpts[0])
                        vrp.identifier = plugin.get_name_eqpt(
                            vp, pool.port_vip)
                        pool.identifier = vrp.identifier
                        pool.save()

                vrp.save()

                # descobre protocolo l7 e l4
                tipo_opcao = 'l7_rule'
                nome_opcao_txt = 'default_vip'
                l4_protocol = 'TCP'
                l7_protocol = 'Outros'
                if mp.get('healthcheck_type') == 'HTTP':
                    tipo_opcao = 'l7_rule'
                    nome_opcao_txt = 'default_vip'
                    l4_protocol = 'TCP'
                    l7_protocol = 'HTTP'

                if mp.get('healthcheck_type') == 'TCP':
                    l4_protocol = 'TCP'
                    l7_protocol = 'Outros'

                if mp.get('healthcheck_type') == 'UDP':
                    l4_protocol = 'UDP'
                    l7_protocol = 'Outros'

                if pool.port_vip == 20 or pool.port_vip == 21:
                    l4_protocol = 'TCP'
                    l7_protocol = 'FTP'

                if pool.port_vip == 443:
                    l4_protocol = 'TCP'
                    l7_protocol = 'HTTPS'

                # l4_protocol
                try:
                    op_l4 = OptionVip.objects.filter(
                        tipo_opcao='l4_protocol', nome_opcao_txt=l4_protocol)[0]
                    try:
                        opv = OptionVipEnvironmentVip.objects.get(
                            option=op_l4, environment=ev)
                    except:
                        opv = OptionVipEnvironmentVip()
                        opv.option = op_l4
                        opv.environment = ev
                        opv.save()
                except:
                    op_l4 = OptionVip()
                    op_l4.tipo_opcao = u'l4_protocol'
                    op_l4.nome_opcao_txt = l4_protocol
                    op_l4.save()
                    opv = OptionVipEnvironmentVip()
                    opv.option = op_l4
                    opv.environment = ev
                    opv.save()
                finally:
                    try:
                        vro = VipRequestPortOptionVip.objects.filter(
                            optionvip=op_l4, vip_request_port=vrp)[0]
                    except:
                        vro = VipRequestPortOptionVip()
                        vro.optionvip = op_l4
                        vro.vip_request_port = vrp
                        vro.save()

                # l7_protocol
                try:
                    op_l7 = OptionVip.objects.filter(
                        tipo_opcao='l7_protocol', nome_opcao_txt=l7_protocol)[0]
                    try:
                        opv = OptionVipEnvironmentVip.objects.get(
                            option=op_l7, environment=ev)
                    except:
                        opv = OptionVipEnvironmentVip()
                        opv.option = op_l7
                        opv.environment = ev
                        opv.save()
                except:
                    op_l7 = OptionVip()
                    op_l7.tipo_opcao = u'l7_protocol'
                    op_l7.nome_opcao_txt = l7_protocol
                    op_l7.save()
                    opv = OptionVipEnvironmentVip()
                    opv.option = op_l7
                    opv.environment = ev
                    opv.save()
                finally:
                    try:
                        vro = VipRequestPortOptionVip.objects.filter(
                            optionvip=op_l7, vip_request_port=vrp)[0]
                    except:
                        vro = VipRequestPortOptionVip()
                        vro.optionvip = op_l7
                        vro.vip_request_port = vrp
                        vro.save()

                # delete optionvip(l7 and l4) in port removed in old table
                VipRequestPortOptionVip.objects.filter(
                    vip_request_port=vrp
                ).exclude(
                    optionvip__id__in=[op_l7.id, op_l4.id]
                ).delete()

                # saving pools of port
                try:
                    op_pt = OptionVip.objects.filter(
                        tipo_opcao=tipo_opcao,
                        nome_opcao_txt=nome_opcao_txt)[0]
                    try:
                        opv = OptionVipEnvironmentVip.objects.get(
                            option=op_pt,
                            environment=ev)
                    except:
                        opv = OptionVipEnvironmentVip()
                        opv.option = op_pt
                        opv.environment = ev
                        opv.save()
                except:
                    op_pt = OptionVip()
                    op_pt.tipo_opcao = tipo_opcao
                    op_pt.nome_opcao_txt = nome_opcao_txt
                    op_pt.save()
                    opv = OptionVipEnvironmentVip()
                    opv.option = op_pt
                    opv.environment = ev
                    opv.save()
                finally:
                    try:
                        vrpp = VipRequestPortPool.objects.filter(
                            server_pool=pool.server_pool, vip_request_port=vrp)[0]
                    except:
                        vrpp = VipRequestPortPool()
                        vrpp.server_pool = pool.server_pool
                        vrpp.vip_request_port = vrp
                        vrpp.optionvip = op_pt
                        vrpp.save()

    except Exception, e:
        log.error(e)
        raise e