diff --git a/build/build-devcloud.xml b/build/build-devcloud.xml
index 06bdf69c36f..5b7bcdb7eee 100644
--- a/build/build-devcloud.xml
+++ b/build/build-devcloud.xml
@@ -35,12 +35,14 @@
-
+
+
+
@@ -51,7 +53,7 @@
-
+
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
index ef44f5effa0..d4260c72930 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/XcpOssResource.java
@@ -31,10 +31,18 @@ import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.NetworkUsageAnswer;
import com.cloud.agent.api.NetworkUsageCommand;
+import com.cloud.agent.api.StartAnswer;
+import com.cloud.agent.api.StartCommand;
import com.cloud.agent.api.StartupRoutingCommand;
+import com.cloud.agent.api.StopAnswer;
+import com.cloud.agent.api.StopCommand;
+import com.cloud.agent.api.to.NicTO;
+import com.cloud.agent.api.to.VirtualMachineTO;
+import com.cloud.network.Networks.TrafficType;
import com.cloud.resource.ServerResource;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
+import com.cloud.vm.VirtualMachine;
import com.xensource.xenapi.Connection;
import com.xensource.xenapi.Types;
import com.xensource.xenapi.VBD;
@@ -124,4 +132,35 @@ public class XcpOssResource extends CitrixResourceBase {
return super.executeRequest(cmd);
}
}
+
+ @Override
+ public StartAnswer execute(StartCommand cmd) {
+ StartAnswer answer = super.execute(cmd);
+
+ VirtualMachineTO vmSpec = cmd.getVirtualMachine();
+ if (vmSpec.getType() == VirtualMachine.Type.ConsoleProxy) {
+ Connection conn = getConnection();
+ String publicIp = null;
+ for (NicTO nic : vmSpec.getNics()) {
+ if (nic.getType() == TrafficType.Guest) {
+ publicIp = nic.getIp();
+ }
+ }
+ callHostPlugin(conn, "vmops", "setDNATRule", "ip", publicIp, "port", "8443", "add", "true");
+ }
+
+ return answer;
+ }
+
+ @Override
+ public StopAnswer execute(StopCommand cmd) {
+ StopAnswer answer = super.execute(cmd);
+ String vmName = cmd.getVmName();
+ if (vmName.startsWith("v-")) {
+ Connection conn = getConnection();
+ callHostPlugin(conn, "vmops", "setDNATRule", "add", "false");
+ }
+ return answer;
+ }
+
}
diff --git a/scripts/vm/hypervisor/xenserver/xcposs/vmops b/scripts/vm/hypervisor/xenserver/xcposs/vmops
index 3ea127e88ba..c8e6013f532 100644
--- a/scripts/vm/hypervisor/xenserver/xcposs/vmops
+++ b/scripts/vm/hypervisor/xenserver/xcposs/vmops
@@ -1450,6 +1450,18 @@ def bumpUpPriority(session, args):
txt = ''
return txt
+
+@echo
+def setDNATRule(session, args):
+ add = args["add"]
+ if add == "false":
+ util.pread2(["iptables", "-t", "nat", "-F"])
+ else:
+ ip = args["ip"]
+ port = args["port"]
+ util.pread2(["iptables", "-t", "nat", "-F"])
+ util.pread2(["iptables", "-t", "nat", "-A", "PREROUTING", "-i", "xenbr0", "-p", "tcp", "--dport", port, "-m", "state", "--state", "NEW", "-j", "DNAT", "--to-destination", ip +":443"])
+ return ""
@echo
def createISOVHD(session, args):
@@ -1533,4 +1545,5 @@ if __name__ == "__main__":
"cleanup_rules":cleanup_rules, "checkRouter":checkRouter,
"bumpUpPriority":bumpUpPriority, "getDomRVersion":getDomRVersion,
"kill_copy_process":kill_copy_process,
- "createISOVHD":createISOVHD})
+ "createISOVHD":createISOVHD,
+ "setDNATRule":setDNATRule})
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
index 890c37895f9..6fef240d69d 100755
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@ -262,6 +262,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
private Map _zoneVmCountMap; // map
private String _hashKey;
+ private String _staticPublicIp;
+ private int _staticPort;
private final GlobalLock _allocProxyLock = GlobalLock.getInternLock(getAllocProxyLockName());
@@ -465,8 +467,12 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
KeystoreVO ksVo = _ksDao.findByName(ConsoleProxyManager.CERTIFICATE_NAME);
assert (ksVo != null);
-
- return new ConsoleProxyInfo(proxy.isSslEnabled(), proxy.getPublicIpAddress(), _consoleProxyPort, proxy.getPort(), ksVo.getDomainSuffix());
+
+ if (_staticPublicIp == null) {
+ return new ConsoleProxyInfo(proxy.isSslEnabled(), proxy.getPublicIpAddress(), _consoleProxyPort, proxy.getPort(), ksVo.getDomainSuffix());
+ } else {
+ return new ConsoleProxyInfo(proxy.isSslEnabled(), _staticPublicIp, _consoleProxyPort, _staticPort, ksVo.getDomainSuffix());
+ }
}
public ConsoleProxyVO doAssignProxy(long dataCenterId, long vmId) {
@@ -1529,6 +1535,11 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
_loadScanner = new SystemVmLoadScanner(this);
_loadScanner.initScan(STARTUP_DELAY, _capacityScanInterval);
_resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
+
+ _staticPublicIp = _configDao.getValue("consoleproxy.static.publicIp");
+ if (_staticPublicIp != null) {
+ _staticPort = NumbersUtil.parseInt(_configDao.getValue("consoleproxy.static.port"), 8443);
+ }
if (s_logger.isInfoEnabled()) {
s_logger.info("Console Proxy Manager is configured.");
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
index 74f5d9f8cef..bb7fa02ef22 100755
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
@@ -1063,7 +1063,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
if (profile.getHypervisorType() == HypervisorType.Hyperv) {
buf.append(" resource=com.cloud.storage.resource.CifsSecondaryStorageResource");
} else {
- buf.append(" resource=com.cloud.storage.resource.PremiumSecondaryStorageResource");
+ buf.append(" resource=com.cloud.storage.resource.NfsSecondaryStorageResource");
}
} else {
buf.append(" resource=com.cloud.storage.resource.NfsSecondaryStorageResource");
diff --git a/setup/db/deploy-db-clouddev.sh b/setup/db/deploy-db-clouddev.sh
index df2a38a7d40..4aa544ba81e 100644
--- a/setup/db/deploy-db-clouddev.sh
+++ b/setup/db/deploy-db-clouddev.sh
@@ -21,3 +21,23 @@ mysql --user=cloud --password=cloud < clouddev.sql
if [ $? -ne 0 ]; then
printf "failed to init cloudev db"
fi
+mysql --user=cloud -t cloud --password=cloud -e "insert into configuration (name, value) VALUES('consoleproxy.static.publicip', \"$1\")"
+mysql --user=cloud -t cloud --password=cloud -e "insert into configuration (name, value) VALUES('consoleproxy.static.port', \"$2\")"
+
+vmids=`xe vm-list is-control-domain=false |grep uuid|awk '{print $5}'`
+for vm in $vmids
+ do
+ echo $vm
+ xe vm-shutdown uuid=$vm
+ xe vm-destroy uuid=$vm
+ done
+
+vdis=`xe vdi-list |grep ^uuid |awk '{print $5}'`
+for vdi in $vdis
+ do
+ xe vdi-destroy uuid=$vdi
+ if [ $? -gt 0 ];then
+ xe vdi-forget uuid=$vdi
+ fi
+
+ done