def create(dbg, qemudisk, uri, img_qemu_uri): log.debug("%s: xcpng.qemudisk.create: uri: %s " % (dbg, uri)) vdi_uuid = utils.get_vdi_uuid_by_uri(dbg, uri) sr_uuid = utils.get_sr_uuid_by_uri(dbg, uri) vdi_type = utils.get_vdi_type_by_uri(dbg, uri) if vdi_type not in IMAGE_TYPES: raise Exception('Incorrect VDI type') utils.mkdir_p(QEMU_DP_SOCKET_DIR, 0o0700) nbd_sock = QEMU_DP_SOCKET_DIR + "/qemu-nbd.{}".format(vdi_uuid) qmp_sock = QEMU_DP_SOCKET_DIR + "/qmp_sock.{}".format(vdi_uuid) qmp_log = QEMU_DP_SOCKET_DIR + "/qmp_log.{}".format(vdi_uuid) log.debug("%s: xcpng.qemudisk.create: Spawning qemu process for VDI %s with qmp socket at %s" % (dbg, vdi_uuid, qmp_sock)) cmd = [QEMU_DP, qmp_sock] try: log_fd = open(qmp_log, 'w+') p = subprocess.Popen(cmd, stdout=log_fd, stderr=log_fd) except Exception as e: log.error("%s: xcpng.qemudisk.create: Failed to create qemu_dp instance: uri %s" % (dbg, uri)) try: log_fd.close() except: pass raise Exception(e) log.debug("%s: xcpng.qemudisk.create: New qemu process has pid %d" % (dbg, p.pid)) return qemudisk(dbg, sr_uuid, vdi_uuid, vdi_type, img_qemu_uri, p.pid, qmp_sock, nbd_sock, qmp_log)
def sr_import(self, dbg, uri, configuration): log.debug( "%s: xcpng.librbd.sr.SROperations.sr_import: uri: %s configuration %s" % (dbg, uri, configuration)) cluster = ceph_cluster(dbg, get_cluster_name_by_uri(dbg, uri)) pool_name = get_sr_name_by_uri(dbg, uri) try: cluster.connect() if not cluster.pool_exists(pool_name): raise Exception("CEPH pool %s doesn\'t exist" % pool_name) except Exception as e: log.debug( "%s: xcpng.librbd.sr.SROperations.get_vdi_list: uri: Failed to destroy SR: uri: %s" % dbg, uri) raise Exception(e) finally: cluster.shutdown() mkdir_p("%s/%s" % (SR_PATH_PREFIX, get_sr_uuid_by_uri(dbg, uri)))
def sr_import(self, dbg, uri, configuration): log.debug( "%s: xcpng.libsbd.sr.SROperations.sr_import: uri: %s configuration %s" % (dbg, uri, configuration)) if 'bindnetaddr' not in configuration: raise Exception( 'Failed to connect to Sheepdog cluster. Parameter \'bindnetaddr\' is not specified' ) elif 'mcastaddr' not in configuration: raise Exception( 'Failed to connect to Sheepdog cluster. Parameter \'mcastaddr\' is not specified' ) elif 'mcastport' not in configuration: raise Exception( 'Failed to connect to Sheepdog cluster. Parameter \'mcastport\' is not specified' ) sr_uuid = get_sr_uuid_by_uri(dbg, uri) create_chroot(dbg, sr_uuid) set_chroot(dbg, sr_uuid) write_corosync_conf( dbg, sr_uuid, gen_corosync_conf(dbg, configuration['bindnetaddr'], configuration['mcastaddr'], configuration['mcastport'])) start_sheepdog_gateway(dbg, get_sheep_port(dbg, sr_uuid), sr_uuid) mkdir_p("%s/%s" % (SR_PATH_PREFIX, get_sr_uuid_by_uri(dbg, uri))) call(dbg, [ 'ln', '-s', "%s/%s/var/lib/sheepdog/sock" % (CHROOT_BASE, get_sr_uuid_by_uri(dbg, uri)), "%s/%s/sock" % (SR_PATH_PREFIX, get_sr_uuid_by_uri(dbg, uri)) ])