コード例 #1
0
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.')
コード例 #2
0
    def get_plano_execucao_alterar_discos(inventario, discos_alterados,
                                          tipo_alteracao):
        plano_execucao = PlanoExecucao(inventario.agrupamento,
                                       inventario.nuvem)

        for nome_vm in discos_alterados:
            for disco in discos_alterados[nome_vm].values():
                if (tipo_alteracao in [
                        TestComparacaoInvDisco.TP_ALTERACAO_TP_BUS,
                        TestComparacaoInvDisco.TP_ALTERACAO_REDUCAO
                ]):
                    plano_execucao.acoes.append(
                        disco.get_acao_excluir_disco(
                            inventario.vms[nome_vm].id_vmm))
                    plano_execucao.acoes.append(
                        disco.get_acao_criar_disco(nome_vm))
                elif tipo_alteracao == TestComparacaoInvDisco.TP_ALTERACAO_EXPANSAO:
                    plano_execucao.acoes.append(
                        disco.get_acao_expandir_disco(
                            inventario.vms[nome_vm].id_vmm,
                            disco.get_id_drive()))
                elif tipo_alteracao == TestComparacaoInvDisco.TP_ALTERACAO_CAMINHO:
                    plano_execucao.acoes.append(
                        disco.get_acao_mover_disco(
                            inventario.vms[nome_vm].id_vmm,
                            disco.get_id_disco()))
                elif tipo_alteracao == TestComparacaoInvDisco.TP_ALTERACAO_TP_TAMANHO:
                    plano_execucao.acoes.append(
                        disco.get_acao_converter_disco(
                            inventario.vms[nome_vm].id_vmm,
                            disco.get_id_drive()))

        return plano_execucao
コード例 #3
0
    def gerar_plano_exclusao(self):
        plano_execucao = PlanoExecucao(self.agrupamento, self.nuvem)

        for maquina_virtual in self.vms.values():
            plano_execucao.acoes.append(maquina_virtual.get_acao_excluir_vm())

        return plano_execucao
コード例 #4
0
    def get_plano_execucao_atualizar_vm(inventario):
        plano_execucao = PlanoExecucao(
            inventario.agrupamento, inventario.nuvem)

        for nome_vm in inventario.vms:
            plano_execucao.acoes.append(
                inventario.vms[nome_vm].get_acao_atualizar_vm(inventario.vms[nome_vm].id_vmm))

        return plano_execucao
コード例 #5
0
    def get_plano_execucao_excluir_inventario(inventario):
        plano_execucao = PlanoExecucao(
            inventario.agrupamento, inventario.nuvem)

        for nome_vm in inventario.vms:
            plano_execucao.acoes.append(
                inventario.vms[nome_vm].get_acao_excluir_vm())

        return plano_execucao
コード例 #6
0
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()
コード例 #7
0
    def get_plano_execucao_criar_discos(inventario, discos_removidos):
        plano_execucao = PlanoExecucao(inventario.agrupamento,
                                       inventario.nuvem)

        for nome_vm in discos_removidos:
            for disco in discos_removidos[nome_vm].values():
                plano_execucao.acoes.append(
                    disco.get_acao_criar_disco(nome_vm))

        return plano_execucao
コード例 #8
0
    def get_plano_execucao_mover_vms_regiao(inventario):
        plano_execucao = PlanoExecucao(inventario.agrupamento,
                                       inventario.nuvem)

        for vm_obj in inventario.vms.values():
            plano_execucao.acoes.append(
                vm_obj.get_acao_mover_vm_regiao(
                    inventario.get_id_no_regiao(vm_obj.regiao)))

        return plano_execucao
コード例 #9
0
    def calcular_plano_execucao(self, inventario_remoto):
        if (self.agrupamento != inventario_remoto.agrupamento
                or self.nuvem != inventario_remoto.nuvem):
            return False, 'Não é possível calcular o plano de execução \
                para inventários de agrupamento ou nuvem distintos.'

        plano_execucao = PlanoExecucao(self.agrupamento, self.nuvem)

        self.__add_acoes_criar_vms(inventario_remoto, plano_execucao)
        self.__add_acoes_execucao_excluir_vms(inventario_remoto,
                                              plano_execucao)

        self.__add_acoes_diferenca_vm(inventario_remoto, plano_execucao)
        self.__add_acoes_diferenca_discos_adicionais(inventario_remoto,
                                                     plano_execucao)
        self.__add_acoes_diferenca_regiao(inventario_remoto, plano_execucao)

        return True, plano_execucao
コード例 #10
0
    def get_plano_execucao_criar_inventario(inventario):
        plano_execucao = PlanoExecucao(
            inventario.agrupamento, inventario.nuvem)

        for nome_vm in inventario.vms:
            plano_execucao.acoes.append(
                inventario.vms[nome_vm].get_acao_criar_vm())

        for nome_vm in inventario.vms:
            for disco_adicional in inventario.vms[nome_vm].discos_adicionais:
                plano_execucao.acoes.append(
                    inventario.vms[nome_vm]
                    .discos_adicionais[disco_adicional]
                    .get_acao_criar_disco(nome_vm))

        for nome_vm in inventario.vms:
            plano_execucao.acoes.append(
                inventario.vms[nome_vm].get_acao_mover_vm_regiao(
                    inventario.get_id_no_regiao(inventario.vms[nome_vm].regiao)))

        return plano_execucao