Result StoragePoolControlThread::createStoragePool() { 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 = virStoragePoolCreateXML( *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 Created.") .arg(result.name).arg(path)); virStoragePoolFree(storagePool); result.result = true; 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; }
Manageable::status_t NodeWrap::ManagementMethod(uint32_t methodId, Args& args, std::string &errstr) { virDomainPtr domain_ptr; cout << "Method Received: " << methodId << endl; int ret; switch (methodId) { case _qmf::Node::METHOD_DOMAINDEFINEXML: { _qmf::ArgsNodeDomainDefineXML *io_args = (_qmf::ArgsNodeDomainDefineXML *) &args; domain_ptr = virDomainDefineXML(conn, io_args->i_xmlDesc.c_str()); if (!domain_ptr) { errstr = FORMAT_ERR(conn, "Error creating domain using xml description (virDomainDefineXML).", &ret); return STATUS_USER + ret; } else { // Now we have to check to see if this domain is actually new or not, because it's possible that // one already exists with this name/description and we just replaced it.. *ugh* for (std::vector<DomainWrap*>::iterator iter = domains.begin(); iter != domains.end();) { if (strcmp((*iter)->domain_name.c_str(), virDomainGetName(domain_ptr)) == 0) { // We're just replacing an existing domain, however I'm pretty sure the // old domain pointer becomes invalid at this point, so we should destroy // the old domain reference. The other option would be to replace it and // keep the object valid.. not sure which is better. printf("Old domain already exists, removing it in favor of new object."); delete(*iter); iter = domains.erase(iter); } else { iter++; } } DomainWrap *domain; try { domain = new DomainWrap(agent, this, domain_ptr, conn); domains.push_back(domain); io_args->o_domain = domain->GetManagementObject()->getObjectId(); } catch (int i) { delete domain; errstr = FORMAT_ERR(conn, "Error constructing domain object in virDomainDefineXML.", &ret); return STATUS_USER + i; } return STATUS_OK; } } case _qmf::Node::METHOD_STORAGEPOOLDEFINEXML: { _qmf::ArgsNodeStoragePoolDefineXML *io_args = (_qmf::ArgsNodeStoragePoolDefineXML *) &args; virStoragePoolPtr pool_ptr; pool_ptr = virStoragePoolDefineXML (conn, io_args->i_xmlDesc.c_str(), 0); if (pool_ptr == NULL) { errstr = FORMAT_ERR(conn, "Error defining storage pool using xml description (virStoragePoolDefineXML).", &ret); return STATUS_USER + ret; } PoolWrap *pool; try { pool = new PoolWrap(agent, this, pool_ptr, conn); pools.push_back(pool); io_args->o_pool = pool->GetManagementObject()->getObjectId(); } catch (int i) { delete pool; errstr = FORMAT_ERR(conn, "Error constructing pool object in virStoragePoolDefineXML.", &ret); return STATUS_USER + i; } return STATUS_OK; } case _qmf::Node::METHOD_STORAGEPOOLCREATEXML: { _qmf::ArgsNodeStoragePoolCreateXML *io_args = (_qmf::ArgsNodeStoragePoolCreateXML *) &args; virStoragePoolPtr pool_ptr; pool_ptr = virStoragePoolCreateXML (conn, io_args->i_xmlDesc.c_str(), 0); if (pool_ptr == NULL) { errstr = FORMAT_ERR(conn, "Error creating storage pool using xml description (virStoragePoolCreateXML).", &ret); return STATUS_USER + ret; } PoolWrap *pool; try { pool = new PoolWrap(agent, this, pool_ptr, conn); pools.push_back(pool); io_args->o_pool = pool->GetManagementObject()->getObjectId(); } catch (int i) { delete pool; errstr = FORMAT_ERR(conn, "Error constructing pool object in virStoragePoolCreateXML.", &ret); return STATUS_USER + i; } return STATUS_OK; } case _qmf::Node::METHOD_FINDSTORAGEPOOLSOURCES: { _qmf::ArgsNodeFindStoragePoolSources *io_args = (_qmf::ArgsNodeFindStoragePoolSources *) &args; char *xml_result; xml_result = virConnectFindStoragePoolSources(conn, io_args->i_type.c_str(), io_args->i_srcSpec.c_str(), 0); if (xml_result == NULL) { errstr = FORMAT_ERR(conn, "Error creating storage pool using xml description (virStoragePoolCreateXML).", &ret); return STATUS_USER + ret; } io_args->o_xmlDesc = xml_result; free(xml_result); return STATUS_OK; } } return STATUS_NOT_IMPLEMENTED; }