diff --git a/build.xml b/build.xml
index 9e217ff5080..4b103b2e0a7 100755
--- a/build.xml
+++ b/build.xml
@@ -27,7 +27,7 @@
-
+
diff --git a/build/build-cloud-plugins.xml b/build/build-cloud-plugins.xml
index dcadb93184a..61b0e624901 100755
--- a/build/build-cloud-plugins.xml
+++ b/build/build-cloud-plugins.xml
@@ -279,8 +279,8 @@
-
-
+
+
@@ -302,6 +302,11 @@
+
+
+
+
+
diff --git a/build/build-clouddev.xml b/build/build-devcloud.xml
similarity index 77%
rename from build/build-clouddev.xml
rename to build/build-devcloud.xml
index 20de53def36..5b7bcdb7eee 100644
--- a/build/build-clouddev.xml
+++ b/build/build-devcloud.xml
@@ -30,28 +30,30 @@
-
+
-
+
+
+
-
+
-
+
@@ -63,33 +65,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in
index e4e062a27f3..f36355d4ff3 100755
--- a/client/tomcatconf/components.xml.in
+++ b/client/tomcatconf/components.xml.in
@@ -159,6 +159,7 @@
+
@@ -172,6 +173,7 @@
+
diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java
index 6165ec17953..c01dae0eb0b 100644
--- a/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java
@@ -58,7 +58,7 @@ public class CiscoNexusVSMDeviceVO implements CiscoNexusVSMDevice, Identity{
@Column(name = "username")
private String vsmUserName;
- @Column(name = "password")
+ @Column(name = "password", encryptable=true)
private String vsmPassword;
@Column(name = "ipaddr")
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/plugins/network-elements/elastic-loadbalancer/.classpath b/plugins/network-elements/elastic-loadbalancer/.classpath
new file mode 100644
index 00000000000..a3f5d12a4c8
--- /dev/null
+++ b/plugins/network-elements/elastic-loadbalancer/.classpath
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/network-elements/elastic-loadbalancer/.project b/plugins/network-elements/elastic-loadbalancer/.project
new file mode 100644
index 00000000000..6165661a650
--- /dev/null
+++ b/plugins/network-elements/elastic-loadbalancer/.project
@@ -0,0 +1,17 @@
+
+
+ elastic-loadbalancer
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/plugins/network-elements/elastic-loadbalancer/build.xml b/plugins/network-elements/elastic-loadbalancer/build.xml
new file mode 100755
index 00000000000..66e42cedbd2
--- /dev/null
+++ b/plugins/network-elements/elastic-loadbalancer/build.xml
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+ Cloud Stack ant build file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/server/src/com/cloud/network/ElasticLbVmMapVO.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/ElasticLbVmMapVO.java
similarity index 100%
rename from server/src/com/cloud/network/ElasticLbVmMapVO.java
rename to plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/ElasticLbVmMapVO.java
diff --git a/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java
similarity index 100%
rename from server/src/com/cloud/network/element/ElasticLoadBalancerElement.java
rename to plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java
diff --git a/server/src/com/cloud/network/lb/ElasticLoadBalancerManager.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java
similarity index 100%
rename from server/src/com/cloud/network/lb/ElasticLoadBalancerManager.java
rename to plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManager.java
diff --git a/server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
similarity index 100%
rename from server/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
rename to plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
diff --git a/server/src/com/cloud/network/lb/dao/ElasticLbVmMapDao.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDao.java
similarity index 100%
rename from server/src/com/cloud/network/lb/dao/ElasticLbVmMapDao.java
rename to plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDao.java
diff --git a/server/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java
similarity index 100%
rename from server/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java
rename to plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java
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/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index d64de24f534..a02c3be9e7f 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -2132,6 +2132,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura
if (network == null) {
if (zone.getNetworkType() == DataCenter.NetworkType.Basic) {
networkId = _networkMgr.getExclusiveGuestNetwork(zoneId).getId();
+ network = _networkMgr.getNetwork(networkId);
} else {
network = _networkMgr.getNetworkWithSecurityGroupEnabled(zoneId);
if (network == null) {
diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java
index 821c6ed5205..f6db30bf7b7 100755
--- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java
+++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java
@@ -100,9 +100,7 @@ import com.cloud.network.dao.VpnUserDaoImpl;
import com.cloud.network.element.VirtualRouterElement;
import com.cloud.network.element.VirtualRouterElementService;
import com.cloud.network.firewall.FirewallManagerImpl;
-import com.cloud.network.lb.ElasticLoadBalancerManagerImpl;
import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
-import com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl;
import com.cloud.network.router.VirtualNetworkApplianceManagerImpl;
import com.cloud.network.rules.RulesManagerImpl;
import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl;
@@ -296,7 +294,6 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
addDao("AgentTransferMapDao", HostTransferMapDaoImpl.class);
addDao("ProjectDao", ProjectDaoImpl.class);
addDao("InlineLoadBalancerNicMapDao", InlineLoadBalancerNicMapDaoImpl.class);
- addDao("ElasticLbVmMap", ElasticLbVmMapDaoImpl.class);
addDao("ProjectsAccountDao", ProjectAccountDaoImpl.class);
addDao("ProjectInvitationDao", ProjectInvitationDaoImpl.class);
addDao("IdentityDao", IdentityDaoImpl.class);
@@ -369,7 +366,6 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
ComponentInfo extends Manager> info = addManager("ConsoleProxyManager", ConsoleProxyManagerImpl.class);
info.addParameter("consoleproxy.sslEnabled", "true");
addManager("ProjectManager", ProjectManagerImpl.class);
- addManager("ElasticLoadBalancerManager", ElasticLoadBalancerManagerImpl.class);
addManager("SwiftManager", SwiftManagerImpl.class);
addManager("StorageNetworkManager", StorageNetworkManagerImpl.class);
addManager("ExternalLoadBalancerUsageManager", ExternalLoadBalancerUsageManagerImpl.class);
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/dc/ClusterDetailsDaoImpl.java b/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java
index e488695d711..4ee63c42890 100755
--- a/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java
+++ b/server/src/com/cloud/dc/ClusterDetailsDaoImpl.java
@@ -22,6 +22,7 @@ import java.util.Map;
import javax.ejb.Local;
+import com.cloud.utils.crypt.DBEncryptionUtil;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
@@ -31,12 +32,12 @@ import com.cloud.utils.db.Transaction;
public class ClusterDetailsDaoImpl extends GenericDaoBase implements ClusterDetailsDao {
protected final SearchBuilder ClusterSearch;
protected final SearchBuilder DetailSearch;
-
+
protected ClusterDetailsDaoImpl() {
ClusterSearch = createSearchBuilder();
ClusterSearch.and("clusterId", ClusterSearch.entity().getClusterId(), SearchCriteria.Op.EQ);
ClusterSearch.done();
-
+
DetailSearch = createSearchBuilder();
DetailSearch.and("clusterId", DetailSearch.entity().getClusterId(), SearchCriteria.Op.EQ);
DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ);
@@ -48,32 +49,40 @@ public class ClusterDetailsDaoImpl extends GenericDaoBase sc = DetailSearch.create();
sc.setParameters("clusterId", clusterId);
sc.setParameters("name", name);
-
- return findOneIncludingRemovedBy(sc);
+
+ ClusterDetailsVO detail = findOneIncludingRemovedBy(sc);
+ if("password".equals(name) && detail != null){
+ detail.setValue(DBEncryptionUtil.decrypt(detail.getValue()));
+ }
+ return detail;
}
-
+
@Override
public Map findDetails(long clusterId) {
SearchCriteria sc = ClusterSearch.create();
sc.setParameters("clusterId", clusterId);
-
+
List results = search(sc, null);
Map details = new HashMap(results.size());
for (ClusterDetailsVO result : results) {
- details.put(result.getName(), result.getValue());
+ if("password".equals(result.getName())){
+ details.put(result.getName(), DBEncryptionUtil.decrypt(result.getValue()));
+ } else {
+ details.put(result.getName(), result.getValue());
+ }
}
return details;
}
-
+
@Override
public void deleteDetails(long clusterId) {
SearchCriteria sc = ClusterSearch.create();
sc.setParameters("clusterId", clusterId);
-
+
List results = search(sc, null);
for (ClusterDetailsVO result : results) {
- remove(result.getId());
+ remove(result.getId());
}
}
@@ -84,9 +93,13 @@ public class ClusterDetailsDaoImpl extends GenericDaoBase sc = ClusterSearch.create();
sc.setParameters("clusterId", clusterId);
expunge(sc);
-
+
for (Map.Entry detail : details.entrySet()) {
- ClusterDetailsVO vo = new ClusterDetailsVO(clusterId, detail.getKey(), detail.getValue());
+ String value = detail.getValue();
+ if("password".equals(detail.getKey())){
+ value = DBEncryptionUtil.encrypt(value);
+ }
+ ClusterDetailsVO vo = new ClusterDetailsVO(clusterId, detail.getKey(), value);
persist(vo);
}
txn.commit();
@@ -100,10 +113,10 @@ public class ClusterDetailsDaoImpl extends GenericDaoBase implements LoadBalancingRulesMa
@Inject
FirewallManager _firewallMgr;
@Inject
- ElasticLoadBalancerManager _elbMgr;
- @Inject
NetworkDao _networkDao;
@Inject
FirewallRulesDao _firewallDao;
@@ -684,7 +682,9 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa
_firewallDao.remove(lb.getId());
}
- _elbMgr.handleDeleteLoadBalancerRule(lb, callerUserId, caller);
+ // FIXME: breaking the dependency on ELB manager. This breaks functionality of ELB using virtual router
+ // Bug CS-15411 opened to document this
+ //_elbMgr.handleDeleteLoadBalancerRule(lb, callerUserId, caller);
if (success) {
s_logger.debug("Load balancer with id " + lb.getId() + " is removed successfully");
@@ -726,7 +726,10 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa
_networkMgr.checkIpForService(ipAddressVo, Service.Lb);
}
- LoadBalancer result = _elbMgr.handleCreateLoadBalancerRule(lb, lbOwner, lb.getNetworkId());
+ // FIXME: breaking the dependency on ELB manager. This breaks functionality of ELB using virtual router
+ // Bug CS-15411 opened to document this
+ //LoadBalancer result = _elbMgr.handleCreateLoadBalancerRule(lb, lbOwner, lb.getNetworkId());
+ LoadBalancer result = null;
if (result == null) {
IpAddress ip = null;
Network guestNetwork = _networkMgr.getNetwork(lb.getNetworkId());
diff --git a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
index a32bc807bd4..b285d2ce8fb 100755
--- a/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
+++ b/server/src/com/cloud/resourcelimit/ResourceLimitManagerImpl.java
@@ -210,12 +210,12 @@ public class ResourceLimitManagerImpl implements ResourceLimitService, Manager {
public long findCorrectResourceLimitForAccount(Account account, ResourceType type) {
long max = Resource.RESOURCE_UNLIMITED; // if resource limit is not found, then we treat it as unlimited
-
- //no limits for Admin accounts
- if (_accountMgr.isAdmin(account.getType())) {
+
+ // No limits for Root Admin accounts
+ if (_accountMgr.isRootAdmin(account.getType())) {
return max;
}
-
+
ResourceLimitVO limit = _resourceLimitDao.findByOwnerIdAndType(account.getId(), ResourceOwnerType.Account, type);
// Check if limit is configured for account
@@ -277,8 +277,8 @@ public class ResourceLimitManagerImpl implements ResourceLimitService, Manager {
long numResources = ((count.length == 0) ? 1 : count[0]);
Project project = null;
- // Don't place any limits on system or admin accounts
- if (_accountMgr.isAdmin(account.getType())) {
+ // Don't place any limits on system or root admin accounts
+ if (_accountMgr.isRootAdmin(account.getType())) {
return;
}
@@ -510,10 +510,17 @@ public class ResourceLimitManagerImpl implements ResourceLimitService, Manager {
if (account.getId() == Account.ACCOUNT_ID_SYSTEM) {
throw new InvalidParameterValueException("Can't update system account");
}
-
- //only Unlimited value is accepted if account is Admin
- if (_accountMgr.isAdmin(account.getType()) && max.shortValue() != ResourceLimit.RESOURCE_UNLIMITED) {
- throw new InvalidParameterValueException("Only " + ResourceLimit.RESOURCE_UNLIMITED + " limit is supported for Admin accounts");
+
+ //only Unlimited value is accepted if account is Root Admin
+ if (_accountMgr.isRootAdmin(account.getType()) && max.shortValue() != ResourceLimit.RESOURCE_UNLIMITED) {
+ throw new InvalidParameterValueException("Only " + ResourceLimit.RESOURCE_UNLIMITED + " limit is supported for Root Admin accounts");
+ }
+
+ if ((caller.getAccountId() == accountId.longValue()) &&
+ (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN ||
+ caller.getType() == Account.ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN)) {
+ // If the admin is trying to update his own account, disallow.
+ throw new PermissionDeniedException("Unable to update resource limit for his own account " + accountId + ", permission denied");
}
if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
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
diff --git a/setup/db/deploy-db-simulator.sh b/setup/db/deploy-db-simulator.sh
index 9fe3383d636..fe21c819e13 100644
--- a/setup/db/deploy-db-simulator.sh
+++ b/setup/db/deploy-db-simulator.sh
@@ -61,23 +61,31 @@ if [[ $OSTYPE == "cygwin" ]] ; then
PATHSEP=';'
fi
-echo "Recreating Database."
+handle_error() {
+ mysqlout=$?
+ if [ $mysqlout -eq 1 ]; then
+ printf "Please enter root password for MySQL.\n"
+ mysql --user=root --password < $1
+ if [ $? -ne 0 ]; then
+ printf "Error: Cannot execute $1\n"
+ exit 10
+ fi
+ elif [ $mysqlout -eq 127 ]; then
+ printf "Error: Cannot execute $1 - mysql command not found.\n"
+ exit 11
+ elif [ $mysqlout -ne 0 ]; then
+ printf "Error: Cannot execute $1\n"
+ exit 11
+ fi
+}
+
+echo "Recreating Database cloud."
mysql --user=root --password=$3 < create-database.sql > /dev/null 2>/dev/null
-mysqlout=$?
-if [ $mysqlout -eq 1 ]; then
- printf "Please enter root password for MySQL.\n"
- mysql --user=root --password < create-database.sql
- if [ $? -ne 0 ]; then
- printf "Error: Cannot execute create-database.sql\n"
- exit 10
- fi
-elif [ $mysqlout -eq 127 ]; then
- printf "Error: Cannot execute create-database.sql - mysql command not found.\n"
- exit 11
-elif [ $mysqlout -ne 0 ]; then
- printf "Error: Cannot execute create-database.sql\n"
- exit 11
-fi
+handle_error create-database.sql
+
+echo "Recreating Database cloud_usage."
+mysql --user=root --password=$3 < create-database-premium.sql > /dev/null 2>/dev/null
+handle_error create-database-premium.sql
mysql --user=cloud --password=cloud cloud < create-schema.sql
if [ $? -ne 0 ]; then
@@ -85,6 +93,12 @@ if [ $? -ne 0 ]; then
exit 11
fi
+mysql --user=cloud --password=cloud < create-schema-premium.sql
+if [ $? -ne 0 ]; then
+ printf "Error: Cannot execute create-schema-premium.sql\n"
+ exit 11
+fi
+
mysql --user=cloud --password=cloud cloud < create-schema-simulator.sql
if [ $? -ne 0 ]; then
printf "Error: Cannot execute create-schema-simulator.sql\n"
diff --git a/tools/marvin/marvin/configGenerator.py b/tools/marvin/marvin/configGenerator.py
index 05ba9806308..ad323ca5ecf 100644
--- a/tools/marvin/marvin/configGenerator.py
+++ b/tools/marvin/marvin/configGenerator.py
@@ -169,6 +169,7 @@ def describe_setup_in_basic_mode():
z.internaldns2 = "192.168.110.253"
z.name = "test"+str(l)
z.networktype = 'Basic'
+ z.securitygroupenabled = 'True'
'''create 10 pods'''
for i in range(2):
diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py
index 0dc615fac68..91045cd741f 100644
--- a/tools/marvin/marvin/deployDataCenter.py
+++ b/tools/marvin/marvin/deployDataCenter.py
@@ -262,8 +262,15 @@ class deployDataCenters():
listnetworkoffering = \
listNetworkOfferings.listNetworkOfferingsCmd()
- listnetworkoffering.name = \
- "DefaultSharedNetworkOfferingWithSGService"
+ if zone.securitygroupenabled:
+ listnetworkoffering.name = \
+ "DefaultSharedNetworkOfferingWithSGService"
+ else:
+ # need both name and display text for single result
+ listnetworkoffering.name = \
+ "DefaultSharedNetworkOffering"
+ listnetworkoffering.displaytext = \
+ "Offering for Shared networks"
listnetworkofferingresponse = \
self.apiClient.listNetworkOfferings(listnetworkoffering)
diff --git a/ui/scripts/accounts.js b/ui/scripts/accounts.js
index 6f30963e242..382510e849a 100644
--- a/ui/scripts/accounts.js
+++ b/ui/scripts/accounts.js
@@ -177,7 +177,7 @@
action: function(args) {
var array1 = [];
array1.push("&username=" + todb(args.data.username));
-
+ var errorMsg = "";
var password = args.data.password;
if (md5Hashed)
password = $.md5(password);
@@ -266,6 +266,7 @@
edit: {
label: 'message.edit.account',
action: function(args) {
+ var errorMsg = "";
var accountObj = args.context.accounts[0];
var array1 = [];
@@ -277,7 +278,12 @@
async: false,
success: function(json) {
accountObj = json.updateaccountresponse.account;
+ },
+ error: function(json) {
+ errorMsg = parseXMLHttpResponse(json);
+ args.response.error(errorMsg);
}
+
});
$.ajax({
@@ -325,6 +331,7 @@
}
});
+ if(errorMsg == "")
args.response.success({data: accountObj});
}
},
diff --git a/ui/scripts/storage.js b/ui/scripts/storage.js
index 92e7b506c97..c0ac3b2f2d2 100644
--- a/ui/scripts/storage.js
+++ b/ui/scripts/storage.js
@@ -1310,7 +1310,7 @@
allowedActions.push("recurringSnapshot");
}
if(jsonObj.state != "Allocated") {
- if(jsonObj.vmstate == "Stopped" || jsonObj.virtualmachineid == null) {
+ if((jsonObj.vmstate == "Stopped" || jsonObj.virtualmachineid == null) && jsonObj.state != "Ready") {
allowedActions.push("downloadVolume");
}
}