diff --git a/build/build-cloud.xml b/build/build-cloud.xml index db9e5a7c5af..4d52d08bb01 100755 --- a/build/build-cloud.xml +++ b/build/build-cloud.xml @@ -107,6 +107,10 @@ + + + + @@ -519,7 +523,8 @@ - + + @@ -531,8 +536,26 @@ - - + + + + + + + + + + + + + + + + + + + + diff --git a/build/developer.xml b/build/developer.xml index 77d760b2af7..33d77a6c85a 100755 --- a/build/developer.xml +++ b/build/developer.xml @@ -100,7 +100,7 @@ - + @@ -114,7 +114,6 @@ - diff --git a/build/package.xml b/build/package.xml index 82781c61a2f..fce58ddcd5e 100755 --- a/build/package.xml +++ b/build/package.xml @@ -94,7 +94,7 @@ - + @@ -103,6 +103,18 @@ + + + + + + + + + + + + @@ -123,7 +135,7 @@ - + diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index ce698854bbe..91141cff203 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -110,7 +110,9 @@ - + + + diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index d88b50528cd..cf552dabc4c 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -152,6 +152,7 @@ import com.cloud.host.Host.Type; import com.cloud.hypervisor.Hypervisor; import com.cloud.network.Network.BroadcastDomainType; import com.cloud.network.Network.TrafficType; +import com.cloud.hypervisor.xen.resource.XenServerConnectionPool.XenServerConnection; import com.cloud.resource.ServerResource; import com.cloud.storage.Storage; import com.cloud.storage.Storage.ImageFormat; @@ -1063,29 +1064,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR } protected Answer execute(ModifySshKeysCommand cmd) { - String publickey = cmd.getPubKey(); - String privatekey = cmd.getPrvKey(); - - com.trilead.ssh2.Connection sshConnection = new com.trilead.ssh2.Connection(_host.ip, 22); - try { - sshConnection.connect(null, 60000, 60000); - if (!sshConnection.authenticateWithPassword(_username, _password)) { - throw new Exception("Unable to authenticate"); - } - SCPClient scp = new SCPClient(sshConnection); - - scp.put(publickey.getBytes(), "id_rsa.pub", "/opt/xensource/bin", "0600"); - scp.put(privatekey.getBytes(), "id_rsa", "/opt/xensource/bin", "0600"); - scp.put(privatekey.getBytes(), "id_rsa.cloud", "/root/.ssh", "0600"); - return new Answer(cmd); - - } catch (Exception e) { - String msg = " scp ssh key failed due to " + e.toString() + " - " + e.getMessage(); - s_logger.warn(msg); - } finally { - sshConnection.close(); - } - return new Answer(cmd, false, "modifySshkeys failed"); + return new Answer(cmd); } private boolean doPingTest(final String computingHostIp) { @@ -3187,13 +3166,6 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR Ternary mount = mounts.get(0); - if (!patchSystemVm(mount.second(), vmName)) { // FIXME make this - // nonspecific - String msg = "patch system vm failed"; - s_logger.warn(msg); - return msg; - } - Set templates = VM.getByNameLabel(conn, "CentOS 5.3"); if (templates.size() == 0) { templates = VM.getByNameLabel(conn, "CentOS 5.3 (64-bit)"); @@ -3232,6 +3204,17 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR vbdr.type = Types.VbdType.DISK; VBD.create(conn, vbdr); + + /* create CD-ROM VBD */ + VBD.Record cdromVBDR = new VBD.Record(); + cdromVBDR.VM = vm; + cdromVBDR.empty = true; + cdromVBDR.bootable = false; + cdromVBDR.userdevice = "3"; + cdromVBDR.mode = Types.VbdMode.RO; + cdromVBDR.type = Types.VbdType.CD; + VBD cdromVBD = VBD.create(conn, cdromVBDR); + cdromVBD.insert(conn, VDI.getByUuid(conn, _host.systemvmisouuid)); /* create VIF0 */ VIF.Record vifr = new VIF.Record(); @@ -3508,8 +3491,6 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR s_logger.debug("Slave logon successful. session= " + slaveSession); } Host host = Host.getByUuid(slaveConn, _host.uuid); - - for (int i = 0; i < params.length; i += 2) { args.put(params[i], params[i + 1]); } @@ -4013,7 +3994,38 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR try { Host myself = Host.getByUuid(conn, _host.uuid); _host.pool = getPoolUuid(); + + boolean findsystemvmiso = false; + Set srs = SR.getByNameLabel(conn, "XenServer Tools"); + if( srs.size() != 1 ) { + throw new CloudRuntimeException("There are " + srs.size() + " SRs with name XenServer Tools"); + } + SR sr = srs.iterator().next(); + sr.scan(conn); + SR.Record srr = sr.getRecord(conn); + _host.systemvmisouuid = null; + for( VDI vdi : srr.VDIs ) { + VDI.Record vdir = vdi.getRecord(conn); + if(vdir.nameLabel.contains("systemvm-premium")){ + _host.systemvmisouuid = vdir.uuid; + break; + } + } + if( _host.systemvmisouuid == null ) { + for( VDI vdi : srr.VDIs ) { + VDI.Record vdir = vdi.getRecord(conn); + if(vdir.nameLabel.contains("systemvm")){ + _host.systemvmisouuid = vdir.uuid; + break; + } + } + } + + if( _host.systemvmisouuid == null ) { + throw new CloudRuntimeException("can not find systemvmiso"); + } + String name = "cloud-private"; if (_privateNetworkName != null) { name = _privateNetworkName; @@ -4344,17 +4356,13 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR scp.put(f, d, p); } + } catch (IOException e) { throw new CloudRuntimeException("Unable to setup the server correctly", e); } finally { sshConnection.close(); } - try { - // wait 2 seconds before call plugin - Thread.sleep(2000); - } catch (final InterruptedException ex) { - } if (!setIptables()) { s_logger.warn("set xenserver Iptable failed"); } @@ -6639,6 +6647,7 @@ public abstract class CitrixResourceBase implements StoragePoolResource, ServerR // the resource first connects to XenServer. These UUIDs do // not change over time. protected class XenServerHost { + public String systemvmisouuid; public String uuid; public String ip; public String publicNetwork; diff --git a/patches/xenserver/etc/sysconfig/iptables-domr b/patches/xenserver/etc/sysconfig/iptables-domr new file mode 100644 index 00000000000..3bc7b50f74a --- /dev/null +++ b/patches/xenserver/etc/sysconfig/iptables-domr @@ -0,0 +1,24 @@ +*nat +:PREROUTING ACCEPT [0:0] +:POSTROUTING ACCEPT [0:0] +:OUTPUT ACCEPT [0:0] +COMMIT +*filter +:INPUT DROP [0:0] +:FORWARD DROP [0:0] +:OUTPUT ACCEPT [0:0] +-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT +-A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT +-A INPUT -i eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT +-A INPUT -p icmp -j ACCEPT +-A INPUT -i lo -j ACCEPT +-A INPUT -i eth0 -p udp -m udp --dport 67 -j ACCEPT +-A INPUT -i eth0 -p udp -m udp --dport 53 -j ACCEPT +-A INPUT -i eth1 -p tcp -m state --state NEW --dport 3922 -j ACCEPT +-A INPUT -i eth0 -p tcp -m state --state NEW --dport 8080 -j ACCEPT +-A INPUT -i eth0 -p tcp -m state --state NEW --dport 80 -j ACCEPT +-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT +-A FORWARD -i eth0 -o eth2 -j ACCEPT +-A FORWARD -i eth2 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT +COMMIT + diff --git a/patches/xenserver/root/.ssh/authorized_keys b/patches/xenserver/root/.ssh/authorized_keys new file mode 100644 index 00000000000..2cb275c2582 --- /dev/null +++ b/patches/xenserver/root/.ssh/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA3VD1tGRDn3stlJvPNXmQZdQCNjqcfY+xlitd5q0n3KYqJ5OBrty3/00XBUdLt31TbQ4dv+GR7uEr+ex7rm0jjmTFKV4rHYPi882CuC5+bkBp5R4k+mpcyKbxb+IoNS9ItbiExQxMiiRQpHvNem0GGnNFO3lElRPwUFs8evTvZu5HcTj4k4RJLJ66jeIGJ3sMAJ03SICGwfEZjrsyeOMwJk7cH8WNeuNzxzoZd9v02eI0lHdK9O5z7FwrxvRBbzsmJ0EwuhbH8pR7WR6kGLTNP9KEwtrnzV1LYWd+rFoSeh6ImExG7fma3Ldydg8CPTQsjvCEQUxiuV1/x5am5VJlUw== root@r-6-TEST diff --git a/patches/xenserver/root/patchsystemvm.sh b/patches/xenserver/root/patchsystemvm.sh new file mode 100755 index 00000000000..f878ea11aa8 --- /dev/null +++ b/patches/xenserver/root/patchsystemvm.sh @@ -0,0 +1,121 @@ +#/bin/bash +# $Id: patchsystemvm.sh 10800 2010-07-16 13:48:39Z edison $ $HeadURL: svn://svn.lab.vmops.com/repos/branches/2.1.x/java/scripts/vm/hypervisor/xenserver/prepsystemvm.sh $ + +#set -x +logfile="/var/log/patchsystemvm.log" +# +# To use existing console proxy .zip-based package file +# +patch_console_proxy() { + local patchfile=$1 + rm /usr/local/cloud/systemvm -rf + mkdir -p /usr/local/cloud/systemvm + echo "All" | unzip $patchfile -d /usr/local/cloud/systemvm >$logfile 2>&1 + find /usr/local/cloud/systemvm/ -name \*.sh | xargs chmod 555 + return 0 +} + +consoleproxy_svcs() { + chkconfig cloud on + chkconfig postinit on + chkconfig domr_webserver off + chkconfig haproxy off ; + chkconfig dnsmasq off + chkconfig sshd on + chkconfig httpd off + chkconfig nfs off + chkconfig nfslock off + chkconfig rpcbind off + chkconfig rpcidmap off + cp /etc/sysconfig/iptables-consoleproxy /etc/sysconfig/iptables + mkdir -p /var/log/cloud +} + +secstorage_svcs() { + chkconfig cloud on + chkconfig postinit on + chkconfig domr_webserver off + chkconfig haproxy off ; + chkconfig dnsmasq off + chkconfig sshd on + chkconfig httpd off + cp /etc/sysconfig/iptables-secstorage /etc/sysconfig/iptables + mkdir -p /var/log/cloud +} + +routing_svcs() { + chkconfig cloud off + chkconfig domr_webserver on ; + chkconfig haproxy on ; + chkconfig dnsmasq on + chkconfig sshd on + chkconfig nfs off + chkconfig nfslock off + chkconfig rpcbind off + chkconfig rpcidmap off + cp /etc/sysconfig/iptables-domr /etc/sysconfig/iptables +} + +CMDLINE=$(cat /proc/cmdline) +TYPE="router" + +for i in $CMDLINE + do + # search for foo=bar pattern and cut out foo + KEY=$(echo $i | cut -d= -f1) + VALUE=$(echo $i | cut -d= -f2) + case $KEY in + type) + TYPE=$VALUE + ;; + *) + ;; + esac +done + +if [ "$TYPE" == "consoleproxy" ] || [ "$TYPE" == "secstorage" ] && [ -f /media/cdrom/systemvm.zip ] +then + patch_console_proxy /media/cdrom/systemvm.zip + if [ $? -gt 0 ] + then + printf "Failed to apply patch systemvm\n" >$logfile + exit 5 + fi +fi + + +#empty known hosts +echo "" > /root/.ssh/known_hosts + +if [ "$TYPE" == "router" ] +then + routing_svcs + if [ $? -gt 0 ] + then + printf "Failed to execute routing_svcs\n" >$logfile + exit 6 + fi +fi + + +if [ "$TYPE" == "consoleproxy" ] +then + consoleproxy_svcs + if [ $? -gt 0 ] + then + printf "Failed to execute consoleproxy_svcs\n" >$logfile + exit 7 + fi +fi + +if [ "$TYPE" == "secstorage" ] +then + secstorage_svcs + if [ $? -gt 0 ] + then + printf "Failed to execute secstorage_svcs\n" >$logfile + exit 8 + fi +fi + +exit $? diff --git a/scripts/vm/hypervisor/xenserver/id_rsa.cloud b/scripts/vm/hypervisor/xenserver/id_rsa.cloud new file mode 100644 index 00000000000..ea46a3cebb6 --- /dev/null +++ b/scripts/vm/hypervisor/xenserver/id_rsa.cloud @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEA3VD1tGRDn3stlJvPNXmQZdQCNjqcfY+xlitd5q0n3KYqJ5OB +rty3/00XBUdLt31TbQ4dv+GR7uEr+ex7rm0jjmTFKV4rHYPi882CuC5+bkBp5R4k ++mpcyKbxb+IoNS9ItbiExQxMiiRQpHvNem0GGnNFO3lElRPwUFs8evTvZu5HcTj4 +k4RJLJ66jeIGJ3sMAJ03SICGwfEZjrsyeOMwJk7cH8WNeuNzxzoZd9v02eI0lHdK +9O5z7FwrxvRBbzsmJ0EwuhbH8pR7WR6kGLTNP9KEwtrnzV1LYWd+rFoSeh6ImExG +7fma3Ldydg8CPTQsjvCEQUxiuV1/x5am5VJlUwIBIwKCAQEA0KtrUk/n/MSYsLAp +xLRyNB+qUGMl1Xjao4f5cxhKJ8/emlfgrC8xI+mZXL+QiG7ZoVZz0ixzprcMNMkG +5kmlLnxE3dxxy18Xz+2nIq9+hTVrKHuB82uZT3jVAxcP96GcU5C3snlPeu8KNK8+ +FFgqU3P/cpbo5FSgwMsNI3k5fkyffYtmBdtjZhWXJqnA9+bMdCmYEKyQFWp18LvV +pjGx1jLFZTx9+aDz7gdIk21zbVXmwQmnS1fVKJEByTMvokpvdJUvDedvpgqGqX/g +IXkTXe49pYhYwxVguLK6FXyQBwOuUsnur2A79T3wBvzEMozkYLkEG/zcw0fyo3iC +fdzc6wKBgQD2gq+kUc2r/+xE+smIej2ICvFZZlSh1ko2tVmVUHuuuMCuBt054Dq9 +mf8/yIbXSvVtuBMJ+jewVnKfhucEQKf6E1jBdQShezlomFLOQ8cFQJhT6tAwJl/k +TR+OjeTuOcBknkE8nstNt7hAkZxY6h/Lu54OM9AkXyZ9skx7gHh+IwKBgQDl1f09 +YkoM9rqXM8lMKjF0z81T4ACCaFUA6ZKjSZelyG+azJDlRFNWX1In3Kq6aInpZPzs +owwIS9tjkXIaLR1wDJ+K8IGJQ19sqCzv3/kBCDXA6mqXkkPR80xRi4wuZ3lETOdL +OBXPffuQaKxk32esqsxK6As1LgH4+048JS23EQKBgQCpCSf7pc7cV7f0yTm8q5fo +QgSVEvg0da87dQo6gFTPlKFhY8rl25X+WvgrvLQ726D6x12DLzwhJVXpu5cY2+Dl +/qNC0+XrEqsF5MsRGIh4oVKCr6SzTYOVPDLlaJz7IElpkRbKe4QYCPNfecpLmTpf +0Rvse0zlvZa8l4Tm+QIqmwKBgBOzQZeMFPnMAV1q1r1is8gvEZl5maTHHTqXrXu1 +2cxhoyqGkBOmxVCL09eH8WBvXEc0irUyjAC2C32QH7kZz1K/QOAF/Hl6zao6TP6e +K0k7N861AdJ6QFPTBoqlj6w0wUBeXPfRm3gvXrSbQfoEhTqvjdqI6wSO6jnpp57B +W7CbAoGABFHMVXEyT3SliMSRtiCuDOrtl9E/aiOByPulXolqth5WDSel31Lz+iY7 +ldOLNQO/oononTStdd0fDGChl3WXBSOToJJ/HjIWH05bDY9n2EDAyZvmaW9rX3JQ +pH9c/1vlD9lxDEBvq4JXmTtdL0Ho00F5vVHnWnwINtfx6c5BIjg= +-----END RSA PRIVATE KEY----- diff --git a/scripts/vm/hypervisor/xenserver/xenserver56/patch b/scripts/vm/hypervisor/xenserver/xenserver56/patch index 15b8908ddb5..14b4039c5a2 100644 --- a/scripts/vm/hypervisor/xenserver/xenserver56/patch +++ b/scripts/vm/hypervisor/xenserver/xenserver56/patch @@ -18,9 +18,12 @@ nfs.py=/opt/xensource/sm patch.tgz=..,0775,/opt/xensource/bin vmops=..,0755,/etc/xapi.d/plugins vmopsSnapshot=..,0755,/etc/xapi.d/plugins -systemvm-premium.zip=../../../../../vms,0755,/opt/xensource/bin -hostvmstats.py=..,0755,/opt/xensource/sm xs_cleanup.sh=..,0755,/opt/xensource/bin +systemvm-premium.iso=../../../../../vms,0644,/opt/xensource/packages/iso +systemvm.iso=../../../../../vms,0644,/opt/xensource/packages/iso +hostvmstats.py=..,0755,/opt/xensource/sm +id_rsa.cloud=..,0600,/opt/xensource/bin +id_rsa.cloud=..,0600,/root/.ssh network_info.sh=..,0755,/opt/xensource/bin prepsystemvm.sh=..,0755,/opt/xensource/bin setupxenserver.sh=..,0755,/opt/xensource/bin diff --git a/server/src/com/cloud/alert/AlertManagerImpl.java b/server/src/com/cloud/alert/AlertManagerImpl.java index 378bc5dc699..033b1ba3282 100644 --- a/server/src/com/cloud/alert/AlertManagerImpl.java +++ b/server/src/com/cloud/alert/AlertManagerImpl.java @@ -153,7 +153,8 @@ public class AlertManagerImpl implements AlertManager { smtpDebug = Boolean.parseBoolean(smtpDebugStr); } - _emailAlert = new EmailAlert(emailAddresses, smtpHost, smtpPort, useAuth, smtpUsername, smtpPassword, emailSender, smtpDebug); + _emailAlert = new EmailAlert(emailAddresses, smtpHost, smtpPort, useAuth, smtpUsername, smtpPassword, emailSender, smtpDebug); + _emailAlert = null; String storageCapacityThreshold = configs.get("storage.capacity.threshold"); String cpuCapacityThreshold = configs.get("cpu.capacity.threshold"); diff --git a/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java b/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java index 049d9a70923..e7dc2a20fbb 100644 --- a/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/xen/discoverer/XcpServerDiscoverer.java @@ -52,6 +52,7 @@ import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.xen.resource.CitrixResourceBase; import com.cloud.hypervisor.xen.resource.XcpServerResource; +import com.cloud.hypervisor.xen.resource.XenServerResource; import com.cloud.hypervisor.xen.resource.XenServerConnectionPool; import com.cloud.resource.Discoverer; import com.cloud.resource.DiscovererBase; @@ -382,10 +383,10 @@ public class XcpServerDiscoverer extends DiscovererBase implements Discoverer, L if(prodBrand.equals("XenCloudPlatform") && prodVersion.equals("0.1.1")) return new XcpServerResource(); -// if(prodBrand.equals("XenServer") && prodVersion.equals("5.6.0")) -// return new XenServerResource(); + if(prodBrand.equals("XenServer") && prodVersion.equals("5.6.0")) + return new XenServerResource(); - String msg = "Only support XCP 0.1.1 and Xerver 5.6.0, but this one is " + prodBrand + " " + prodVersion; + String msg = "Only support XCP 0.1.1 and XenServer 5.6.0, but this one is " + prodBrand + " " + prodVersion; _alertMgr.sendAlert(AlertManager.ALERT_TYPE_HOST, dcId, podId, msg, msg); s_logger.debug(msg); throw new RuntimeException(msg);