fix backup script

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2024-08-02 14:27:40 +05:30
parent 0b9db75c4f
commit 00b22d462b
3 changed files with 20 additions and 14 deletions

View File

@ -134,8 +134,9 @@ public class NASBackupProvider extends AdapterBase implements BackupProvider, Co
throw new CloudRuntimeException("No valid backup repository found for the VM, please check the attached backup offering");
}
final Date creationDate = new Date();
final String backupPath = String.format("%s/%s", vm.getInstanceName(),
new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(new java.util.Date()));
new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(creationDate));
TakeBackupCommand command = new TakeBackupCommand(vm.getInstanceName(), backupPath);
command.setBackupRepoType(backupRepository.getType());
@ -151,12 +152,12 @@ public class NASBackupProvider extends AdapterBase implements BackupProvider, Co
throw new CloudRuntimeException("Operation to initiate backup timed out, please try again");
}
if (answer != null) {
if (answer != null && answer.getResult()) {
BackupVO backup = new BackupVO();
backup.setVmId(vm.getId());
backup.setExternalId(backupPath);
backup.setType("FULL");
backup.setDate(new Date());
backup.setDate(creationDate);
backup.setSize(answer.getSize());
Long virtualSize = 0L;
for (final Volume volume: volumeDao.findByInstance(vm.getId())) {

View File

@ -45,7 +45,7 @@ public class LibvirtTakeBackupCommandWrapper extends CommandWrapper<TakeBackupCo
List<String[]> commands = new ArrayList<>();
commands.add(new String[]{
libvirtComputingResource.getNasBackupPath(),
"-b", "backup",
"-o", "backup",
"-v", vmName,
"-t", backupRepoType,
"-s", backupRepoAddress,
@ -55,11 +55,9 @@ public class LibvirtTakeBackupCommandWrapper extends CommandWrapper<TakeBackupCo
Pair<Integer, String> result = Script.executePipedCommands(commands, libvirtComputingResource.getCmdsTimeout());
logger.debug("VM Backup Result: " + result.second() + ", exit code: " + result.first());
if (result.first() != 0) {
logger.debug("Failed to take VM backup: " + result.second());
return new BackupAnswer(command, false, result.second());
return new BackupAnswer(command, false, result.second().trim());
}
List<String> outputLines = Arrays.asList(result.second().trim().split("\n"));
@ -68,7 +66,7 @@ public class LibvirtTakeBackupCommandWrapper extends CommandWrapper<TakeBackupCo
backupSize = Long.parseLong(outputLines.get(outputLines.size()-1).trim());
}
BackupAnswer answer = new BackupAnswer(command, true, result.second());
BackupAnswer answer = new BackupAnswer(command, true, result.second().trim());
answer.setSize(backupSize);
return answer;
}

View File

@ -43,24 +43,31 @@ backup_vm() {
deviceId=0
name="root"
echo "<domainbackup mode='push'><disks>" > $dest/backup.xml
for disk in $(virsh -c qemu:///system domblklist $vm --details 2>/dev/null | awk '/disk/{print$3}'); do
echo "<disk name='$disk' backup='yes' type='file' backupmode='full'><driver type='qcow2'/><target file='$dest/$deviceId.$name.$disk' /></disk>" >> $dest/backup.xml
for disk in $(virsh -c qemu:///system domblklist $VM --details 2>/dev/null | awk '/disk/{print$3}'); do
volpath=$(virsh -c qemu:///system domblklist $VM --details | awk "/$disk/{print $4}" | sed 's/.*\///')
echo "<disk name='$disk' backup='yes' type='file' backupmode='full'><driver type='qcow2'/><target file='$dest/$deviceId.$name.$volpath.qcow2' /></disk>" >> $dest/backup.xml
deviceId=$((devideId+1))
name="datadisk"
done
echo "</disks></domainbackup>" >> $dest/backup.xml
virsh -c qemu:///system backup-begin --domain $vm --backupxml $dest/backup.xml > /dev/null 2>/dev/null
virsh -c qemu:///system dumpxml $vm > $dest/domain-$vm.xml 2>/dev/null
# Start push backup
virsh -c qemu:///system backup-begin --domain $VM --backupxml $dest/backup.xml > /dev/null 2>/dev/null
until virsh -c qemu:///system domjobinfo $vm --completed --keep-completed 2>/dev/null | grep "Completed" > /dev/null; do
# Backup domain information
virsh -c qemu:///system dumpxml $VM > $dest/domain-config.xml 2>/dev/null
virsh -c qemu:///system dominfo $VM > $dest/dominfo.xml 2>/dev/null
virsh -c qemu:///system domiflist $VM > $dest/domiflist.xml 2>/dev/null
virsh -c qemu:///system domblklist $VM > $dest/domblklist.xml 2>/dev/null
until virsh -c qemu:///system domjobinfo $VM --completed --keep-completed 2>/dev/null | grep "Completed" > /dev/null; do
sleep 5
done
rm -f $dest/backup.xml
sync
# Print statistics
virsh -c qemu:///system domjobinfo $vm --completed
virsh -c qemu:///system domjobinfo $VM --completed
du -sb $dest | cut -f1
umount $mount_point