Exemple #1
0
def upgrade_agents(agent_list=None, wpk_repo=None, version=None, force=False, use_http=False,
                   file_path=None, installer=None):
    """Start the agent upgrade process.

    Parameters
    ----------
    agent_list : list
        List of agents ID's.
    wpk_repo : str
        URL for WPK download.
    version : str
        Version to upgrade to.
    force : bool
        force the update even if it is a downgrade.
    use_http : bool
        False for HTTPS protocol, True for HTTP protocol.
    file_path : str
        Path to the installation file.
    installer : str
        Selected installer.

    Returns
    -------
    ID of created tasks
    """
    result = AffectedItemsWazuhResult(all_msg='All upgrade tasks were created',
                                      some_msg='Some upgrade tasks were not created',
                                      none_msg='No upgrade task was created',
                                      sort_fields=['agent'], sort_ascending='True')

    agent_list = list(map(int, agents_padding(result=result, agent_list=agent_list)))
    if version and not version.startswith('v'):
        version = f'v{version}'

    agents_result_chunks = [agent_list[x:x + 100] for x in range(0, len(agent_list), 100)]

    agent_results = list()
    for agents_chunk in agents_result_chunks:
        agent_results.append(
            core_upgrade_agents(command='upgrade' if not (installer or file_path) else 'upgrade_custom',
                                agents_chunk=agents_chunk, wpk_repo=wpk_repo, version=version, force=force,
                                use_http=use_http, file_path=file_path, installer=installer))

    for agent_result_chunk in agent_results:
        for agent_result in agent_result_chunk['data']:
            if agent_result['error'] == 0:
                task_agent = {
                    'agent': str(agent_result['agent']).zfill(3),
                    'task_id': agent_result['task_id']
                }
                result.affected_items.append(task_agent)
                result.total_affected_items += 1
            else:
                error = WazuhError(code=1810 + agent_result['error'], cmd_error=True,
                                   extra_message=agent_result['message'])
                result.add_failed_item(id_=str(agent_result['agent']).zfill(3), error=error)
    result.affected_items = sorted(result.affected_items, key=lambda k: k['agent'])

    return result
Exemple #2
0
def get_upgrade_result(agent_list=None):
    """Read upgrade result output from agent.

    Parameters
    ----------
    agent_list : list
        List of agent ID's.

    Returns
    -------
    Upgrade result.
    """
    result = AffectedItemsWazuhResult(
        all_msg='All upgrade tasks were returned',
        some_msg='Some upgrade tasks were not returned',
        none_msg='No upgrade task was returned')

    agent_list = list(
        map(int, agents_padding(result=result, agent_list=agent_list)))
    agents_result_chunks = [
        agent_list[x:x + 100] for x in range(0, len(agent_list), 100)
    ]

    task_results = list()
    for agents_chunk in agents_result_chunks:
        task_results.append(
            core_upgrade_agents(agents_chunk=agents_chunk, get_result=True))

    for task_result_chunk in task_results:
        for task_result in task_result_chunk['data']:
            task_error = task_result.pop('error')
            if task_error == 0:
                task_result['agent'] = str(task_result['agent']).zfill(3)
                result.affected_items.append(task_result)
                result.total_affected_items += 1
            else:
                error = WazuhError(code=1810 + task_error,
                                   cmd_error=True,
                                   extra_message=task_result['message'])
                result.add_failed_item(id_=str(
                    task_result.pop('agent')).zfill(3),
                                       error=error)
    result.affected_items = sorted(result.affected_items,
                                   key=lambda k: k['agent'])

    return result