def start_check_cluster_health(cluster_id, send_report_url,
                               user=None, session=None, check_health={}):
    """Start to check cluster health."""
    cluster = cluster_api.get_cluster_internal(cluster_id, session=session)

    if cluster.state.state != 'SUCCESSFUL':
        logging.debug("state is %s" % cluster.state.state)
        err_msg = "Healthcheck starts only after cluster finished deployment!"
        raise exception.Forbidden(err_msg)

    reports = utils.list_db_objects(
        session, models.HealthCheckReport,
        cluster_id=cluster.id, state='verifying'
    )
    if reports:
        err_msg = 'Healthcheck in progress, please wait for it to complete!'
        raise exception.Forbidden(err_msg)

    # Clear all preivous report
    # TODO(grace): the delete should be moved into celery task.
    # We should consider the case that celery task is down.
    utils.del_db_objects(
        session, models.HealthCheckReport, cluster_id=cluster.id
    )

    from compass.tasks import client as celery_client
    celery_client.celery.send_task(
        'compass.tasks.cluster_health',
        (cluster.id, send_report_url, user.email)
    )
    return {
        "cluster_id": cluster.id,
        "status": "start to check cluster health."
    }
def start_check_cluster_health(user, cluster_id, send_report_url,
                               session=None, check_health={}):
    """Start to check cluster health."""
    cluster_state = utils.get_db_object(
        session, models.Cluster, True, id=cluster_id
    ).state_dict()

    if cluster_state['state'] != 'SUCCESSFUL':
        logging.debug("state is %s" % cluster_state['state'])
        err_msg = "Healthcheck starts only after cluster finished deployment!"
        raise exception.Forbidden(err_msg)

    reports = utils.list_db_objects(
        session, models.HealthCheckReport,
        cluster_id=cluster_id, state='verifying'
    )
    if reports:
        err_msg = 'Healthcheck in progress, please wait for it to complete!'
        raise exception.Forbidden(err_msg)

    # Clear all preivous report
    utils.del_db_objects(
        session, models.HealthCheckReport, cluster_id=cluster_id
    )

    from compass.tasks import client as celery_client
    celery_client.celery.send_task(
        'compass.tasks.cluster_health',
        (cluster_id, send_report_url, user.email)
    )
    return {
        "cluster_id": cluster_id,
        "status": "start to check cluster health."
    }
Exemple #3
0
def _set_user_permissions(user, session=None, **permission_filters):
    """set permissions to a user."""
    utils.del_db_objects(
        session, models.UserPermission,
        user_id=user.id
    )
    _add_user_permissions(session, user, **permission_filters)
Exemple #4
0
def _remove_clusterhosts(session, cluster, hosts):
    with session.begin(subtransactions=True):
        for host_id in hosts:
            utils.del_db_objects(
                session, models.ClusterHost,
                cluster_id=cluster.id, host_id=machine_id
            )
def start_check_cluster_health(cluster_id,
                               send_report_url,
                               user=None,
                               session=None,
                               check_health={}):
    """Start to check cluster health."""
    cluster = cluster_api.get_cluster_internal(cluster_id, session=session)

    if cluster.state.state != 'SUCCESSFUL':
        logging.debug("state is %s" % cluster.state.state)
        err_msg = "Healthcheck starts only after cluster finished deployment!"
        raise exception.Forbidden(err_msg)

    reports = utils.list_db_objects(session,
                                    models.HealthCheckReport,
                                    cluster_id=cluster.id,
                                    state='verifying')
    if reports:
        err_msg = 'Healthcheck in progress, please wait for it to complete!'
        raise exception.Forbidden(err_msg)

    # Clear all preivous report
    # TODO(grace): the delete should be moved into celery task.
    # We should consider the case that celery task is down.
    utils.del_db_objects(session,
                         models.HealthCheckReport,
                         cluster_id=cluster.id)

    from compass.tasks import client as celery_client
    celery_client.celery.send_task('compass.tasks.cluster_health',
                                   (cluster.id, send_report_url, user.email))
    return {
        "cluster_id": cluster.id,
        "status": "start to check cluster health."
    }
Exemple #6
0
 def test_del_single_object(self):
     with database.session() as session:
         utils.del_db_objects(session,
                              models.Permission,
                              name='list_permissions')
         query_deleted = utils.list_db_objects(session,
                                               models.Permission,
                                               name='list_permissions')
         self.assertListEqual([], query_deleted)
