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