mirror of https://github.com/apache/cloudstack.git
complete poc
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
parent
97ce34ce2b
commit
0b9db75c4f
|
|
@ -46,6 +46,7 @@ import org.apache.logging.log4j.LogManager;
|
|||
import javax.inject.Inject;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -157,7 +158,13 @@ public class NASBackupProvider extends AdapterBase implements BackupProvider, Co
|
|||
backup.setType("FULL");
|
||||
backup.setDate(new Date());
|
||||
backup.setSize(answer.getSize());
|
||||
backup.setProtectedSize(answer.getVirtualSize());
|
||||
Long virtualSize = 0L;
|
||||
for (final Volume volume: volumeDao.findByInstance(vm.getId())) {
|
||||
if (Volume.State.Ready.equals(volume.getState())) {
|
||||
virtualSize += volume.getSize();
|
||||
}
|
||||
}
|
||||
backup.setProtectedSize(virtualSize);
|
||||
backup.setStatus(Backup.Status.BackedUp);
|
||||
backup.setBackupOfferingId(vm.getBackupOfferingId());
|
||||
backup.setAccountId(vm.getAccountId());
|
||||
|
|
@ -173,6 +180,10 @@ public class NASBackupProvider extends AdapterBase implements BackupProvider, Co
|
|||
public boolean restoreVMFromBackup(VirtualMachine vm, Backup backup) {
|
||||
final Long zoneId = backup.getZoneId();
|
||||
|
||||
List<VolumeVO> volumes = volumeDao.findByInstance(vm.getId());
|
||||
volumes.removeIf(x -> !Volume.State.Ready.equals(x.getState()));
|
||||
volumes.sort(Comparator.comparing(VolumeVO::getDeviceId));
|
||||
|
||||
LOG.debug("Restoring vm " + vm.getUuid() + "from backup " + backup.getUuid() + " on the NAS Backup Provider");
|
||||
|
||||
// Find where the VM was last running
|
||||
|
|
@ -192,6 +203,7 @@ public class NASBackupProvider extends AdapterBase implements BackupProvider, Co
|
|||
final Long zoneId = backup.getZoneId();
|
||||
|
||||
// TODO: Find volume from backup volumes
|
||||
volume.getDeviceId(); // restore by device ID
|
||||
|
||||
VolumeVO restoredVolume = new VolumeVO(Volume.Type.DATADISK, null, backup.getZoneId(),
|
||||
backup.getDomainId(), backup.getAccountId(), 0, null,
|
||||
|
|
|
|||
|
|
@ -28,10 +28,8 @@ import com.cloud.utils.script.Script;
|
|||
import org.apache.cloudstack.backup.BackupAnswer;
|
||||
import org.apache.cloudstack.backup.TakeBackupCommand;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@ResourceWrapper(handles = TakeBackupCommand.class)
|
||||
|
|
@ -64,8 +62,14 @@ public class LibvirtTakeBackupCommandWrapper extends CommandWrapper<TakeBackupCo
|
|||
return new BackupAnswer(command, false, result.second());
|
||||
}
|
||||
|
||||
BackupAnswer answer = new BackupAnswer(command, true, null);
|
||||
answer.setSize(Long.parseLong(result.second().trim()));
|
||||
List<String> outputLines = Arrays.asList(result.second().trim().split("\n"));
|
||||
Long backupSize = 0L;
|
||||
if (outputLines.size() > 0) {
|
||||
backupSize = Long.parseLong(outputLines.get(outputLines.size()-1).trim());
|
||||
}
|
||||
|
||||
BackupAnswer answer = new BackupAnswer(command, true, result.second());
|
||||
answer.setSize(backupSize);
|
||||
return answer;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,23 +40,29 @@ backup_vm() {
|
|||
mount -t ${NAS_TYPE} ${NAS_ADDRESS} ${mount_point} $([[ ! -z "${MOUNT_OPTS}" ]] && echo -o ${MOUNT_OPTS})
|
||||
mkdir -p $dest
|
||||
|
||||
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/$disk' /></disk>" >> $dest/backup.xml
|
||||
echo "<disk name='$disk' backup='yes' type='file' backupmode='full'><driver type='qcow2'/><target file='$dest/$deviceId.$name.$disk' /></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
|
||||
|
||||
until virsh -c qemu:///system domjobinfo $vm --completed 2>/dev/null | grep "Completed" > /dev/null; do
|
||||
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
|
||||
|
||||
# Print directory size
|
||||
sync
|
||||
|
||||
# Print statistics
|
||||
virsh -c qemu:///system domjobinfo $vm --completed
|
||||
du -sb $dest | cut -f1
|
||||
|
||||
umount $mount_point
|
||||
rmdir $mount_point
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue