Example #1
0
def get_or_create_healthcheck(user, healthcheck_expect, healthcheck_type, healthcheck_request, healthcheck_destination, identifier=''):
    try:
        # Query HealthCheck table for one equal this
        if identifier == '':
            hc = Healthcheck.objects.get(healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type,
                                         healthcheck_request=healthcheck_request, destination=healthcheck_destination)
        else:
            hc = Healthcheck.objects.get(identifier=identifier, healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type,
                                         healthcheck_request=healthcheck_request, destination=healthcheck_destination)

    # Else, add a new one
    except ObjectDoesNotExist:
        hc = Healthcheck(identifier=identifier, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request,
                         healthcheck_expect=healthcheck_expect, destination=healthcheck_destination)
        hc.save()

    # Get the fisrt occureny and warn if redundant HCs are present
    except MultipleObjectsReturned:
        log.warning(
            "Multiple healthcheck entries found for the given parameters")
        if identifier == '':
            hc = Healthcheck.objects.filter(healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type,
                                            healthcheck_request=healthcheck_request, destination=healthcheck_destination).order_by('id')[0]
        else:
            hc = Healthcheck.objects.filter(identifier=identifier, healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type,
                                            healthcheck_request=healthcheck_request, destination=healthcheck_destination).order_by('id')[0]

    return hc
Example #2
0
def get_or_create_healthcheck(user,
                              healthcheck_expect,
                              healthcheck_type,
                              healthcheck_request,
                              healthcheck_destination,
                              identifier=''):
    try:
        # Query HealthCheck table for one equal this
        if identifier == '':
            hc = Healthcheck.objects.get(
                healthcheck_expect=healthcheck_expect,
                healthcheck_type=healthcheck_type,
                healthcheck_request=healthcheck_request,
                destination=healthcheck_destination)
        else:
            hc = Healthcheck.objects.get(
                identifier=identifier,
                healthcheck_expect=healthcheck_expect,
                healthcheck_type=healthcheck_type,
                healthcheck_request=healthcheck_request,
                destination=healthcheck_destination)

    # Else, add a new one
    except ObjectDoesNotExist:
        hc = Healthcheck(identifier=identifier,
                         healthcheck_type=healthcheck_type,
                         healthcheck_request=healthcheck_request,
                         healthcheck_expect=healthcheck_expect,
                         destination=healthcheck_destination)
        hc.save()

    # Get the fisrt occureny and warn if redundant HCs are present
    except MultipleObjectsReturned:
        log.warning(
            "Multiple healthcheck entries found for the given parameters")
        if identifier == '':
            hc = Healthcheck.objects.filter(
                healthcheck_expect=healthcheck_expect,
                healthcheck_type=healthcheck_type,
                healthcheck_request=healthcheck_request,
                destination=healthcheck_destination).order_by('id')[0]
        else:
            hc = Healthcheck.objects.filter(
                identifier=identifier,
                healthcheck_expect=healthcheck_expect,
                healthcheck_type=healthcheck_type,
                healthcheck_request=healthcheck_request,
                destination=healthcheck_destination).order_by('id')[0]

    return hc
Example #3
0
    def test_task_id_create_in_delete_deploy_one_server_pool_success(
            self, *args):
        """Test success of id task generate for server pool delete deploy success."""

        mock_get_user = args[1]
        mock_get_pool = args[2]
        mock_delete_real_pool = args[3]

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

        divisaodc = DivisaoDc(id=1, nome='test')
        amblog = AmbienteLogico(id=1, nome='test')
        gl3 = GrupoL3(id=1, nome='test')
        ambiente = Ambiente(id=1,
                            grupo_l3=gl3,
                            divisao_dc=divisaodc,
                            ambiente_logico=amblog)

        optionpool = OptionPool(id=1, type='test', name='test')
        healthcheck = Healthcheck(id=1)
        pool = ServerPool(id=1,
                          identifier='test',
                          environment=ambiente,
                          servicedownaction=optionpool,
                          healthcheck=healthcheck)

        pool_serializer = serializers.PoolV3Serializer(pool)

        mock_delete_real_pool.return_value = pool
        mock_get_pool.return_value = pool
        mock_get_user.return_value = user

        undeploy(pool.id, user.id)

        mock_delete_real_pool.assert_called_with([pool_serializer.data], user)
    def test_save_pool_given_(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            (self.create_server_pool_model(), None))
        prepare_to_save_reals_mock = self.mock_prepare_to_save_reals(
            [self.create_real_dict()])
        reals_can_associate_server_pool_mock = self.mock_reals_can_associate_server_pool(
            None)
        save_server_pool_member_mock = self.mock_save_server_pool_member(
            [self.create_pool_member()])

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(201, response.status_code)
        self.assertEquals('pool_1', response.data.get(
            'server_pool').get('identifier'))
        self.assertEquals(8080, response.data.get(
            'server_pool').get('default_port'))
        self.assertEquals(1, len(response.data.get('server_pool_members')))
        self.assertTrue(save_pool_mock.called)
        self.assertTrue(prepare_to_save_reals_mock.called)
        self.assertTrue(reals_can_associate_server_pool_mock.called)
        self.assertTrue(save_server_pool_member_mock.called)
