mirror of https://github.com/apache/cloudstack.git
support XenServer 6.0 in 2.2.y
This commit is contained in:
parent
59290c8979
commit
3fe70191f2
|
|
@ -17,24 +17,21 @@
|
|||
*/
|
||||
package com.cloud.hypervisor.xen.resource;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
/**
|
||||
* Reduce bloat inside CitrixResourceBase
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class CitrixHelper {
|
||||
private static final Logger s_logger = Logger.getLogger(CitrixHelper.class);
|
||||
private static final HashMap<String, String> _xcp100GuestOsMap = new HashMap<String, String>(70);
|
||||
private static final HashMap<String, String> _xenServerGuestOsMap = new HashMap<String, String>(70);
|
||||
private static final HashMap<String, String> _xenServer56FP1GuestOsMap = new HashMap<String, String>(70);
|
||||
private static final HashMap<String, String> _xenServer56FP2GuestOsMap = new HashMap<String, String>(70);
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(CitrixHelper.class);
|
||||
private static final HashMap<String, String> _xcp100GuestOsMap = new HashMap<String, String>(70);
|
||||
private static final HashMap<String, String> _xenServerGuestOsMap = new HashMap<String, String>(70);
|
||||
private static final HashMap<String, String> _xenServer56FP1GuestOsMap = new HashMap<String, String>(70);
|
||||
private static final HashMap<String, String> _xenServer56FP2GuestOsMap = new HashMap<String, String>(70);
|
||||
private static final HashMap<String, String> _xenServer600GuestOsMap = new HashMap<String, String>(70);
|
||||
|
||||
static {
|
||||
_xcp100GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
|
||||
|
|
@ -112,79 +109,78 @@ public class CitrixHelper {
|
|||
_xcp100GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xcp100GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
|
||||
}
|
||||
|
||||
|
||||
static {
|
||||
_xenServerGuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5.0 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5.0 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5.1 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5.1 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5.2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5.2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5.3 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5.3 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5.4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5.4 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5.0 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5.0 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5.1 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5.1 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5.2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5.2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5.3 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5.3 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5.4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5.4 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5.0 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5.0 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5.1 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5.1 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5.2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5.2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5.3 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5.3 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5.4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5.4 (64-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5.0 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5.0 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5.1 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5.1 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5.2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5.2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5.3 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5.3 (64-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5.4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5.4 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5.0 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5.0 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5.1 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5.1 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5.2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5.2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5.3 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5.3 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5.4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5.4 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5.0 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5.0 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5.1 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5.1 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5.2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5.2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5.3 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5.3 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5.4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5.4 (64-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
|
||||
_xenServerGuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows 2000 SP4 (32-bit)", "Windows 2000 SP4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows XP SP2 (32-bit)", "Windows XP SP2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Other Linux (32-bit)", "Other install media");
|
||||
_xenServerGuestOsMap.put("Other Linux (64-bit)", "Other install media");
|
||||
_xenServerGuestOsMap.put("Other PV (32-bit)", "CentOS 5.4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Other PV (64-bit)", "CentOS 5.4 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
|
||||
_xenServerGuestOsMap.put("Windows 2000 SP4 (32-bit)", "Windows 2000 SP4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows XP SP2 (32-bit)", "Windows XP SP2 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Other Linux (32-bit)", "Other install media");
|
||||
_xenServerGuestOsMap.put("Other Linux (64-bit)", "Other install media");
|
||||
_xenServerGuestOsMap.put("Other PV (32-bit)", "CentOS 5.4 (32-bit)");
|
||||
_xenServerGuestOsMap.put("Other PV (64-bit)", "CentOS 5.4 (64-bit)");
|
||||
}
|
||||
|
||||
|
||||
static {
|
||||
_xenServer56FP1GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
|
||||
_xenServer56FP1GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
|
||||
|
|
@ -266,9 +262,7 @@ public class CitrixHelper {
|
|||
_xenServer56FP1GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer56FP1GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static {
|
||||
_xenServer56FP2GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
|
||||
_xenServer56FP2GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
|
||||
|
|
@ -349,24 +343,113 @@ public class CitrixHelper {
|
|||
_xenServer56FP2GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer56FP2GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
|
||||
}
|
||||
|
||||
|
||||
|
||||
static {
|
||||
_xenServer600GuestOsMap.put("CentOS 4.5 (32-bit)", "CentOS 4.5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 4.6 (32-bit)", "CentOS 4.6 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 4.7 (32-bit)", "CentOS 4.7 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 4.8 (32-bit)", "CentOS 4.8 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.0 (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.0 (64-bit)", "CentOS 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.1 (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.1 (64-bit)", "CentOS 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.2 (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.2 (64-bit)", "CentOS 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.3 (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.3 (64-bit)", "CentOS 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.4 (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.4 (64-bit)", "CentOS 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.5 (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.5 (64-bit)", "CentOS 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.6 (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 5.6 (64-bit)", "CentOS 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("CentOS 6.0 (32-bit)", "CentOS 6 (32-bit) (experimental)");
|
||||
_xenServer600GuestOsMap.put("CentOS 6.0 (64-bit)", "CentOS 6 (64-bit) (experimental)");
|
||||
_xenServer600GuestOsMap.put("Debian GNU/Linux 5.0 (32-bit)", "Debian Lenny 5.0 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Debian GNU/Linux 6(32-bit)", "Debian Squeeze 6.0 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Debian GNU/Linux 6(64-bit)", "Debian Squeeze 6.0 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.0 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.0 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.1 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.1 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.2 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.2 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.3 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.3 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.4 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.4 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.5 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.5 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.6 (32-bit)", "Oracle Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 5.6 (64-bit)", "Oracle Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 6.0 (32-bit)", "Oracle Enterprise Linux 6.0 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Oracle Enterprise Linux 6.0 (64-bit)", "Oracle Enterprise Linux 6.0 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.1 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.6 (32-bit)", "Red Hat Enterprise Linux 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 5.6 (64-bit)", "Red Hat Enterprise Linux 5 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6.0 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 9 SP4 (32-bit)", "SUSE Linux Enterprise Server 9 SP4 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (32-bit)", "SUSE Linux Enterprise Server 10 SP1 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP1 (64-bit)", "SUSE Linux Enterprise Server 10 SP1 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (32-bit)", "SUSE Linux Enterprise Server 10 SP2 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP2 (64-bit)", "SUSE Linux Enterprise Server 10 SP2 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (32-bit)", "SUSE Linux Enterprise Server 10 SP3 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP3 (64-bit)", "SUSE Linux Enterprise Server 10 SP3 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (32-bit)", "SUSE Linux Enterprise Server 10 SP4 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 10 SP4 (64-bit)", "SUSE Linux Enterprise Server 10 SP4 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 11 (32-bit)", "SUSE Linux Enterprise Server 11 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 11 (64-bit)", "SUSE Linux Enterprise Server 11 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (32-bit)", "SUSE Linux Enterprise Server 11 SP1 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("SUSE Linux Enterprise Server 11 SP1 (64-bit)", "SUSE Linux Enterprise Server 11 SP1 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows 7 (32-bit)", "Windows 7 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows 7 (64-bit)", "Windows 7 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows Server 2003 (32-bit)", "Windows Server 2003 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows Server 2003 (64-bit)", "Windows Server 2003 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows Server 2008 (32-bit)", "Windows Server 2008 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows Server 2008 (64-bit)", "Windows Server 2008 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008 R2 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows Vista (32-bit)", "Windows Vista (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Windows XP SP3 (32-bit)", "Windows XP SP3 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Ubuntu 10.04 (32-bit)", "Ubuntu Lucid Lynx 10.04 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Ubuntu 10.04 (64-bit)", "Ubuntu Lucid Lynx 10.04 (64-bit)");
|
||||
_xenServer600GuestOsMap.put("Ubuntu 10.10 (32-bit)", "Ubuntu Maverick Meerkat 10.10 (32-bit) (experimental)");
|
||||
_xenServer600GuestOsMap.put("Ubuntu 10.10 (64-bit)", "Ubuntu Maverick Meerkat 10.10 (64-bit) (experimental)");
|
||||
_xenServer600GuestOsMap.put("Other Linux (32-bit)", "Other install media");
|
||||
_xenServer600GuestOsMap.put("Other Linux (64-bit)", "Other install media");
|
||||
_xenServer600GuestOsMap.put("Other PV (32-bit)", "CentOS 5 (32-bit)");
|
||||
_xenServer600GuestOsMap.put("Other PV (64-bit)", "CentOS 5 (64-bit)");
|
||||
}
|
||||
|
||||
public static String getXcpGuestOsType(String stdType) {
|
||||
String guestOS = _xcp100GuestOsMap.get(stdType);
|
||||
String guestOS = _xcp100GuestOsMap.get(stdType);
|
||||
if (guestOS == null) {
|
||||
s_logger.debug("Can't find the guest os: " + stdType + " mapping into XCP's guestOS type, start it as HVM guest");
|
||||
guestOS = "Other install media";
|
||||
s_logger.debug("Can't find the guest os: " + stdType + " mapping into XCP's guestOS type, start it as HVM guest");
|
||||
guestOS = "Other install media";
|
||||
}
|
||||
return guestOS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static String getXenServerGuestOsType(String stdType, boolean bootFromCD) {
|
||||
String guestOS = _xenServerGuestOsMap.get(stdType);
|
||||
String guestOS = _xenServerGuestOsMap.get(stdType);
|
||||
if (guestOS == null) {
|
||||
if ( !bootFromCD ) {
|
||||
s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 guestOS type, start it as HVM guest");
|
||||
guestOS = "Other install media";
|
||||
if (!bootFromCD) {
|
||||
s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 guestOS type, start it as HVM guest");
|
||||
guestOS = "Other install media";
|
||||
} else {
|
||||
String msg = "XenServer 5.6 doesn't support Guest OS type " + stdType;
|
||||
s_logger.warn(msg);
|
||||
|
|
@ -374,11 +457,11 @@ public class CitrixHelper {
|
|||
}
|
||||
return guestOS;
|
||||
}
|
||||
|
||||
public static String getXenServer56FP1GuestOsType(String stdType, boolean bootFromCD) {
|
||||
String guestOS = _xenServer56FP1GuestOsMap.get(stdType);
|
||||
|
||||
public static String getXenServer56FP1GuestOsType(String stdType, boolean bootFromCD) {
|
||||
String guestOS = _xenServer56FP1GuestOsMap.get(stdType);
|
||||
if (guestOS == null) {
|
||||
if ( !bootFromCD ) {
|
||||
if (!bootFromCD) {
|
||||
s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 FP1 guestOS type, start it as HVM guest");
|
||||
guestOS = "Other install media";
|
||||
} else {
|
||||
|
|
@ -388,11 +471,11 @@ public class CitrixHelper {
|
|||
}
|
||||
return guestOS;
|
||||
}
|
||||
|
||||
|
||||
public static String getXenServer56SP2GuestOsType(String stdType, boolean bootFromCD) {
|
||||
String guestOS = _xenServer56FP2GuestOsMap.get(stdType);
|
||||
String guestOS = _xenServer56FP2GuestOsMap.get(stdType);
|
||||
if (guestOS == null) {
|
||||
if ( !bootFromCD ) {
|
||||
if (!bootFromCD) {
|
||||
s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 5.6 SP2 guestOS type, start it as HVM guest");
|
||||
guestOS = "Other install media";
|
||||
} else {
|
||||
|
|
@ -402,4 +485,19 @@ public class CitrixHelper {
|
|||
}
|
||||
return guestOS;
|
||||
}
|
||||
|
||||
public static String getXenServer600GuestOsType(String stdType, boolean bootFromCD) {
|
||||
String guestOS = _xenServer600GuestOsMap.get(stdType);
|
||||
if (guestOS == null) {
|
||||
if (!bootFromCD) {
|
||||
s_logger.debug("Can't find the guest os: " + stdType + " mapping into XenServer 6.0 guestOS type, start it as HVM guest");
|
||||
guestOS = "Other install media";
|
||||
} else {
|
||||
String msg = "XenServer 6.0 DOES NOT support Guest OS type " + stdType;
|
||||
s_logger.warn(msg);
|
||||
}
|
||||
|
||||
}
|
||||
return guestOS;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
/**
|
||||
*
|
||||
* This software is licensed under the GNU General Public License v3 or later.
|
||||
*
|
||||
* It is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or any later version.
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
package com.cloud.hypervisor.xen.resource;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.script.Script;
|
||||
|
||||
@Local(value = ServerResource.class)
|
||||
public class XenServer600Resource extends XenServer56Resource {
|
||||
private static final Logger s_logger = Logger.getLogger(XenServer600Resource.class);
|
||||
|
||||
public XenServer600Resource() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getGuestOsType(String stdType, boolean bootFromCD) {
|
||||
return CitrixHelper.getXenServer600GuestOsType(stdType, bootFromCD);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<File> getPatchFiles() {
|
||||
List<File> files = new ArrayList<File>();
|
||||
String patch = "scripts/vm/hypervisor/xenserver/xenserver60/patch";
|
||||
String patchfilePath = Script.findScript("", patch);
|
||||
if (patchfilePath == null) {
|
||||
throw new CloudRuntimeException("Unable to find patch file " + patch);
|
||||
}
|
||||
File file = new File(patchfilePath);
|
||||
files.add(file);
|
||||
return files;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -667,7 +667,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
|
|||
command.add("-t", "nfs");
|
||||
if (_inSystemVM) {
|
||||
//Fedora Core 12 errors out with any -o option executed from java
|
||||
command.add("-o", "soft,timeo=133,retrans=2147483647,tcp,acdirmax=0,acdirmin=0");
|
||||
command.add("-o", "soft,timeo=133,retrans=1,tcp,acdirmax=0,acdirmin=0");
|
||||
}
|
||||
command.add(nfsPath);
|
||||
command.add(root);
|
||||
|
|
|
|||
|
|
@ -1,145 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
# Copyright (C) 2006-2007 XenSource Ltd.
|
||||
# Copyright (C) 2008-2009 Citrix Ltd.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation; version 2.1 only.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# nfs.py: NFS related utility functions
|
||||
|
||||
import util, errno, os, xml.dom.minidom
|
||||
|
||||
# The algorithm for tcp and udp (at least in the linux kernel) for
|
||||
# NFS timeout on softmounts is as follows:
|
||||
#
|
||||
# UDP:
|
||||
# As long as the request wasn't started more than timeo * (2 ^ retrans)
|
||||
# in the past, keep doubling the timeout.
|
||||
#
|
||||
# TCP:
|
||||
# As long as the request wasn't started more than timeo * (1 + retrans)
|
||||
# in the past, keep increaing the timeout by timeo.
|
||||
#
|
||||
# The time when the retrans may retry has been made will be:
|
||||
# For udp: timeo * (2 ^ retrans * 2 - 1)
|
||||
# For tcp: timeo * n! where n is the smallest n for which n! > 1 + retrans
|
||||
#
|
||||
# thus for retrans=1, timeo can be the same for both tcp and udp,
|
||||
# because the first doubling (timeo*2) is the same as the first increment
|
||||
# (timeo+timeo).
|
||||
|
||||
SOFTMOUNT_TIMEOUT = int((40.0/3.0) * 10.0) # 1/10 s
|
||||
SOFTMOUNT_RETRANS = 10
|
||||
RPCINFO_BIN = "/usr/sbin/rpcinfo"
|
||||
SHOWMOUNT_BIN = "/usr/sbin/showmount"
|
||||
|
||||
|
||||
class NfsException(Exception):
|
||||
def __init__(self, errstr):
|
||||
self.errstr = errstr
|
||||
|
||||
|
||||
def check_server_tcp(server):
|
||||
"""Make sure that NFS over TCP/IP V3 is supported on the server.
|
||||
Returns True if everything is OK, False otherwise."""
|
||||
try:
|
||||
util.ioretry(lambda: util.pread([RPCINFO_BIN,"-t",
|
||||
"%s" % server, "nfs","3"]),
|
||||
errlist=[errno.EPERM], maxretry=2, nofail=True)
|
||||
except util.CommandException, inst:
|
||||
raise NfsException("rpcinfo failed or timed out: return code %d" %
|
||||
inst.code)
|
||||
|
||||
|
||||
def soft_mount(mountpoint, remoteserver, remotepath, transport):
|
||||
"""Mount the remote NFS export at 'mountpoint'"""
|
||||
try:
|
||||
if not util.ioretry(lambda: util.isdir(mountpoint)):
|
||||
util.ioretry(lambda: util.makedirs(mountpoint))
|
||||
except util.CommandException, inst:
|
||||
raise NfsException("Failed to make directory: code is %d" %
|
||||
inst.code)
|
||||
|
||||
options = "soft,timeo=%d,retrans=%d,%s,noac" % (SOFTMOUNT_TIMEOUT,
|
||||
SOFTMOUNT_RETRANS,
|
||||
transport)
|
||||
try:
|
||||
util.ioretry(lambda:
|
||||
util.pread(["mount.nfs", "%s:%s"
|
||||
% (remoteserver, remotepath),
|
||||
mountpoint, "-o", options]),
|
||||
errlist=[errno.EPIPE, errno.EIO],
|
||||
maxretry=2, nofail=True)
|
||||
except util.CommandException, inst:
|
||||
raise NfsException("mount failed with return code %d" % inst.code)
|
||||
|
||||
|
||||
def unmount(mountpoint, rmmountpoint):
|
||||
"""Unmount the mounted mountpoint"""
|
||||
try:
|
||||
util.pread(["umount", mountpoint])
|
||||
except util.CommandException, inst:
|
||||
raise NfsException("umount failed with return code %d" % inst.code)
|
||||
|
||||
if rmmountpoint:
|
||||
try:
|
||||
os.rmdir(mountpoint)
|
||||
except OSError, inst:
|
||||
raise NfsException("rmdir failed with error '%s'" % inst.strerror)
|
||||
|
||||
|
||||
def scan_exports(target):
|
||||
util.SMlog("scanning")
|
||||
cmd = [SHOWMOUNT_BIN, "--no-headers", "-e", target]
|
||||
dom = xml.dom.minidom.Document()
|
||||
element = dom.createElement("nfs-exports")
|
||||
dom.appendChild(element)
|
||||
for val in util.pread2(cmd).split('\n'):
|
||||
if not len(val):
|
||||
continue
|
||||
entry = dom.createElement('Export')
|
||||
element.appendChild(entry)
|
||||
|
||||
subentry = dom.createElement("Target")
|
||||
entry.appendChild(subentry)
|
||||
textnode = dom.createTextNode(target)
|
||||
subentry.appendChild(textnode)
|
||||
|
||||
(path, access) = val.split()
|
||||
subentry = dom.createElement("Path")
|
||||
entry.appendChild(subentry)
|
||||
textnode = dom.createTextNode(path)
|
||||
subentry.appendChild(textnode)
|
||||
|
||||
subentry = dom.createElement("Accesslist")
|
||||
entry.appendChild(subentry)
|
||||
textnode = dom.createTextNode(access)
|
||||
subentry.appendChild(textnode)
|
||||
|
||||
return dom
|
||||
|
||||
def scan_srlist(path):
|
||||
dom = xml.dom.minidom.Document()
|
||||
element = dom.createElement("SRlist")
|
||||
dom.appendChild(element)
|
||||
for val in filter(util.match_uuid, util.ioretry( \
|
||||
lambda: util.listdir(path))):
|
||||
fullpath = os.path.join(path, val)
|
||||
if not util.ioretry(lambda: util.isdir(fullpath)):
|
||||
continue
|
||||
|
||||
entry = dom.createElement('SR')
|
||||
element.appendChild(entry)
|
||||
|
||||
subentry = dom.createElement("UUID")
|
||||
entry.appendChild(subentry)
|
||||
textnode = dom.createTextNode(val)
|
||||
subentry.appendChild(textnode)
|
||||
|
||||
return dom.toprettyxml()
|
||||
|
|
@ -10,7 +10,6 @@
|
|||
# If [source path] starts with '~', then it is path relative to management server home directory.
|
||||
# If [source path] does not start with '/' or '~', then it is relative path to the location of the patch file.
|
||||
NFSSR.py=/opt/xensource/sm
|
||||
nfs.py=/opt/xensource/sm
|
||||
vmops=..,0755,/etc/xapi.d/plugins
|
||||
vmopsSnapshot=..,0755,/etc/xapi.d/plugins
|
||||
hostvmstats.py=..,0755,/opt/xensource/sm
|
||||
|
|
|
|||
|
|
@ -1,145 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
# Copyright (C) 2006-2007 XenSource Ltd.
|
||||
# Copyright (C) 2008-2009 Citrix Ltd.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation; version 2.1 only.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# nfs.py: NFS related utility functions
|
||||
|
||||
import util, errno, os, xml.dom.minidom
|
||||
|
||||
# The algorithm for tcp and udp (at least in the linux kernel) for
|
||||
# NFS timeout on softmounts is as follows:
|
||||
#
|
||||
# UDP:
|
||||
# As long as the request wasn't started more than timeo * (2 ^ retrans)
|
||||
# in the past, keep doubling the timeout.
|
||||
#
|
||||
# TCP:
|
||||
# As long as the request wasn't started more than timeo * (1 + retrans)
|
||||
# in the past, keep increaing the timeout by timeo.
|
||||
#
|
||||
# The time when the retrans may retry has been made will be:
|
||||
# For udp: timeo * (2 ^ retrans * 2 - 1)
|
||||
# For tcp: timeo * n! where n is the smallest n for which n! > 1 + retrans
|
||||
#
|
||||
# thus for retrans=1, timeo can be the same for both tcp and udp,
|
||||
# because the first doubling (timeo*2) is the same as the first increment
|
||||
# (timeo+timeo).
|
||||
|
||||
SOFTMOUNT_TIMEOUT = int((40.0/3.0) * 10.0) # 1/10 s
|
||||
SOFTMOUNT_RETRANS = 10
|
||||
RPCINFO_BIN = "/usr/sbin/rpcinfo"
|
||||
SHOWMOUNT_BIN = "/usr/sbin/showmount"
|
||||
|
||||
|
||||
class NfsException(Exception):
|
||||
def __init__(self, errstr):
|
||||
self.errstr = errstr
|
||||
|
||||
|
||||
def check_server_tcp(server):
|
||||
"""Make sure that NFS over TCP/IP V3 is supported on the server.
|
||||
Returns True if everything is OK, False otherwise."""
|
||||
try:
|
||||
util.ioretry(lambda: util.pread([RPCINFO_BIN,"-t",
|
||||
"%s" % server, "nfs","3"]),
|
||||
errlist=[errno.EPERM], maxretry=2, nofail=True)
|
||||
except util.CommandException, inst:
|
||||
raise NfsException("rpcinfo failed or timed out: return code %d" %
|
||||
inst.code)
|
||||
|
||||
|
||||
def soft_mount(mountpoint, remoteserver, remotepath, transport):
|
||||
"""Mount the remote NFS export at 'mountpoint'"""
|
||||
try:
|
||||
if not util.ioretry(lambda: util.isdir(mountpoint)):
|
||||
util.ioretry(lambda: util.makedirs(mountpoint))
|
||||
except util.CommandException, inst:
|
||||
raise NfsException("Failed to make directory: code is %d" %
|
||||
inst.code)
|
||||
|
||||
options = "soft,timeo=%d,retrans=%d,%s,noac" % (SOFTMOUNT_TIMEOUT,
|
||||
SOFTMOUNT_RETRANS,
|
||||
transport)
|
||||
try:
|
||||
util.ioretry(lambda:
|
||||
util.pread(["mount.nfs", "%s:%s"
|
||||
% (remoteserver, remotepath),
|
||||
mountpoint, "-o", options]),
|
||||
errlist=[errno.EPIPE, errno.EIO],
|
||||
maxretry=2, nofail=True)
|
||||
except util.CommandException, inst:
|
||||
raise NfsException("mount failed with return code %d" % inst.code)
|
||||
|
||||
|
||||
def unmount(mountpoint, rmmountpoint):
|
||||
"""Unmount the mounted mountpoint"""
|
||||
try:
|
||||
util.pread(["umount", mountpoint])
|
||||
except util.CommandException, inst:
|
||||
raise NfsException("umount failed with return code %d" % inst.code)
|
||||
|
||||
if rmmountpoint:
|
||||
try:
|
||||
os.rmdir(mountpoint)
|
||||
except OSError, inst:
|
||||
raise NfsException("rmdir failed with error '%s'" % inst.strerror)
|
||||
|
||||
|
||||
def scan_exports(target):
|
||||
util.SMlog("scanning")
|
||||
cmd = [SHOWMOUNT_BIN, "--no-headers", "-e", target]
|
||||
dom = xml.dom.minidom.Document()
|
||||
element = dom.createElement("nfs-exports")
|
||||
dom.appendChild(element)
|
||||
for val in util.pread2(cmd).split('\n'):
|
||||
if not len(val):
|
||||
continue
|
||||
entry = dom.createElement('Export')
|
||||
element.appendChild(entry)
|
||||
|
||||
subentry = dom.createElement("Target")
|
||||
entry.appendChild(subentry)
|
||||
textnode = dom.createTextNode(target)
|
||||
subentry.appendChild(textnode)
|
||||
|
||||
(path, access) = val.split()
|
||||
subentry = dom.createElement("Path")
|
||||
entry.appendChild(subentry)
|
||||
textnode = dom.createTextNode(path)
|
||||
subentry.appendChild(textnode)
|
||||
|
||||
subentry = dom.createElement("Accesslist")
|
||||
entry.appendChild(subentry)
|
||||
textnode = dom.createTextNode(access)
|
||||
subentry.appendChild(textnode)
|
||||
|
||||
return dom
|
||||
|
||||
def scan_srlist(path):
|
||||
dom = xml.dom.minidom.Document()
|
||||
element = dom.createElement("SRlist")
|
||||
dom.appendChild(element)
|
||||
for val in filter(util.match_uuid, util.ioretry( \
|
||||
lambda: util.listdir(path))):
|
||||
fullpath = os.path.join(path, val)
|
||||
if not util.ioretry(lambda: util.isdir(fullpath)):
|
||||
continue
|
||||
|
||||
entry = dom.createElement('SR')
|
||||
element.appendChild(entry)
|
||||
|
||||
subentry = dom.createElement("UUID")
|
||||
entry.appendChild(subentry)
|
||||
textnode = dom.createTextNode(val)
|
||||
subentry.appendChild(textnode)
|
||||
|
||||
return dom.toprettyxml()
|
||||
|
|
@ -10,7 +10,6 @@
|
|||
# If [source path] starts with '~', then it is path relative to management server home directory.
|
||||
# If [source path] does not start with '/' or '~', then it is relative path to the location of the patch file.
|
||||
NFSSR.py=/opt/xensource/sm
|
||||
nfs.py=/opt/xensource/sm
|
||||
vmops=..,0755,/etc/xapi.d/plugins
|
||||
ovsgre=..,0755,/etc/xapi.d/plugins
|
||||
ovstunnel=..,0755,/etc/xapi.d/plugins
|
||||
|
|
|
|||
|
|
@ -0,0 +1,277 @@
|
|||
#!/usr/bin/python
|
||||
# Copyright (C) 2006-2007 XenSource Ltd.
|
||||
# Copyright (C) 2008-2009 Citrix Ltd.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation; version 2.1 only.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# FileSR: local-file storage repository
|
||||
|
||||
import SR, VDI, SRCommand, FileSR, util
|
||||
import errno
|
||||
import os, re, sys
|
||||
import xml.dom.minidom
|
||||
import xmlrpclib
|
||||
import xs_errors
|
||||
import nfs
|
||||
import vhdutil
|
||||
from lock import Lock
|
||||
import cleanup
|
||||
|
||||
CAPABILITIES = ["SR_PROBE","SR_UPDATE", "SR_CACHING",
|
||||
"VDI_CREATE","VDI_DELETE","VDI_ATTACH","VDI_DETACH",
|
||||
"VDI_UPDATE", "VDI_CLONE","VDI_SNAPSHOT","VDI_RESIZE",
|
||||
"VDI_GENERATE_CONFIG",
|
||||
"VDI_RESET_ON_BOOT", "ATOMIC_PAUSE"]
|
||||
|
||||
CONFIGURATION = [ [ 'server', 'hostname or IP address of NFS server (required)' ], \
|
||||
[ 'serverpath', 'path on remote server (required)' ] ]
|
||||
|
||||
|
||||
DRIVER_INFO = {
|
||||
'name': 'NFS VHD',
|
||||
'description': 'SR plugin which stores disks as VHD files on a remote NFS filesystem',
|
||||
'vendor': 'Citrix Systems Inc',
|
||||
'copyright': '(C) 2008 Citrix Systems Inc',
|
||||
'driver_version': '1.0',
|
||||
'required_api_version': '1.0',
|
||||
'capabilities': CAPABILITIES,
|
||||
'configuration': CONFIGURATION
|
||||
}
|
||||
|
||||
DRIVER_CONFIG = {"ATTACH_FROM_CONFIG_WITH_TAPDISK": True}
|
||||
|
||||
|
||||
# The mountpoint for the directory when performing an sr_probe. All probes
|
||||
# are guaranteed to be serialised by xapi, so this single mountpoint is fine.
|
||||
PROBE_MOUNTPOINT = "probe"
|
||||
NFSPORT = 2049
|
||||
DEFAULT_TRANSPORT = "tcp"
|
||||
|
||||
|
||||
class NFSSR(FileSR.FileSR):
|
||||
"""NFS file-based storage repository"""
|
||||
def handles(type):
|
||||
return type == 'nfs'
|
||||
handles = staticmethod(handles)
|
||||
|
||||
|
||||
def load(self, sr_uuid):
|
||||
self.ops_exclusive = FileSR.OPS_EXCLUSIVE
|
||||
self.lock = Lock(vhdutil.LOCK_TYPE_SR, self.uuid)
|
||||
self.sr_vditype = SR.DEFAULT_TAP
|
||||
self.driver_config = DRIVER_CONFIG
|
||||
if not self.dconf.has_key('server'):
|
||||
raise xs_errors.XenError('ConfigServerMissing')
|
||||
self.remoteserver = self.dconf['server']
|
||||
self.path = os.path.join(SR.MOUNT_BASE, sr_uuid)
|
||||
|
||||
# Test for the optional 'nfsoptions' dconf attribute
|
||||
self.transport = DEFAULT_TRANSPORT
|
||||
if self.dconf.has_key('useUDP') and self.dconf['useUDP'] == 'true':
|
||||
self.transport = "udp"
|
||||
|
||||
|
||||
def validate_remotepath(self, scan):
|
||||
if not self.dconf.has_key('serverpath'):
|
||||
if scan:
|
||||
try:
|
||||
self.scan_exports(self.dconf['server'])
|
||||
except:
|
||||
pass
|
||||
raise xs_errors.XenError('ConfigServerPathMissing')
|
||||
if not self._isvalidpathstring(self.dconf['serverpath']):
|
||||
raise xs_errors.XenError('ConfigServerPathBad', \
|
||||
opterr='serverpath is %s' % self.dconf['serverpath'])
|
||||
|
||||
def check_server(self):
|
||||
try:
|
||||
nfs.check_server_tcp(self.remoteserver)
|
||||
except nfs.NfsException, exc:
|
||||
raise xs_errors.XenError('NFSVersion',
|
||||
opterr=exc.errstr)
|
||||
|
||||
|
||||
def mount(self, mountpoint, remotepath):
|
||||
try:
|
||||
nfs.soft_mount(mountpoint, self.remoteserver, remotepath, self.transport)
|
||||
except nfs.NfsException, exc:
|
||||
raise xs_errors.XenError('NFSMount', opterr=exc.errstr)
|
||||
|
||||
|
||||
def attach(self, sr_uuid):
|
||||
self.validate_remotepath(False)
|
||||
#self.remotepath = os.path.join(self.dconf['serverpath'], sr_uuid)
|
||||
self.remotepath = self.dconf['serverpath']
|
||||
util._testHost(self.dconf['server'], NFSPORT, 'NFSTarget')
|
||||
self.mount_remotepath(sr_uuid)
|
||||
|
||||
|
||||
def mount_remotepath(self, sr_uuid):
|
||||
if not self._checkmount():
|
||||
self.check_server()
|
||||
self.mount(self.path, self.remotepath)
|
||||
|
||||
return super(NFSSR, self).attach(sr_uuid)
|
||||
|
||||
|
||||
def probe(self):
|
||||
# Verify NFS target and port
|
||||
util._testHost(self.dconf['server'], NFSPORT, 'NFSTarget')
|
||||
|
||||
self.validate_remotepath(True)
|
||||
self.check_server()
|
||||
|
||||
temppath = os.path.join(SR.MOUNT_BASE, PROBE_MOUNTPOINT)
|
||||
|
||||
self.mount(temppath, self.dconf['serverpath'])
|
||||
try:
|
||||
return nfs.scan_srlist(temppath)
|
||||
finally:
|
||||
try:
|
||||
nfs.unmount(temppath, True)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def detach(self, sr_uuid):
|
||||
"""Detach the SR: Unmounts and removes the mountpoint"""
|
||||
if not self._checkmount():
|
||||
return
|
||||
util.SMlog("Aborting GC/coalesce")
|
||||
cleanup.abort(self.uuid)
|
||||
|
||||
# Change directory to avoid unmount conflicts
|
||||
os.chdir(SR.MOUNT_BASE)
|
||||
|
||||
try:
|
||||
nfs.unmount(self.path, True)
|
||||
except nfs.NfsException, exc:
|
||||
raise xs_errors.XenError('NFSUnMount', opterr=exc.errstr)
|
||||
|
||||
return super(NFSSR, self).detach(sr_uuid)
|
||||
|
||||
|
||||
def create(self, sr_uuid, size):
|
||||
util._testHost(self.dconf['server'], NFSPORT, 'NFSTarget')
|
||||
self.validate_remotepath(True)
|
||||
if self._checkmount():
|
||||
raise xs_errors.XenError('NFSAttached')
|
||||
|
||||
# Set the target path temporarily to the base dir
|
||||
# so that we can create the target SR directory
|
||||
self.remotepath = self.dconf['serverpath']
|
||||
try:
|
||||
self.mount_remotepath(sr_uuid)
|
||||
except Exception, exn:
|
||||
try:
|
||||
os.rmdir(self.path)
|
||||
except:
|
||||
pass
|
||||
raise exn
|
||||
|
||||
#newpath = os.path.join(self.path, sr_uuid)
|
||||
#if util.ioretry(lambda: util.pathexists(newpath)):
|
||||
# if len(util.ioretry(lambda: util.listdir(newpath))) != 0:
|
||||
# self.detach(sr_uuid)
|
||||
# raise xs_errors.XenError('SRExists')
|
||||
#else:
|
||||
# try:
|
||||
# util.ioretry(lambda: util.makedirs(newpath))
|
||||
# except util.CommandException, inst:
|
||||
# if inst.code != errno.EEXIST:
|
||||
# self.detach(sr_uuid)
|
||||
# raise xs_errors.XenError('NFSCreate',
|
||||
# opterr='remote directory creation error is %d'
|
||||
# % inst.code)
|
||||
self.detach(sr_uuid)
|
||||
|
||||
def delete(self, sr_uuid):
|
||||
# try to remove/delete non VDI contents first
|
||||
super(NFSSR, self).delete(sr_uuid)
|
||||
try:
|
||||
if self._checkmount():
|
||||
self.detach(sr_uuid)
|
||||
|
||||
# Set the target path temporarily to the base dir
|
||||
# so that we can remove the target SR directory
|
||||
self.remotepath = self.dconf['serverpath']
|
||||
self.mount_remotepath(sr_uuid)
|
||||
newpath = os.path.join(self.path, sr_uuid)
|
||||
|
||||
if util.ioretry(lambda: util.pathexists(newpath)):
|
||||
util.ioretry(lambda: os.rmdir(newpath))
|
||||
self.detach(sr_uuid)
|
||||
except util.CommandException, inst:
|
||||
self.detach(sr_uuid)
|
||||
if inst.code != errno.ENOENT:
|
||||
raise xs_errors.XenError('NFSDelete')
|
||||
|
||||
def vdi(self, uuid, loadLocked = False):
|
||||
if not loadLocked:
|
||||
return NFSFileVDI(self, uuid)
|
||||
return NFSFileVDI(self, uuid)
|
||||
|
||||
def _checkmount(self):
|
||||
return util.ioretry(lambda: util.pathexists(self.path)) \
|
||||
and util.ioretry(lambda: util.ismount(self.path))
|
||||
|
||||
def scan_exports(self, target):
|
||||
util.SMlog("scanning2 (target=%s)" % target)
|
||||
dom = nfs.scan_exports(target)
|
||||
print >>sys.stderr,dom.toprettyxml()
|
||||
|
||||
class NFSFileVDI(FileSR.FileVDI):
|
||||
def attach(self, sr_uuid, vdi_uuid):
|
||||
if self.sr.srcmd.params.has_key("vdi_ref"):
|
||||
try:
|
||||
vdi_ref = self.sr.srcmd.params['vdi_ref']
|
||||
self.session.xenapi.VDI.remove_from_xenstore_data(vdi_ref, \
|
||||
"vdi-type")
|
||||
self.session.xenapi.VDI.remove_from_xenstore_data(vdi_ref, \
|
||||
"storage-type")
|
||||
self.session.xenapi.VDI.add_to_xenstore_data(vdi_ref, \
|
||||
"storage-type", "nfs")
|
||||
except:
|
||||
util.logException("NFSSR:attach")
|
||||
pass
|
||||
|
||||
return super(NFSFileVDI, self).attach(sr_uuid, vdi_uuid)
|
||||
|
||||
def generate_config(self, sr_uuid, vdi_uuid):
|
||||
util.SMlog("NFSFileVDI.generate_config")
|
||||
if not util.pathexists(self.path):
|
||||
raise xs_errors.XenError('VDIUnavailable')
|
||||
resp = {}
|
||||
resp['device_config'] = self.sr.dconf
|
||||
resp['sr_uuid'] = sr_uuid
|
||||
resp['vdi_uuid'] = vdi_uuid
|
||||
resp['command'] = 'vdi_attach_from_config'
|
||||
# Return the 'config' encoded within a normal XMLRPC response so that
|
||||
# we can use the regular response/error parsing code.
|
||||
config = xmlrpclib.dumps(tuple([resp]), "vdi_attach_from_config")
|
||||
return xmlrpclib.dumps((config,), "", True)
|
||||
|
||||
def attach_from_config(self, sr_uuid, vdi_uuid):
|
||||
"""Used for HA State-file only. Will not just attach the VDI but
|
||||
also start a tapdisk on the file"""
|
||||
util.SMlog("NFSFileVDI.attach_from_config")
|
||||
try:
|
||||
if not util.pathexists(self.sr.path):
|
||||
self.sr.attach(sr_uuid)
|
||||
except:
|
||||
util.logException("NFSFileVDI.attach_from_config")
|
||||
raise xs_errors.XenError('SRUnavailable', \
|
||||
opterr='Unable to attach from config')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
SRCommand.run(NFSSR, DRIVER_INFO)
|
||||
else:
|
||||
SR.registerSR(NFSSR)
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
# This file specifies the files that need
|
||||
# to be transferred over to the XenServer.
|
||||
# The format of this file is as follows:
|
||||
# [Name of file]=[source path],[file permission],[destination path]
|
||||
# [destination path] is required.
|
||||
# If [file permission] is missing, 755 is assumed.
|
||||
# If [source path] is missing, it looks in the same
|
||||
# directory as the patch file.
|
||||
# If [source path] starts with '/', then it is absolute path.
|
||||
# If [source path] starts with '~', then it is path relative to management server home directory.
|
||||
# If [source path] does not start with '/' or '~', then it is relative path to the location of the patch file.
|
||||
NFSSR.py=/opt/xensource/sm
|
||||
vmops=..,0755,/etc/xapi.d/plugins
|
||||
ovsgre=..,0755,/etc/xapi.d/plugins
|
||||
ovstunnel=..,0755,/etc/xapi.d/plugins
|
||||
vmopsSnapshot=..,0755,/etc/xapi.d/plugins
|
||||
hostvmstats.py=..,0755,/opt/xensource/sm
|
||||
systemvm.iso=../../../../../vms,0644,/opt/xensource/packages/iso
|
||||
id_rsa.cloud=../../../systemvm,0600,/root/.ssh
|
||||
network_info.sh=..,0755,/opt/xensource/bin
|
||||
setupxenserver.sh=..,0755,/opt/xensource/bin
|
||||
make_migratable.sh=..,0755,/opt/xensource/bin
|
||||
setup_iscsi.sh=..,0755,/opt/xensource/bin
|
||||
pingtest.sh=../../..,0755,/opt/xensource/bin
|
||||
dhcp_entry.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
ipassoc.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
vm_data.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
save_password_to_domr.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
networkUsage.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
call_firewall.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
call_loadbalancer.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
l2tp_vpn.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
cloud-setup-bonding.sh=..,0755,/opt/xensource/bin
|
||||
copy_vhd_to_secondarystorage.sh=..,0755,/opt/xensource/bin
|
||||
copy_vhd_from_secondarystorage.sh=..,0755,/opt/xensource/bin
|
||||
setup_heartbeat_sr.sh=..,0755,/opt/xensource/bin
|
||||
setup_heartbeat_file.sh=..,0755,/opt/xensource/bin
|
||||
check_heartbeat.sh=..,0755,/opt/xensource/bin
|
||||
xenheartbeat.sh=..,0755,/opt/xensource/bin
|
||||
launch_hb.sh=..,0755,/opt/xensource/bin
|
||||
vhd-util=..,0755,/opt/xensource/bin
|
||||
vmopspremium=..,0755,/etc/xapi.d/plugins
|
||||
create_privatetemplate_from_snapshot.sh=..,0755,/opt/xensource/bin
|
||||
upgrade_snapshot.sh=..,0755,/opt/xensource/bin
|
||||
cloud-clean-vlan.sh=..,0755,/opt/xensource/bin
|
||||
cloud-prepare-upgrade.sh=..,0755,/opt/xensource/bin
|
||||
getRouterStatus.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
bumpUpPriority.sh=../../../../network/domr/,0755,/opt/xensource/bin
|
||||
|
|
@ -63,6 +63,7 @@ import com.cloud.hypervisor.xen.resource.XcpServerResource;
|
|||
import com.cloud.hypervisor.xen.resource.XenServer56FP1Resource;
|
||||
import com.cloud.hypervisor.xen.resource.XenServer56Resource;
|
||||
import com.cloud.hypervisor.xen.resource.XenServer56SP2Resource;
|
||||
import com.cloud.hypervisor.xen.resource.XenServer600Resource;
|
||||
import com.cloud.hypervisor.xen.resource.XenServerConnectionPool;
|
||||
import com.cloud.resource.Discoverer;
|
||||
import com.cloud.resource.DiscovererBase;
|
||||
|
|
@ -393,6 +394,9 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
|||
if(prodBrand.equals("XenServer") && prodVersion.equals("5.6.0"))
|
||||
return new XenServer56Resource();
|
||||
|
||||
if(prodBrand.equals("XenServer") && prodVersion.equals("6.0.0"))
|
||||
return new XenServer600Resource();
|
||||
|
||||
if(prodBrand.equals("XenServer") && prodVersion.equals("5.6.100")) {
|
||||
String prodVersionTextShort = record.softwareVersion.get("product_version_text_short").trim();
|
||||
if("5.6 SP2".equals(prodVersionTextShort)) {
|
||||
|
|
@ -533,6 +537,8 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L
|
|||
resource = XcpServerResource.class.getName();
|
||||
} else if(prodBrand.equals("XenServer") && prodVersion.equals("5.6.0")) {
|
||||
resource = XenServer56Resource.class.getName();
|
||||
} else if(prodBrand.equals("XenServer") && prodVersion.equals("6.0.0")) {
|
||||
resource = XenServer600Resource.class.getName();
|
||||
} else if(prodBrand.equals("XenServer") && prodVersion.equals("5.6.100")) {
|
||||
String prodVersionTextShort = details.get("product_version_text_short").trim();
|
||||
if("5.6 SP2".equals(prodVersionTextShort)) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue