Result StoragePoolControlThread::defineStoragePool() { Result result; QString path = task.args.path; QByteArray xmlData; QFile f; f.setFileName(path); if ( !f.open(QIODevice::ReadOnly) ) { QString msg = QString("File \"%1\"\nnot opened.").arg(path); emit errorMsg( msg, number ); result.result = false; result.err = msg; return result; }; xmlData = f.readAll(); f.close(); // flags: extra flags; not used yet, so callers should always pass 0 unsigned int flags = 0; virStoragePoolPtr storagePool = virStoragePoolDefineXML( *task.srcConnPtr, xmlData.data(), flags); if ( storagePool==NULL ) { result.err = sendConnErrors(); result.result = false; return result; }; result.name = QString().fromUtf8( virStoragePoolGetName(storagePool) ); result.msg.append( QString("'<b>%1</b>' StoragePool from\n\"%2\"\nis Defined.") .arg(result.name).arg(path)); virStoragePoolFree(storagePool); result.result = true; return result; }
QStringList StoragePoolControlThread::getAllStoragePoolList() { QStringList storagePoolList; if ( currWorkConnect!=NULL && keep_alive ) { virStoragePoolPtr *storagePool; unsigned int flags = VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE | VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE; int ret = virConnectListAllStoragePools( currWorkConnect, &storagePool, flags); if ( ret<0 ) { sendConnErrors(); free(storagePool); return storagePoolList; }; int i = 0; while ( storagePool[i] != NULL ) { QStringList currentAttr; QString autostartStr; int is_autostart = 0; if (virStoragePoolGetAutostart(storagePool[i], &is_autostart) < 0) { autostartStr.append("no autostart"); } else autostartStr.append( is_autostart ? "yes" : "no" ); currentAttr<< QString().fromUtf8( virStoragePoolGetName(storagePool[i]) ) << QString( virStoragePoolIsActive(storagePool[i]) ? "active" : "inactive" ) << autostartStr << QString( virStoragePoolIsPersistent(storagePool[i]) ? "yes" : "no" ); storagePoolList.append(currentAttr.join(" ")); //qDebug()<<currentAttr; virStoragePoolFree(storagePool[i]); i++; }; free(storagePool); }; return storagePoolList; }
const gchar *gvir_storage_pool_get_name(GVirStoragePool *pool) { const char *name; g_return_val_if_fail(GVIR_IS_STORAGE_POOL(pool), NULL); if (!(name = virStoragePoolGetName(pool->priv->handle))) gvir_warning("Failed to get storage_pool name on %p", pool->priv->handle); return name; }
Result StoragePoolControlThread::getAllStoragePoolDataList() { Result result; QStringList storagePoolDataList; if ( task.srcConnPtr!=NULL && keep_alive ) { virStoragePoolPtr *storagePool = NULL; unsigned int flags = VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE | VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE; int ret = virConnectListAllStoragePools( *task.srcConnPtr, &storagePool, flags); if ( ret<0 ) { result.err = sendConnErrors(); result.result = false; result.msg = storagePoolDataList; return result; }; // therefore correctly to use for() command, because storagePool[0] can not exist. for (int i = 0; i < ret; i++) { QStringList currentAttr; QString type, source, target; char *Returns = (virStoragePoolGetXMLDesc(storagePool[i], VIR_STORAGE_XML_INACTIVE)); if ( Returns!=NULL ) { QDomDocument doc; QString s; QTextStream str; str.setString(&s); doc.setContent(QString(Returns)); QDomElement _pool, _el; _pool= doc.firstChildElement("pool"); type = _pool.attribute("type"); _el = _pool.firstChildElement("source"); _el.save(str, 4); source = str.readAll(); _el = _pool.firstChildElement("target"); _el.save(str, 4); target = str.readAll(); free(Returns); }; currentAttr<< QString::fromUtf8( virStoragePoolGetName(storagePool[i]) ) << type << source << target; storagePoolDataList.append(currentAttr.join(DFR)); //qDebug()<<currentAttr; virStoragePoolFree(storagePool[i]); }; free(storagePool); result.result = true; } else { result.result = false; }; result.msg = storagePoolDataList; return result; }
Result StoragePoolControlThread::getAllStoragePoolList() { Result result; QStringList storagePoolList; if ( task.srcConnPtr!=NULL && keep_alive ) { virStoragePoolPtr *storagePool = NULL; unsigned int flags = VIR_CONNECT_LIST_STORAGE_POOLS_ACTIVE | VIR_CONNECT_LIST_STORAGE_POOLS_INACTIVE; int ret = virConnectListAllStoragePools( *task.srcConnPtr, &storagePool, flags); if ( ret<0 ) { result.err = sendConnErrors(); result.result = false; result.msg = storagePoolList; return result; }; // therefore correctly to use for() command, because storagePool[0] can not exist. for (int i = 0; i < ret; i++) { QStringList currentAttr; QString autostartStr; int is_autostart = 0; if (virStoragePoolGetAutostart(storagePool[i], &is_autostart) < 0) { autostartStr.append("no autostart"); } else autostartStr.append( is_autostart ? "yes" : "no" ); currentAttr<< QString::fromUtf8( virStoragePoolGetName(storagePool[i]) ) << QString( virStoragePoolIsActive(storagePool[i]) ? "active" : "inactive" ) << autostartStr << QString( virStoragePoolIsPersistent(storagePool[i]) ? "yes" : "no" ); storagePoolList.append(currentAttr.join(DFR)); //qDebug()<<currentAttr; virStoragePoolFree(storagePool[i]); }; free(storagePool); result.result = true; } else { result.result = false; }; result.msg = storagePoolList; return result; }
QStringList StoragePoolControlThread::createStoragePool() { QStringList result; QString path = args.first(); QByteArray xmlData; QFile f; f.setFileName(path); if ( !f.open(QIODevice::ReadOnly) ) { emit errorMsg( QString("File \"%1\"\nnot opened.").arg(path) ); return result; }; xmlData = f.readAll(); f.close(); // flags: extra flags; not used yet, so callers should always pass 0 unsigned int flags = 0; virStoragePoolPtr storagePool = virStoragePoolCreateXML(currWorkConnect, xmlData.data(), flags); if ( storagePool==NULL ) { sendConnErrors(); return result; }; result.append(QString("'<b>%1</b>' StoragePool from\n\"%2\"\nis created.").arg(virStoragePoolGetName(storagePool)).arg(path)); virStoragePoolFree(storagePool); return result; }
virStorageVolPtr vshCommandOptVolBy(vshControl *ctl, const vshCmd *cmd, const char *optname, const char *pooloptname, const char **name, unsigned int flags) { virStorageVolPtr vol = NULL; virStoragePoolPtr pool = NULL; const char *n = NULL, *p = NULL; virCheckFlags(VSH_BYUUID | VSH_BYNAME, NULL); if (vshCommandOptStringReq(ctl, cmd, optname, &n) < 0) return NULL; if (pooloptname != NULL && vshCommandOptStringReq(ctl, cmd, pooloptname, &p) < 0) return NULL; if (p) { if (!(pool = vshCommandOptPoolBy(ctl, cmd, pooloptname, name, flags))) return NULL; if (virStoragePoolIsActive(pool) != 1) { vshError(ctl, _("pool '%s' is not active"), p); virStoragePoolFree(pool); return NULL; } } vshDebug(ctl, VSH_ERR_DEBUG, "%s: found option <%s>: %s\n", cmd->def->name, optname, n); if (name) *name = n; /* try it by name */ if (pool && (flags & VSH_BYNAME)) { vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as vol name\n", cmd->def->name, optname); vol = virStorageVolLookupByName(pool, n); } /* try it by key */ if (!vol && (flags & VSH_BYUUID)) { vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as vol key\n", cmd->def->name, optname); vol = virStorageVolLookupByKey(ctl->conn, n); } /* try it by path */ if (!vol && (flags & VSH_BYUUID)) { vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as vol path\n", cmd->def->name, optname); vol = virStorageVolLookupByPath(ctl->conn, n); } if (!vol) { if (pool || !pooloptname) vshError(ctl, _("failed to get vol '%s'"), n); else vshError(ctl, _("failed to get vol '%s', specifying --%s " "might help"), n, pooloptname); } /* If the pool was specified, then make sure that the returned * volume is from the given pool */ if (pool && vol) { virStoragePoolPtr volpool = NULL; if ((volpool = virStoragePoolLookupByVolume(vol))) { if (STRNEQ(virStoragePoolGetName(volpool), virStoragePoolGetName(pool))) { vshResetLibvirtError(); vshError(ctl, _("Requested volume '%s' is not in pool '%s'"), n, virStoragePoolGetName(pool)); virStorageVolFree(vol); vol = NULL; } virStoragePoolFree(volpool); } } if (pool) virStoragePoolFree(pool); return vol; }