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 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"); } }