Exemple #7
0
def _set_machines(session, switch, machines):
    utils.del_db_objects(
        session, models.SwitchMachine,
        switch_id=switch.id
    )
    for switch_machine in machines:
        _update_machine_internal(
            session, switch.id, **switch_machine
        )
Exemple #8
0
def _set_clusterhosts(session, cluster, machines):
    with session.begin(subtransactions=True):
        utils.del_db_objects(
            session, models.ClusterHost,
            cluster_id=cluster.id
        )
        for machine_id in machines:
            utils.add_db_object(
                session, models.ClusterHost,
                True, cluster.id, machine_id
            )
Exemple #9
0
def _remove_user_permissions(user, session=None, **permission_filters):
    """remove permissions from a user."""
    from compass.db.api import permission as permission_api
    permission_ids = [
        api_permission['id'] for api_permission in
        permission_api.list_permissions(session=session, **permission_filters)
    ]
    utils.del_db_objects(session,
                         models.UserPermission,
                         user_id=user.id,
                         permission_id=permission_ids)
Exemple #10
0
 def test_del_all_objects(self):
     with database.session() as session:
         utils.del_db_objects(
             session,
             models.Permission
         )
         remained = utils.list_db_objects(
             session,
             models.Permission
         )
         self.assertListEqual([], remained)
Exemple #11
0
def _remove_machines(switch, machines, session=None):
    """Remove machines from switch.

    Args:
        machines: list of machine id.

    machines example:
        [1,2]
    """
    utils.del_db_objects(
        session, models.SwitchMachine,
        switch_id=switch.id, machine_id=machines
    )
Exemple #12
0
def _remove_user_permissions(user, session=None, **permission_filters):
    """remove permissions from a user."""
    from compass.db.api import permission as permission_api
    permission_ids = [
        api_permission['id']
        for api_permission in permission_api.list_permissions(
            session=session, **permission_filters
        )
    ]
    utils.del_db_objects(
        session, models.UserPermission,
        user_id=user.id, permission_id=permission_ids
    )
Exemple #13
0
def _remove_machines(switch, machines, session=None):
    """Remove machines from switch.

    Args:
        machines: list of machine id.

    machines example:
        [1,2]
    """
    utils.del_db_objects(session,
                         models.SwitchMachine,
                         switch_id=switch.id,
                         machine_id=machines)
Exemple #14
0
 def test_del_single_object(self):
     with database.session() as session:
         utils.del_db_objects(
             session,
             models.Permission,
             name='list_permissions'
         )
         query_deleted = utils.list_db_objects(
             session,
             models.Permission,
             name='list_permissions'
         )
         self.assertListEqual([], query_deleted)
Exemple #15
0
def _set_machines(switch, machines, session=None):
    """Reset machines to a switch.

    Args:
       machines: list of dict which contains attributes to
                 add machine to switch.

    machines example:
       {{'machine_id': 1, 'port': 'ae20'}]
    """
    utils.del_db_objects(session, models.SwitchMachine, switch_id=switch.id)
    for switch_machine in machines:
        _add_machine_to_switch(switch.id, session=session, **switch_machine)
Exemple #16
0
def _remove_user_permissions(session, user, **permission_filters):
    """remove permissions to a user."""
    from compass.db.api import permission as permission_api
    permission_ids = [
        api_permission.id
        for api_permission in permission_api.list_permissions_internal(
            session, **permission_filters
        )
    ]
    utils.del_db_objects(
        session, models.UserPermission,
        user_id=user.id, permission_id=permission_ids
    )
Exemple #17
0
def _set_machines(switch, machines, session=None):
    """Reset machines to a switch.

    Args:
       machines: list of dict which contains attributes to
                 add machine to switch.

    machines example:
       {{'machine_id': 1, 'port': 'ae20'}]
    """
    utils.del_db_objects(
        session, models.SwitchMachine,
        switch_id=switch.id
    )
    for switch_machine in machines:
        _add_machine_to_switch(
            switch.id, session=session, **switch_machine
        )
def delete_reports(user, cluster_id, name=None, session=None):
    if not name:
        report = utils.get_db_object(
            session, models.HealthCheckReport, cluster_id=cluster_id, name=name
        )
        return utils.del_db_object(session, report)

    return utils.del_db_objects(
        session, models.HealthCheckReport, cluster_id=cluster_id
    )
