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
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