#!/usr/bin/python # coding: utf-8 import commands, time, os ####################################################################### # Script que realiza bakcups de MVs nun Repositorio de alamacenamento # ####################################################################### ###################################################################### #################################### # Directorio onde se van realizar as copias das MVs: as exportacións # Cambiar en función do punto de montaxe # Usar o comando mount para ver a identificacion do punto de montaxe # onde se vai realizar a copia. # O script vai cambiar de directorio para excutar dende aí o proceso # de copia da MV (exportación) #################################### ###################################################################### directory = "/var/run/sr-mount/037eac02-ddd8-be5d-4179-a08cad518f23" os.chdir(directory) ###################################################################### #################################### # Función que devolve un array co par (uuid e nome) das MVs que non son # dom0 nin un snapshot #################################### ###################################################################### def get_backup_vms(): result = [] cmd = "xe vm-list is-control-domain=false is-a-snapshot=false" # Se se quere facer Backup dunha sóa MV descomentar a seguinte liña e configurala #cmd = "xe vm-list name-label=Nome da MV" output = commands.getoutput(cmd) for vm in output.split("\n\n\n"): lines = vm.splitlines() uuid = lines[0].split(":")[1][1:] name = lines[1].split(":")[1][1:] result += [(uuid, name)] return result ###################################################################### #################################### # Función que é chamada dende o seguinte bucle e # recibe: # o uuid de cada MV # un nome de ficheiro co que se vai crear o snapshot e o ficheiro a exportar. # Crea, exporta e elimina o snapshot. #################################### ###################################################################### def backup_vm(uuid, filename): cmd = "xe vm-snapshot uuid=" + uuid + " new-name-label=" + filename snapshot_uuid = commands.getoutput(cmd) cmd = "xe template-param-set is-a-template=false ha-always-run=false uuid=" + snapshot_uuid commands.getoutput(cmd) cmd = "xe vm-export vm=" + snapshot_uuid + " filename=" + filename + ".xva" commands.getoutput(cmd) cmd = "xe vm-uninstall uuid=" + snapshot_uuid + " force=true" commands.getoutput(cmd) ###################################################################### #################################### # Bucle que procesa tódolos pares (uuid, nome) das MVs # Chama á 1ª función get_backup_vms() para obter eses pares (uuid, nome) das MVs do host # Crea o nome do ficheiro (filename) baseado na data-hora e o nome da MV # Chama á 2ª función (backup_vm) para realizar o backup de cada MV. #################################### ###################################################################### for (uuid, name) in get_backup_vms(): timestamp = time.strftime("%Y%m%d-%H%M", time.gmtime()) print timestamp, uuid, name filename = "\"" + timestamp + " " + name +"\"" backup_vm(uuid, filename)