From b70bc92f46a27699417c411d1eb6586351e64d54 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Mon, 2 Jul 2012 10:41:20 -0700 Subject: [PATCH 01/11] CS-14907: Only allow download volume for uploaded volumes This fixes an issue where an uploaded volume that hasn't been moved to primary storage yet is downloaded, causing an error. This adjusts the actionFilter to fix this. Original patch by: Pranav Saxena reviewed-by: Brian Federle --- ui/scripts/storage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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"); } } From 5fafb0e5e59252bfc5f0cc1edcb21da5110938f5 Mon Sep 17 00:00:00 2001 From: Brian Federle Date: Mon, 2 Jul 2012 10:54:48 -0700 Subject: [PATCH 02/11] CS-15313: Error handling for account section This fixes an issue where an error is not displayed when entering an invalid account name. Original patch by: Pranav Saxena reviewed-by: Brian Federle --- ui/scripts/accounts.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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}); } }, From 9876d34ea4a7ac79a0c38b35a249dce20295d391 Mon Sep 17 00:00:00 2001 From: Murali reddy Date: Mon, 2 Jul 2012 15:05:58 -0700 Subject: [PATCH 03/11] moving out ELB network element to plugins/network-elements/elastic-loadbalancer --- build/build-cloud-plugins.xml | 9 +- client/tomcatconf/components.xml.in | 2 + .../elastic-loadbalancer/.classpath | 11 ++ .../elastic-loadbalancer/.project | 17 +++ .../elastic-loadbalancer/build.xml | 129 ++++++++++++++++++ .../com/cloud/network/ElasticLbVmMapVO.java | 0 .../element/ElasticLoadBalancerElement.java | 0 .../lb/ElasticLoadBalancerManager.java | 0 .../lb/ElasticLoadBalancerManagerImpl.java | 0 .../network/lb/dao/ElasticLbVmMapDao.java | 0 .../network/lb/dao/ElasticLbVmMapDaoImpl.java | 0 .../DefaultComponentLibrary.java | 4 - .../lb/LoadBalancingRulesManagerImpl.java | 11 +- 13 files changed, 173 insertions(+), 10 deletions(-) create mode 100644 plugins/network-elements/elastic-loadbalancer/.classpath create mode 100644 plugins/network-elements/elastic-loadbalancer/.project create mode 100755 plugins/network-elements/elastic-loadbalancer/build.xml rename {server => plugins/network-elements/elastic-loadbalancer}/src/com/cloud/network/ElasticLbVmMapVO.java (100%) rename {server => plugins/network-elements/elastic-loadbalancer}/src/com/cloud/network/element/ElasticLoadBalancerElement.java (100%) rename {server => plugins/network-elements/elastic-loadbalancer}/src/com/cloud/network/lb/ElasticLoadBalancerManager.java (100%) rename {server => plugins/network-elements/elastic-loadbalancer}/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java (100%) rename {server => plugins/network-elements/elastic-loadbalancer}/src/com/cloud/network/lb/dao/ElasticLbVmMapDao.java (100%) rename {server => plugins/network-elements/elastic-loadbalancer}/src/com/cloud/network/lb/dao/ElasticLbVmMapDaoImpl.java (100%) 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/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/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/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/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 17a8cdc6ad7..29d6f392391 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -151,8 +151,6 @@ public class LoadBalancingRulesManagerImpl 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()); From 0449ae37f1112c680956a8ce5979f433456cbcb9 Mon Sep 17 00:00:00 2001 From: Jason Bausewein Date: Mon, 2 Jul 2012 15:05:23 -0700 Subject: [PATCH 04/11] CS-15274: Fix NPE on CreateVlanIpRangeCmd() Signed-off-by: Sheng Yang --- server/src/com/cloud/configuration/ConfigurationManagerImpl.java | 1 + 1 file changed, 1 insertion(+) 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) { From c8bbf04c81649919e3c128be42a9500ba47a8766 Mon Sep 17 00:00:00 2001 From: Deepti Dohare Date: Tue, 3 Jul 2012 04:33:02 +0530 Subject: [PATCH 05/11] CS-15300: Domain Admin accounts now respect the limits imposed on the domain just as a regular account. Signed-off-by: Nitin Mehta --- .../ResourceLimitManagerImpl.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) 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) { From 217fdd24973cf1eff478c7c19fa2b3020b2fa654 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 3 Jul 2012 12:56:42 -0700 Subject: [PATCH 06/11] From: jason.bausewein@tier3.com Fixed deployDataCenter.py to select the correct network offering based on if security groups are enabled. Also added default value to configGenerator.py for basic setup. --- tools/marvin/marvin/configGenerator.py | 1 + tools/marvin/marvin/deployDataCenter.py | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/marvin/marvin/configGenerator.py b/tools/marvin/marvin/configGenerator.py index 1e84f900573..60526a89f8a 100644 --- a/tools/marvin/marvin/configGenerator.py +++ b/tools/marvin/marvin/configGenerator.py @@ -164,6 +164,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 5c7880e60ae..d4838072432 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -257,8 +257,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) From 57927c9f2365d2696e5b7e312bbe5e35204cbcb9 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 3 Jul 2012 15:16:51 -0700 Subject: [PATCH 07/11] From: jason.bausewein@tier3.com Updated script to create cloud_usage database similar to deploy-db-dev.sh. --- setup/db/deploy-db-simulator.sh | 46 +++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 16 deletions(-) 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" From b957933a0e6f43cfe4cfb71ddb08c590880699c7 Mon Sep 17 00:00:00 2001 From: Vijayendra Bhamidipati Date: Tue, 3 Jul 2012 17:26:05 -0700 Subject: [PATCH 08/11] Making nexus vsm password encryptable --- .../vmware/src/com/cloud/network/CiscoNexusVSMDeviceVO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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") From 023c2e4f59942dbb8d0270334fb777d3804dab1e Mon Sep 17 00:00:00 2001 From: Vijayendra Bhamidipati Date: Tue, 3 Jul 2012 17:27:21 -0700 Subject: [PATCH 09/11] Encrypting password values that are stored in the cluster_details table --- .../com/cloud/dc/ClusterDetailsDaoImpl.java | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) 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 Date: Tue, 3 Jul 2012 19:49:40 -0700 Subject: [PATCH 10/11] move to devcloud --- build.xml | 2 +- ...{build-clouddev.xml => build-devcloud.xml} | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) rename build/{build-clouddev.xml => build-devcloud.xml} (79%) 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-clouddev.xml b/build/build-devcloud.xml similarity index 79% rename from build/build-clouddev.xml rename to build/build-devcloud.xml index 20de53def36..06bdf69c36f 100644 --- a/build/build-clouddev.xml +++ b/build/build-devcloud.xml @@ -30,12 +30,12 @@ - + - + @@ -46,12 +46,12 @@ - + - + @@ -63,33 +63,33 @@ - + - + - + - + - + - + From 27e9cdbece932bae9a68d5ec28bf2941f4fc7545 Mon Sep 17 00:00:00 2001 From: Edison Su Date: Tue, 3 Jul 2012 23:38:24 -0700 Subject: [PATCH 11/11] add console proxy support for devcloud --- build/build-devcloud.xml | 6 ++- .../xen/resource/XcpOssResource.java | 39 +++++++++++++++++++ scripts/vm/hypervisor/xenserver/xcposs/vmops | 15 ++++++- .../consoleproxy/ConsoleProxyManagerImpl.java | 15 ++++++- .../SecondaryStorageManagerImpl.java | 2 +- setup/db/deploy-db-clouddev.sh | 20 ++++++++++ 6 files changed, 91 insertions(+), 6 deletions(-) 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