def delete_reports(cluster_id, name=None, user=None, session=None):
    # TODO(grace): better to separate this function into two.
    # One is to delete a report of a cluster, the other to delete all
    # reports under a cluster.
    if name:
        report = _get_report(cluster_id, name, session=session)
        return utils.del_db_object(session, report)
    else:
        cluster = cluster_api.get_cluster_internal(cluster_id, session=session)
        return utils.del_db_objects(session,
                                    models.HealthCheckReport,
                                    cluster_id=cluster.id)
def delete_reports(cluster_id, name=None, user=None, session=None):
    # TODO(grace): better to separate this function into two.
    # One is to delete a report of a cluster, the other to delete all
    # reports under a cluster.
    if name:
        report = _get_report(cluster_id, name, session=session)
        return utils.del_db_object(session, report)
    else:
        cluster = cluster_api.get_cluster_internal(
            cluster_id, session=session
        )
        return utils.del_db_objects(
            session, models.HealthCheckReport, cluster_id=cluster.id
        )
Exemple #21
0
def del_user_actions(deleter, user_id, **filters):
    """delete user actions."""
    with database.session() as session:
        user = user_api.get_user_internal(session, id=user_id)
        if not deleter.is_admin and deleter_id != user_id:
            # The user is not allowed to delete users actions.
            raise Forbidden(
                'User %s has no permission to delete user %s actions.' % (
                    deleter.email, user.email
                )
            )

        user_actions = []
        for action in utils.del_db_objects(
                session, models.UserLog, user_id=user_id, **filters
        ):
            action_dict = action.to_dict()
            del action_dict['user_id']
            user_actions.append(action_dict)

        return {'user_id': user_id, 'logs': user_actions}
Exemple #22
0
def del_actions(deleter, **filters):
    """delete actions."""
    with database.session() as session:
        if not deleter.is_admin:
            # The user is not allowed to delete users actions.
            raise Forbidden(
                'User %s has no permission to delete all users actions.' % (
                    deleter.email, user.email
                )
            )

        actions = {}
        for action in utils.del_db_objects(
            session, models.UserLog, **filters
        ):
            action_dict = action.to_dict()
            user_id = action_dict['user_id']
            del action_dict['user_id']
            actions.setdefault(user_id, []).append(action_dict)

        return [
            {'user_id': user_id, 'logs': user_actions}
            for user_id, user_action in actions.items()
        ]
Exemple #23
0
def _set_user_permissions(user, session=None, **permission_filters):
    """set permissions to a user."""
    utils.del_db_objects(session, models.UserPermission, user_id=user.id)
    _add_user_permissions(session, user, **permission_filters)
Exemple #24
0
def clean_user_token(token, user=None, session=None):
    """clean user token in database."""
    return utils.del_db_objects(
        session, models.UserToken,
        token=token, user_id=user.id
    )
Exemple #25
0
def del_actions(user=None, session=None, **filters):
    """delete actions of all users."""
    return utils.del_db_objects(
        session, models.UserLog, **filters
    )
Exemple #26
0
def del_actions(session, deleter, **filters):
    """delete actions."""
    return utils.del_db_objects(
        session, models.UserLog, **filters
    )
Exemple #27
0
 def test_del_all_objects(self):
     with database.session() as session:
         utils.del_db_objects(session, models.Permission)
         remained = utils.list_db_objects(session, models.Permission)
         self.assertListEqual([], remained)
Exemple #28
0
def _remove_machines(session, switch, machines):
    utils.del_db_objects(
        session, models.SwitchMachine,
        switch_id=switch.id, machine_id=machines
    )
Exemple #29
0
def del_user_actions(session, deleter, user_id, **filters):
    """delete user actions."""
    return utils.del_db_objects(
        session, models.UserLog, user_id=user_id, **filters
    )
Exemple #30
0
def clean_user_token(token, user=None, session=None):
    """clean user token in database."""
    return utils.del_db_objects(session,
                                models.UserToken,
                                token=token,
                                user_id=user.id)
Exemple #31
0
def del_user_actions(user_id, user=None, session=None, **filters):
    """delete actions of a user."""
    del_user = user_api.get_user(user_id, user=user, session=session)
    return utils.del_db_objects(
        session, models.UserLog, user_id=del_user['id'], **filters
    )