def planejar_sincronizacao(servidor_acesso, arquivo_inventario, ocultar_progresso): configurar_vmm(servidor_acesso, ocultar_progresso) inventario_local = obter_inventario_local( servidor_acesso, arquivo_inventario, ocultar_progresso) adquirir_lock(servidor_acesso, inventario_local.agrupamento, inventario_local.nuvem, ocultar_progresso) conteudo_arquivo = None plano_execucao = obter_plano_execucao( servidor_acesso, inventario_local, ocultar_progresso) if not plano_execucao.is_vazio(): imprimir_acao_corrente( f'Gerando arquivo {PlanoExecucao.ARQUIVO_PLANO_EXECUCAO}', ocultar_progresso) status, conteudo_arquivo = plano_execucao.gerar_arquivo() validar_retorno_operacao_sem_lock( status, conteudo_arquivo, ocultar_progresso) liberar_lock(servidor_acesso, inventario_local.agrupamento, inventario_local.nuvem, ocultar_progresso) if conteudo_arquivo: print(f'\nAlterações a serem realizadas:\n{conteudo_arquivo}') else: PlanoExecucao.excluir_arquivo() print( '\nNenhuma diferença encontrada entre o inventário local e o remoto.')
def validar_conexao(servidor_acesso, ocultar_progresso): imprimir_acao_corrente('Validando conexão com o VMM', ocultar_progresso) cmd = Comando('testar_conexao', servidor_vmm=servidor_acesso.servidor_vmm) status, msg = cmd.executar(servidor_acesso) if status and not 'True' in msg: status = False validar_retorno_operacao_sem_lock(status, msg, ocultar_progresso)
def configurar_vmm(servidor_acesso, ocultar_progresso): imprimir_acao_corrente('Configurando VMM', ocultar_progresso) cmd = Comando('configurar_vmm', servidor_vmm=servidor_acesso.servidor_vmm, campos_customizados=[CAMPO_AGRUPAMENTO, CAMPO_ID, CAMPO_IMAGEM, CAMPO_REGIAO, CAMPO_REDE_PRINCIPAL]) status, msg = cmd.executar(servidor_acesso) validar_retorno_operacao_sem_lock(status, msg, ocultar_progresso)
def executar_sincronizacao(servidor_acesso, arquivo_plano_execucao, pular_confirmacao, arquivo_inventario, ocultar_progresso): configurar_vmm(servidor_acesso, ocultar_progresso) # Obtendo plano de execução # # Caso de ter informado o plano de execução adquiriu_lock = False if arquivo_plano_execucao or os.path.isfile(PlanoExecucao.ARQUIVO_PLANO_EXECUCAO): imprimir_acao_corrente( 'Carregando plano de execução', ocultar_progresso) status, plano_execucao = PlanoExecucao.carregar_plano_execucao( arquivo_plano_execucao or PlanoExecucao.ARQUIVO_PLANO_EXECUCAO) validar_retorno_operacao_sem_lock( status, plano_execucao, ocultar_progresso) # Caso de ter informado o arquivo de inventário elif arquivo_inventario: print('AVISO: plano de execução será calculado à partir do inventário.', flush=True) inventario_local = obter_inventario_local( servidor_acesso, arquivo_inventario, ocultar_progresso) adquirir_lock(servidor_acesso, inventario_local.agrupamento, inventario_local.nuvem, ocultar_progresso) adquiriu_lock = True plano_execucao = obter_plano_execucao( servidor_acesso, inventario_local, ocultar_progresso) # Se não informou nem o plano nem o inventário, então informar erro else: finalizar_com_erro( 'É necessário informar o plano de execução ou o arquivo de inventário.') if not adquiriu_lock: adquirir_lock(servidor_acesso, plano_execucao.agrupamento, plano_execucao.nuvem, ocultar_progresso) if plano_execucao.is_vazio(): liberar_lock(servidor_acesso, plano_execucao.agrupamento, plano_execucao.nuvem, ocultar_progresso) print( '\nPlano de execução vazio: nada a alterar.') else: # Exibindo confirmação if not pular_confirmacao: print('\nAs seguintes operações serão executadas:') plano_execucao.imprimir_acoes() confirmar_acao_usuario_com_lock( servidor_acesso, plano_execucao.agrupamento, plano_execucao.nuvem) plano_execucao.executar(servidor_acesso, ocultar_progresso) liberar_lock(servidor_acesso, plano_execucao.agrupamento, plano_execucao.nuvem, ocultar_progresso) plano_execucao.imprimir_resultado_execucao()
def listar_opcoes(servidor_acesso, ocultar_progresso): imprimir_acao_corrente('Listando opções', ocultar_progresso) cmd = Comando('listar_opcoes', servidor_vmm=servidor_acesso.servidor_vmm) status, opcoes = cmd.executar(servidor_acesso) validar_retorno_operacao_sem_lock(status, opcoes, ocultar_progresso) regioes = re.search(r'regioes: ([0-9]{1,})', opcoes).group(1) str_regioes = '\n'.join(string.ascii_uppercase[0:int(regioes)]) opcoes = opcoes.replace(f'regioes: {regioes}', str_regioes) print('\n' + opcoes)
def obter_inventario_local(servidor_acesso, arquivo_inventario, ocultar_progresso, filtro_nome_vm=None, filtro_dados_completos=True): imprimir_acao_corrente('Obtendo inventário local', ocultar_progresso) parser_local = ParserLocal(arquivo_inventario) status, inventario_local = parser_local.get_inventario( servidor_acesso, filtro_nome_vm, filtro_dados_completos) validar_retorno_operacao_sem_lock( status, inventario_local, ocultar_progresso) return inventario_local
def imprimir_json_inventario(servidor_acesso, arquivo_inventario, nome_vm, dados_completos, ocultar_progresso): configurar_vmm(servidor_acesso, ocultar_progresso) inventario_local = obter_inventario_local( servidor_acesso, arquivo_inventario, ocultar_progresso, filtro_nome_vm=nome_vm, filtro_dados_completos=dados_completos) adquirir_lock(servidor_acesso, inventario_local.agrupamento, inventario_local.nuvem, ocultar_progresso) inventario_remoto = obter_inventario_remoto( servidor_acesso, inventario_local.agrupamento, inventario_local.nuvem, ocultar_progresso, filtro_nome_vm=nome_vm, filtro_dados_completos=dados_completos) liberar_lock(servidor_acesso, inventario_local.agrupamento, inventario_local.nuvem, ocultar_progresso) imprimir_acao_corrente('Gerando JSON', ocultar_progresso) status, json_inventario = Inventario.get_json( inventario_local, inventario_remoto, dados_completos) validar_retorno_operacao_sem_lock( status, json_inventario, ocultar_progresso) print(json_inventario)