def revert_volume_from_snapshot(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = RevertVolumeFromSnapshotRsp() snapshot_abs_path = translate_absolute_path_from_install_path( cmd.snapshotInstallPath) qcow2_options = self.calc_qcow2_option(self, cmd.qcow2Options, True, cmd.provisioning) new_volume_path = cmd.installPath if new_volume_path is None or new_volume_path == "": new_volume_path = "/dev/%s/%s" % (cmd.vgUuid, uuidhelper.uuid()) else: new_volume_path = translate_absolute_path_from_install_path( new_volume_path) with lvm.RecursiveOperateLv(snapshot_abs_path, shared=True): size = linux.qcow2_virtualsize(snapshot_abs_path) lvm.create_lv_from_cmd( new_volume_path, size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(new_volume_path, shared=False, delete_when_exception=True): linux.qcow2_clone_with_option(snapshot_abs_path, new_volume_path, qcow2_options) size = linux.qcow2_virtualsize(new_volume_path) rsp.newVolumeInstallPath = new_volume_path rsp.size = size return jsonobject.dumps(rsp)
def create_empty_volume(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = AgentRsp() install_abs_path = translate_absolute_path_from_install_path(cmd.installPath) if cmd.backingFile: qcow2_options = self.calc_qcow2_option(self, cmd.qcow2Options, True, cmd.provisioning) backing_abs_path = translate_absolute_path_from_install_path(cmd.backingFile) with lvm.RecursiveOperateLv(backing_abs_path, shared=True): virtual_size = linux.qcow2_virtualsize(backing_abs_path) if not lvm.lv_exists(install_abs_path): lvm.create_lv_from_cmd(install_abs_path, virtual_size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(install_abs_path, shared=False, delete_when_exception=True): linux.qcow2_create_with_backing_file_and_option(backing_abs_path, install_abs_path, qcow2_options) elif not lvm.lv_exists(install_abs_path): lvm.create_lv_from_cmd(install_abs_path, cmd.size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) if cmd.volumeFormat != 'raw': qcow2_options = self.calc_qcow2_option(self, cmd.qcow2Options, False, cmd.provisioning) with lvm.OperateLv(install_abs_path, shared=False, delete_when_exception=True): linux.qcow2_create_with_option(install_abs_path, cmd.size, qcow2_options) linux.qcow2_fill(0, 1048576, install_abs_path) logger.debug('successfully create empty volume[uuid:%s, size:%s] at %s' % (cmd.volumeUuid, cmd.size, cmd.installPath)) rsp.totalCapacity, rsp.availableCapacity = lvm.get_vg_size(cmd.vgUuid) return jsonobject.dumps(rsp)
def create_root_volume(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = AgentRsp() template_abs_path_cache = translate_absolute_path_from_install_path( cmd.templatePathInCache) install_abs_path = translate_absolute_path_from_install_path( cmd.installPath) qcow2_options = self.calc_qcow2_option(self, cmd.qcow2Options, True, cmd.provisioning) with lvm.RecursiveOperateLv(template_abs_path_cache, shared=True, skip_deactivate_tags=[IMAGE_TAG]): virtual_size = linux.qcow2_virtualsize(template_abs_path_cache) if not lvm.lv_exists(install_abs_path): lvm.create_lv_from_cmd( install_abs_path, virtual_size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(install_abs_path, shared=False, delete_when_exception=True): linux.qcow2_clone_with_option(template_abs_path_cache, install_abs_path, qcow2_options) rsp.totalCapacity, rsp.availableCapacity = lvm.get_vg_size(cmd.vgUuid) return jsonobject.dumps(rsp)
def create_empty_volume(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = AgentRsp() install_abs_path = translate_absolute_path_from_install_path(cmd.installPath) if cmd.backingFile: qcow2_options = self.calc_qcow2_option(self, cmd.qcow2Options, True, cmd.provisioning) backing_abs_path = translate_absolute_path_from_install_path(cmd.backingFile) with lvm.RecursiveOperateLv(backing_abs_path, shared=True): virtual_size = linux.qcow2_virtualsize(backing_abs_path) if not lvm.lv_exists(install_abs_path): lvm.create_lv_from_cmd(install_abs_path, virtual_size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(install_abs_path, shared=False, delete_when_exception=True): linux.qcow2_create_with_backing_file_and_option(backing_abs_path, install_abs_path, qcow2_options) elif not lvm.lv_exists(install_abs_path): qcow2_options = self.calc_qcow2_option(self, cmd.qcow2Options, False, cmd.provisioning) lvm.create_lv_from_cmd(install_abs_path, cmd.size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(install_abs_path, shared=False, delete_when_exception=True): linux.qcow2_create_with_option(install_abs_path, cmd.size, qcow2_options) linux.qcow2_fill(0, 1048576, install_abs_path) logger.debug('successfully create empty volume[uuid:%s, size:%s] at %s' % (cmd.volumeUuid, cmd.size, cmd.installPath)) rsp.totalCapacity, rsp.availableCapacity = lvm.get_vg_size(cmd.vgUuid) return jsonobject.dumps(rsp)
def create_empty_volume(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = VolumeRsp() install_abs_path = get_absolute_path_from_install_path(cmd.installPath) drbdResource = drbd.DrbdResource( self.get_name_from_installPath(cmd.installPath), False) drbdResource.config.local_host.hostname = cmd.local_host_name drbdResource.config.local_host.disk = install_abs_path drbdResource.config.local_host.minor = cmd.local_host_port - DRBD_START_PORT drbdResource.config.local_host.address = "%s:%s" % ( cmd.local_address, cmd.local_host_port) drbdResource.config.remote_host.hostname = cmd.remote_host_name drbdResource.config.remote_host.disk = install_abs_path drbdResource.config.remote_host.minor = cmd.remote_host_port - DRBD_START_PORT drbdResource.config.remote_host.address = "%s:%s" % ( cmd.remote_address, cmd.remote_host_port) drbdResource.config.write_config() try: if cmd.backingFile: backing_abs_path = get_absolute_path_from_install_path( cmd.backingFile) virtual_size = linux.qcow2_virtualsize(backing_abs_path) lvm.create_lv_from_cmd( install_abs_path, virtual_size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time()), False) lvm.active_lv(install_abs_path) drbdResource.initialize(cmd.init, cmd, backing_abs_path) elif not lvm.lv_exists(install_abs_path): lvm.create_lv_from_cmd( install_abs_path, cmd.size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time()), False) lvm.active_lv(install_abs_path) drbdResource.initialize(cmd.init, cmd) except Exception as e: drbdResource.destroy() lvm.delete_lv(install_abs_path) logger.debug( 'failed to create empty volume[uuid:%s, size:%s] at %s' % (cmd.volumeUuid, cmd.size, cmd.installPath)) raise e logger.debug( 'successfully create empty volume[uuid:%s, size:%s] at %s' % (cmd.volumeUuid, cmd.size, cmd.installPath)) rsp.totalCapacity, rsp.availableCapacity = lvm.get_vg_size(cmd.vgUuid) rsp._init_from_drbd(drbdResource) return jsonobject.dumps(rsp)
def create_root_volume(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = AgentRsp() template_abs_path_cache = translate_absolute_path_from_install_path(cmd.templatePathInCache) install_abs_path = translate_absolute_path_from_install_path(cmd.installPath) qcow2_options = self.calc_qcow2_option(self, cmd.qcow2Options, True, cmd.provisioning) with lvm.RecursiveOperateLv(template_abs_path_cache, shared=True, skip_deactivate_tags=[IMAGE_TAG]): virtual_size = linux.qcow2_virtualsize(template_abs_path_cache) if not lvm.lv_exists(install_abs_path): lvm.create_lv_from_cmd(install_abs_path, virtual_size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(install_abs_path, shared=False, delete_when_exception=True): linux.qcow2_clone_with_option(template_abs_path_cache, install_abs_path, qcow2_options) rsp.totalCapacity, rsp.availableCapacity = lvm.get_vg_size(cmd.vgUuid) return jsonobject.dumps(rsp)
def create_root_volume(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = VolumeRsp() template_abs_path_cache = get_absolute_path_from_install_path( cmd.templatePathInCache) install_abs_path = get_absolute_path_from_install_path(cmd.installPath) drbdResource = drbd.DrbdResource( self.get_name_from_installPath(cmd.installPath), False) drbdResource.config.local_host.hostname = cmd.local_host_name drbdResource.config.local_host.disk = install_abs_path drbdResource.config.local_host.minor = cmd.local_host_port - DRBD_START_PORT drbdResource.config.local_host.address = "%s:%s" % ( cmd.local_address, cmd.local_host_port) drbdResource.config.remote_host.hostname = cmd.remote_host_name drbdResource.config.remote_host.disk = install_abs_path drbdResource.config.remote_host.minor = cmd.remote_host_port - DRBD_START_PORT drbdResource.config.remote_host.address = "%s:%s" % ( cmd.remote_address, cmd.remote_host_port) drbdResource.config.write_config() virtual_size = linux.qcow2_virtualsize(template_abs_path_cache) try: lvm.qcow2_lv_recursive_active(template_abs_path_cache, lvm.LvmlockdLockType.SHARE) if not lvm.lv_exists(install_abs_path): lvm.create_lv_from_cmd( install_abs_path, virtual_size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time()), False) lvm.active_lv(install_abs_path) drbdResource.initialize(cmd.init, cmd, template_abs_path_cache) except Exception as e: drbdResource.destroy() lvm.delete_lv(install_abs_path) raise e rsp.totalCapacity, rsp.availableCapacity = lvm.get_vg_size(cmd.vgUuid) rsp._init_from_drbd(drbdResource) return jsonobject.dumps(rsp)
def revert_volume_from_snapshot(self, req): cmd = jsonobject.loads(req[http.REQUEST_BODY]) rsp = RevertVolumeFromSnapshotRsp() snapshot_abs_path = translate_absolute_path_from_install_path(cmd.snapshotInstallPath) qcow2_options = self.calc_qcow2_option(self, cmd.qcow2Options, True, cmd.provisioning) new_volume_path = cmd.installPath if new_volume_path is None or new_volume_path == "": new_volume_path = "/dev/%s/%s" % (cmd.vgUuid, uuidhelper.uuid()) else: new_volume_path = translate_absolute_path_from_install_path(new_volume_path) with lvm.RecursiveOperateLv(snapshot_abs_path, shared=True): size = linux.qcow2_virtualsize(snapshot_abs_path) lvm.create_lv_from_cmd(new_volume_path, size, cmd, "%s::%s::%s" % (VOLUME_TAG, cmd.hostUuid, time.time())) with lvm.OperateLv(new_volume_path, shared=False, delete_when_exception=True): linux.qcow2_clone_with_option(snapshot_abs_path, new_volume_path, qcow2_options) size = linux.qcow2_virtualsize(new_volume_path) rsp.newVolumeInstallPath = new_volume_path rsp.size = size return jsonobject.dumps(rsp)