Search in sources :

Example 21 with PBD

use of com.xensource.xenapi.PBD in project cloudstack by apache.

the class CitrixResourceBase method getLocalLVMSR.

protected SR getLocalLVMSR(final Connection conn) {
    try {
        final Map<SR, SR.Record> map = SR.getAllRecords(conn);
        if (map != null && !map.isEmpty()) {
            for (final Map.Entry<SR, SR.Record> entry : map.entrySet()) {
                final SR.Record srRec = entry.getValue();
                if (SRType.LVM.equals(srRec.type)) {
                    final Set<PBD> pbds = srRec.PBDs;
                    if (pbds == null) {
                        continue;
                    }
                    for (final PBD pbd : pbds) {
                        final Host host = pbd.getHost(conn);
                        if (!isRefNull(host) && host.getUuid(conn).equals(_host.getUuid())) {
                            if (!pbd.getCurrentlyAttached(conn)) {
                                pbd.plug(conn);
                            }
                            final SR sr = entry.getKey();
                            sr.scan(conn);
                            return sr;
                        }
                    }
                }
            }
        }
    } catch (final XenAPIException e) {
        final String msg = "Unable to get local LVMSR in host:" + _host.getUuid() + e.toString();
        s_logger.warn(msg);
    } catch (final XmlRpcException e) {
        final String msg = "Unable to get local LVMSR in host:" + _host.getUuid() + e.getCause();
        s_logger.warn(msg);
    }
    return null;
}
Also used : PBD(com.xensource.xenapi.PBD) XenAPIException(com.xensource.xenapi.Types.XenAPIException) Host(com.xensource.xenapi.Host) Map(java.util.Map) HashMap(java.util.HashMap) XmlRpcException(org.apache.xmlrpc.XmlRpcException) SR(com.xensource.xenapi.SR)

Example 22 with PBD

use of com.xensource.xenapi.PBD in project cosmic by MissionCriticalCloud.

the class CitrixResourceBase method getLocalLVMSR.

protected SR getLocalLVMSR(final Connection conn) {
    try {
        final Map<SR, SR.Record> map = SR.getAllRecords(conn);
        if (map != null && !map.isEmpty()) {
            for (final Map.Entry<SR, SR.Record> entry : map.entrySet()) {
                final SR.Record srRec = entry.getValue();
                if (SRType.LVM.equals(srRec.type)) {
                    final Set<PBD> pbds = srRec.PBDs;
                    if (pbds == null) {
                        continue;
                    }
                    for (final PBD pbd : pbds) {
                        final Host host = pbd.getHost(conn);
                        if (!isRefNull(host) && host.getUuid(conn).equals(this._host.getUuid())) {
                            if (!pbd.getCurrentlyAttached(conn)) {
                                pbd.plug(conn);
                            }
                            final SR sr = entry.getKey();
                            sr.scan(conn);
                            return sr;
                        }
                    }
                }
            }
        }
    } catch (final XenAPIException e) {
        final String msg = "Unable to get local LVMSR in host:" + this._host.getUuid() + e.toString();
        s_logger.warn(msg);
    } catch (final XmlRpcException e) {
        final String msg = "Unable to get local LVMSR in host:" + this._host.getUuid() + e.getCause();
        s_logger.warn(msg);
    }
    return null;
}
Also used : PBD(com.xensource.xenapi.PBD) XenAPIException(com.xensource.xenapi.Types.XenAPIException) Host(com.xensource.xenapi.Host) Map(java.util.Map) HashMap(java.util.HashMap) XmlRpcException(org.apache.xmlrpc.XmlRpcException) SR(com.xensource.xenapi.SR)

Example 23 with PBD

use of com.xensource.xenapi.PBD in project cosmic by MissionCriticalCloud.

the class CitrixResourceBase method prepareISO.

public void prepareISO(final Connection conn, final String vmName, final List<String[]> vmDataList, final String configDriveLabel) throws XmlRpcException, XenAPIException {
    final Set<VM> vms = VM.getByNameLabel(conn, vmName);
    if (vms == null || vms.size() != 1) {
        throw new CloudRuntimeException("There are " + (vms == null ? "0" : vms.size()) + " VMs named " + vmName);
    }
    final VM vm = vms.iterator().next();
    if (vmDataList != null) {
        // create SR
        final SR sr = createLocalIsoSR(conn, this._configDriveSRName + getHost().getIp());
        // 1. create vm data files
        createVmdataFiles(vmName, vmDataList, configDriveLabel);
        // 2. copy config drive iso to host
        copyConfigDriveIsoToHost(conn, sr, vmName);
    }
    final Set<VBD> vbds = vm.getVBDs(conn);
    for (final VBD vbd : vbds) {
        final VBD.Record vbdr = vbd.getRecord(conn);
        if (vbdr.type == Types.VbdType.CD && vbdr.empty == false && vbdr.userdevice.equals(this._attachIsoDeviceNum)) {
            final VDI vdi = vbdr.VDI;
            final SR sr = vdi.getSR(conn);
            final Set<PBD> pbds = sr.getPBDs(conn);
            if (pbds == null) {
                throw new CloudRuntimeException("There is no pbd for sr " + sr);
            }
            for (final PBD pbd : pbds) {
                final PBD.Record pbdr = pbd.getRecord(conn);
                if (pbdr.host.getUuid(conn).equals(this._host.getUuid())) {
                    return;
                }
            }
            sr.setShared(conn, true);
            final Host host = Host.getByUuid(conn, this._host.getUuid());
            final PBD.Record pbdr = pbds.iterator().next().getRecord(conn);
            pbdr.host = host;
            pbdr.uuid = "";
            final PBD pbd = PBD.create(conn, pbdr);
            pbdPlug(conn, pbd, pbd.getUuid(conn));
            break;
        }
    }
}
Also used : PBD(com.xensource.xenapi.PBD) CloudRuntimeException(com.cloud.legacymodel.exceptions.CloudRuntimeException) VM(com.xensource.xenapi.VM) VBD(com.xensource.xenapi.VBD) VDI(com.xensource.xenapi.VDI) Host(com.xensource.xenapi.Host) SR(com.xensource.xenapi.SR)

