コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: NodeWrap.cpp プロジェクト: libvirt/libvirt-qpid
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;
}