def download_from_sftp(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = AgentRsp() install_abs_path = translate_absolute_path_from_install_path( cmd.primaryStorageInstallPath) size = linux.sftp_get(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, install_abs_path, cmd.username, cmd.sshPort, True) if not lvm.lv_exists(install_abs_path): lvm.create_lv_from_absolute_path( install_abs_path, size, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(install_abs_path, shared=False, delete_when_exception=True): linux.scp_download(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, install_abs_path, cmd.username, cmd.sshPort) logger.debug('successfully download %s/%s to %s' % (cmd.hostname, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath)) self.do_active_lv(cmd.primaryStorageInstallPath, cmd.lockType, False) rsp.totalCapacity, rsp.availableCapacity = lvm.get_vg_size(cmd.vgUuid) return jsonobject.dumps(rsp)
def download_from_sftp(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = DownloadBitsFromSftpBackupStorageRsp() sub_vol_dir = os.path.dirname(cmd.primaryStorageInstallPath) if not os.path.exists(sub_vol_dir): parent_dir = os.path.dirname(sub_vol_dir) shell.call('mkdir -p %s' % parent_dir) shell.call('btrfs subvolume create %s' % sub_vol_dir) linux.scp_download(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath) def get_image_format(): out = shell.call('qemu-img info %s' % cmd.primaryStorageInstallPath) for l in out.split('\n'): if 'file format' in l: _, f = l.split(':') return f.strip() raise Exception('cannot get image format of %s, qemu-img info outputs:\n%s\n' % (cmd.primaryStorageInstallPath, out)) f = get_image_format() if 'qcow2' in f: shell.call('/usr/bin/qemu-img convert -f qcow2 -O raw %s %s.img' % (cmd.primaryStorageInstallPath, cmd.primaryStorageInstallPath)) shell.call('mv %s.img %s' % (cmd.primaryStorageInstallPath, cmd.primaryStorageInstallPath)) elif 'raw' in f: pass else: raise Exception('unsupported image format[%s] of %s' % (f, cmd.primaryStorageInstallPath)) rsp.totalCapacity, rsp.availableCapacity = self._get_disk_capacity() logger.debug('downloaded %s:%s to %s' % (cmd.hostname, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath)) return jsonobject.dumps(rsp)
def do_download_from_sftp(self, cmd): linux.scp_download(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath, cmd.username, cmd.sshPort, cmd.bandWidth) logger.debug('successfully download %s/%s to %s' % (cmd.hostname, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath))
def download_from_sftp(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = AgentRsp() linux.scp_download(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath, cmd.username, cmd.sshPort) rsp.totalCapacity, rsp.availableCapacity = self._get_disk_capacity(cmd.mountPoint) logger.debug('successfully download %s/%s to %s' % (cmd.hostname, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath)) return jsonobject.dumps(rsp)
def do_download_from_sftp(self, cmd, install_abs_path): if not lvm.lv_exists(install_abs_path): size = linux.sftp_get(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, install_abs_path, cmd.username, cmd.sshPort, True) lvm.create_lv_from_absolute_path(install_abs_path, size, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(install_abs_path, shared=False, delete_when_exception=True): linux.scp_download(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, install_abs_path, cmd.username, cmd.sshPort, cmd.bandWidth) logger.debug('successfully download %s/%s to %s' % (cmd.hostname, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath)) self.do_active_lv(cmd.primaryStorageInstallPath, cmd.lockType, False)
def download_from_kvmhost(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = DownloadBitsFromKvmHostRsp() install_abs_path = cmd.primaryStorageInstallPath last_task = self.load_and_save_task(req, rsp, os.path.exists, install_abs_path) if last_task and last_task.agent_pid == os.getpid(): rsp = self.wait_task_complete(last_task) return jsonobject.dumps(rsp) linux.scp_download(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, install_abs_path, cmd.username, cmd.sshPort, cmd.bandWidth) rsp.format = linux.get_img_fmt(install_abs_path) return jsonobject.dumps(rsp)
def download_from_sftp(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = AgentResponse() try: linux.scp_download(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath) logger.debug('successfully download %s/%s to %s' % (cmd.hostname, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath)) except Exception as e: content = traceback.format_exc() logger.warn(content) err = "unable to download %s/%s, because %s" % (cmd.hostname, cmd.backupStorageInstallPath, str(e)) rsp.error = err rsp.success = False return jsonobject.dumps(rsp)
def download_from_sftp(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) self.check_nfs_mounted(self.mount_path.get(cmd.uuid)) rsp = DownloadBitsFromSftpBackupStorageResponse() try: linux.scp_download(cmd.hostname, cmd.sshKey, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath, cmd.username, cmd.sshPort) logger.debug('successfully download %s/%s to %s' % (cmd.hostname, cmd.backupStorageInstallPath, cmd.primaryStorageInstallPath)) self._set_capacity_to_response(cmd.uuid, rsp) except Exception as e: content = traceback.format_exc() logger.warn(content) err = "unable to download %s/%s, because %s" % (cmd.hostname, cmd.backupStorageInstallPath, str(e)) rsp.error = err rsp.success = False return jsonobject.dumps(rsp)