Example #5
0
def insert(request):

    try:
        # TODO: ADD VALIDATION

        healthcheck_type = request.DATA.get('healthcheck_type')
        healthcheck_request = request.DATA.get('healthcheck_request')
        healthcheck_expect = request.DATA.get('healthcheck_expect')
        old_healthcheck_id = request.DATA.get('old_healthcheck_id')

        try:
            # Query HealthCheck table for one equal this
            hc_check = Healthcheck.objects.get(
                healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request)

            # If a HealthCheck like this already exists, return it
            hc_serializer = HealthcheckSerializer(hc_check, many=False)

        # Else, add a new one
        except ObjectDoesNotExist:

            hc = Healthcheck(
                identifier='',
                healthcheck_type=healthcheck_type,
                healthcheck_request=healthcheck_request,
                healthcheck_expect=healthcheck_expect,
                destination=''
            )

            hc.save(request.user)

            # Check if someone is using the old healthcheck
            # If not, delete it to keep the database clean
            if old_healthcheck_id is not None:
                pools_using_healthcheck = ServerPool.objects.filter(
                    healthcheck=old_healthcheck_id).count()

                if pools_using_healthcheck == 0:
                    Healthcheck.objects.filter(id=old_healthcheck_id).delete()

            hc_serializer = HealthcheckSerializer(hc, many=False)

        return Response(hc_serializer.data)

    except Exception, exception:
        log.error(exception)
        raise api_exceptions.NetworkAPIException()
Example #6
0
def insert(request):

    try:
        # TODO: ADD VALIDATION

        healthcheck_type = request.DATA.get('healthcheck_type')
        healthcheck_request = request.DATA.get('healthcheck_request')
        healthcheck_expect = request.DATA.get('healthcheck_expect')
        old_healthcheck_id = request.DATA.get('old_healthcheck_id')

        try:
            #Query HealthCheck table for one equal this
            hc_check = Healthcheck.objects.get(healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request)

            #If a HealthCheck like this already exists, return it
            hc_serializer = HealthcheckSerializer(hc_check, many=False)

        #Else, add a new one
        except ObjectDoesNotExist:

            hc = Healthcheck(
                identifier='',
                healthcheck_type=healthcheck_type,
                healthcheck_request=healthcheck_request,
                healthcheck_expect=healthcheck_expect,
                destination=''
            )

            hc.save(request.user)

            #Check if someone is using the old healthcheck
            #If not, delete it to keep the database clean
            if old_healthcheck_id is not None:
                pools_using_healthcheck = ServerPool.objects.filter(healthcheck=old_healthcheck_id).count()

                if pools_using_healthcheck == 0:
                    Healthcheck.objects.filter(id=old_healthcheck_id).delete()

            hc_serializer = HealthcheckSerializer(hc, many=False)

        return Response(hc_serializer.data)

    except Exception, exception:
        log.error(exception)
        raise api_exceptions.NetworkAPIException()
def _get_healthcheck(healthcheck_obj):
    """Get or creates a healthcheck"""

    healthcheck = {
        'identifier': healthcheck_obj['identifier'],
        'healthcheck_expect': healthcheck_obj['healthcheck_expect'],
        'healthcheck_type': healthcheck_obj['healthcheck_type'],
        'healthcheck_request': healthcheck_obj['healthcheck_request'],
        'destination': healthcheck_obj['destination']
    }

    try:
        hc = Healthcheck.objects.get(**healthcheck)
    except ObjectDoesNotExist:
        hc = Healthcheck(**healthcheck)
        hc.save()

    return hc