Example 24 with PBD

use of com.xensource.xenapi.PBD in project cosmic by MissionCriticalCloud.

the class CitrixResourceBase method getLocalEXTSR.

protected SR getLocalEXTSR(final Connection conn) {
    try {
        final Map<SR, SR.Record> map = SR.getAllRecords(conn);
        if (map != null && !map.isEmpty()) {
            for (final Map.Entry<SR, SR.Record> entry : map.entrySet()) {
                final SR.Record srRec = entry.getValue();
                if (SRType.FILE.equals(srRec.type) || SRType.EXT.equals(srRec.type)) {
                    final Set<PBD> pbds = srRec.PBDs;
                    if (pbds == null) {
                        continue;
                    }
                    for (final PBD pbd : pbds) {
                        final Host host = pbd.getHost(conn);
                        if (!isRefNull(host) && host.getUuid(conn).equals(this._host.getUuid())) {
                            if (!pbd.getCurrentlyAttached(conn)) {
                                pbd.plug(conn);
                            }
                            final SR sr = entry.getKey();
                            sr.scan(conn);
                            return sr;
                        }
                    }
                }
            }
        }
    } catch (final XenAPIException e) {
        final String msg = "Unable to get local EXTSR in host:" + this._host.getUuid() + e.toString();
        s_logger.warn(msg);
    } catch (final XmlRpcException e) {
        final String msg = "Unable to get local EXTSR in host:" + this._host.getUuid() + e.getCause();
        s_logger.warn(msg);
    }
    return null;
}
Also used : PBD(com.xensource.xenapi.PBD) XenAPIException(com.xensource.xenapi.Types.XenAPIException) Host(com.xensource.xenapi.Host) Map(java.util.Map) HashMap(java.util.HashMap) XmlRpcException(org.apache.xmlrpc.XmlRpcException) SR(com.xensource.xenapi.SR)

Example 25 with PBD

use of com.xensource.xenapi.PBD in project cosmic by MissionCriticalCloud.

the class CitrixResourceBase method removeSR.

public void removeSR(final Connection conn, final SR sr) {
    if (sr == null) {
        return;
    }
    if (s_logger.isDebugEnabled()) {
        s_logger.debug(logX(sr, "Removing SR"));
    }
    for (int i = 0; i < 2; i++) {
        try {
            final Set<VDI> vdis = sr.getVDIs(conn);
            for (final VDI vdi : vdis) {
                vdi.forget(conn);
            }
            Set<PBD> pbds = sr.getPBDs(conn);
            for (final PBD pbd : pbds) {
                if (s_logger.isDebugEnabled()) {
                    s_logger.debug(logX(pbd, "Unplugging pbd"));
                }
                // if (pbd.getCurrentlyAttached(conn)) {
                pbd.unplug(conn);
                // }
                pbd.destroy(conn);
            }
            pbds = sr.getPBDs(conn);
            if (pbds.size() == 0) {
                if (s_logger.isDebugEnabled()) {
                    s_logger.debug(logX(sr, "Forgetting"));
                }
                sr.forget(conn);
                return;
            }
            if (s_logger.isDebugEnabled()) {
                s_logger.debug(logX(sr, "There is still one or more PBDs attached."));
                if (s_logger.isTraceEnabled()) {
                    for (final PBD pbd : pbds) {
                        s_logger.trace(logX(pbd, " Still attached"));
                    }
                }
            }
        } catch (final XenAPIException e) {
            s_logger.debug(logX(sr, "Catch XenAPIException: " + e.toString()));
        } catch (final XmlRpcException e) {
            s_logger.debug(logX(sr, "Catch Exception: " + e.getMessage()));
        }
    }
    s_logger.warn(logX(sr, "Unable to remove SR"));
}
Also used : PBD(com.xensource.xenapi.PBD) XenAPIException(com.xensource.xenapi.Types.XenAPIException) VDI(com.xensource.xenapi.VDI) XmlRpcException(org.apache.xmlrpc.XmlRpcException)

Aggregations

PBD (com.xensource.xenapi.PBD)40 SR (com.xensource.xenapi.SR)35 Host (com.xensource.xenapi.Host)24 XenAPIException (com.xensource.xenapi.Types.XenAPIException)22 XmlRpcException (org.apache.xmlrpc.XmlRpcException)21 HashMap (java.util.HashMap)14 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)12 CloudRuntimeException (com.cloud.legacymodel.exceptions.CloudRuntimeException)9 VDI (com.xensource.xenapi.VDI)6 Test (org.junit.Test)6 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)6 IOException (java.io.IOException)5 MalformedURLException (java.net.MalformedURLException)5 URISyntaxException (java.net.URISyntaxException)5 Map (java.util.Map)5 TimeoutException (java.util.concurrent.TimeoutException)5 ConfigurationException (javax.naming.ConfigurationException)5 ParserConfigurationException (javax.xml.parsers.ParserConfigurationException)5 SAXException (org.xml.sax.SAXException)5 InternalErrorException (com.cloud.exception.InternalErrorException)4