Example #8
0
 def create_health_check(self,
                         id=0,
                         expect='WORKING',
                         type='HTTP',
                         req='/healthcheck',
                         dest='*:*',
                         ident='1'):
     return Healthcheck(id=id,
                        healthcheck_expect=expect,
                        healthcheck_type=type,
                        healthcheck_request=req,
                        destination=dest,
                        identifier=ident)
    def test_save_pool_given_fail_on_change_pool_limits(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            ScriptAlterLimitPoolDiffMembersException())

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(400, response.status_code)
        self.assertEquals('Failed to change limits for pool. Members limit differs from pool default limit     Set all members with the same default limit before changing default pool limit.', response.data.get('detail'))
        self.assertTrue(save_pool_mock.called)
    def test_save_pool_given_fail_on_create_service_down_action(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            ScriptAlterServiceDownActionException())

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(400, response.status_code)
        self.assertEquals(
            'Failed to execute service-down-action script for pool.', response.data.get('detail'))
        self.assertTrue(save_pool_mock.called)
    def test_save_pool_given_pool_associated_with_one_or_more_pool_members(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            UpdateEnvironmentServerPoolMemberException())

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(400, response.status_code)
        self.assertEquals(
            'Ambiente nao pode ser alterado pois o server pool esta associado com um ou mais server pool member.', response.data.get('detail'))
        self.assertTrue(save_pool_mock.called)
    def test_save_pool_given_pool_already_created_on_equipment(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            UpdateEnvironmentPoolCreatedException())

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(400, response.status_code)
        self.assertEquals(
            'Ambiente nao pode ser alterado pois o server pool ja esta criado no equipamento.', response.data.get('detail'))
        self.assertTrue(save_pool_mock.called)
    def test_save_pool_given_pool_already_having_an_identifier_saved(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            CreatedPoolIdentifierException())

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(400, response.status_code)
        self.assertEquals(
            'Pool already created. Cannot change Identifier.', response.data.get('detail'))
        self.assertTrue(save_pool_mock.called)
    def test_save_pool_given_invalid_real_data(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            (self.create_server_pool_model(), None))
        prepare_to_save_reals_mock = self.mock_prepare_to_save_reals(
            InvalidRealPoolException())

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(400, response.status_code)
        self.assertEquals('Parametros invalidos do real.',
                          response.data.get('detail'))
        self.assertTrue(save_pool_mock.called)
        self.assertTrue(prepare_to_save_reals_mock.called)
Example #15
0
    def test_update_pool_fields(self):
        pool = ServerPool()
        default_port = 8080
        env = Ambiente(id=1)
        identifier = 'pool_1'
        old_healthcheck = Healthcheck()
        old_lb_method = 'round-robin'
        old_maxconn = 50

        save_pool_mock = self.mock_save_pool()
        update_pool_fields(default_port, env, identifier, old_healthcheck,
                           old_lb_method, old_maxconn, pool, self.user)

        save_pool_mock.assert_calls(call(), call())
        self.assertEquals(default_port, pool.default_port)
        self.assertEquals(env, pool.environment)
        self.assertEquals(identifier, pool.identifier)
        self.assertEquals(old_healthcheck, pool.healthcheck)
        self.assertEquals(old_lb_method, pool.lb_method)
    def test_save_pool_given_environment_not_linked_to_vip_environment(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            (self.create_server_pool_model(), None))
        prepare_to_save_reals_mock = self.mock_prepare_to_save_reals(
            [self.create_real_dict()])
        reals_can_associate_server_pool_mock = self.mock_reals_can_associate_server_pool(
            EnvironmentEnvironmentVipNotBoundedException())

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(400, response.status_code)
        self.assertEquals(
            'There is no link between environment and environment vip.', response.data.get('detail'))
        self.assertTrue(save_pool_mock.called)
        self.assertTrue(prepare_to_save_reals_mock.called)
        self.assertTrue(reals_can_associate_server_pool_mock.called)
    def test_save_pool_given_script_error_change_pool_priority(self):
        self.mock_get_service_down_action_by_environment(
            OptionPool(name='none'))
        self.mock_filter_server_pool_by_identifier(None)
        self.mock_get_or_create_healthcheck(Healthcheck())
        save_pool_mock = self.mock_save_server_pool(
            (self.create_server_pool_model(), None))
        prepare_to_save_reals_mock = self.mock_prepare_to_save_reals(
            [self.create_real_dict()])
        reals_can_associate_server_pool_mock = self.mock_reals_can_associate_server_pool(
            None)
        save_server_pool_member_mock = self.mock_save_server_pool_member(
            ScriptAlterPriorityPoolMembersException())

        response = self.client.post(
            '/api/pools/save/', self.load_pool_json('pool.json'), format='json')
        self.assertEquals(400, response.status_code)
        self.assertEquals(
            'Failed to execute priority script for pool.', response.data.get('detail'))
        self.assertTrue(save_pool_mock.called)
        self.assertTrue(prepare_to_save_reals_mock.called)
        self.assertTrue(reals_can_associate_server_pool_mock.called)
        self.assertTrue(save_server_pool_member_mock.called)