From d1a536a4e3ec338987706b7b26385481d8333d2d Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 7 Oct 2013 11:30:31 -0700 Subject: [PATCH 1/5] CLOUDSTACK-4672: UI > Network > details tab > add new field "broadcasturi" to show Primary VLAN, Secondary Isolated VLAN. --- ui/scripts/network.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 67ba2788354..d0f6a927833 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -1086,7 +1086,11 @@ vlan: { label: 'label.vlan.id' }, - + + broadcasturi: { + label: 'broadcasturi' + }, + networkofferingid: { label: 'label.network.offering', isEditable: true, From 4c2e40ac37c55634f06ccb12a5b0094c033abb26 Mon Sep 17 00:00:00 2001 From: Chris Suich Date: Mon, 7 Oct 2013 08:38:47 -0400 Subject: [PATCH 2/5] Added storage_provider_name to storage_pool_view Signed-off-by: Edison Su --- .../cloud/api/query/vo/StoragePoolJoinVO.java | 18 ++++--- setup/db/db/schema-420to430.sql | 54 +++++++++++++++++++ 2 files changed, 65 insertions(+), 7 deletions(-) diff --git a/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java b/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java index 69f2204d0e3..d98bb3b45bf 100644 --- a/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java +++ b/server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java @@ -24,17 +24,16 @@ import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.Id; import javax.persistence.Table; -import com.cloud.org.Cluster; -import com.cloud.storage.ScopeType; -import com.cloud.storage.StoragePoolStatus; -import com.cloud.storage.Storage.StoragePoolType; -import com.cloud.utils.db.GenericDao; import org.apache.cloudstack.api.Identity; import org.apache.cloudstack.api.InternalIdentity; - import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.org.Cluster; +import com.cloud.storage.ScopeType; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePoolStatus; +import com.cloud.utils.db.GenericDao; /** * Storage Pool DB view. @@ -137,6 +136,9 @@ public class StoragePoolJoinVO extends BaseViewVO implements InternalIdentity, I @Enumerated(value = EnumType.STRING) private HypervisorType hypervisor; + @Column(name = "storage_provider_name") + private String storageProviderName; + /** * @return the scope */ @@ -378,5 +380,7 @@ public class StoragePoolJoinVO extends BaseViewVO implements InternalIdentity, I this.jobStatus = jobStatus; } - + public String getStorageProviderName() { + return storageProviderName; + } } diff --git a/setup/db/db/schema-420to430.sql b/setup/db/db/schema-420to430.sql index 653ff77c090..a7651895699 100644 --- a/setup/db/db/schema-420to430.sql +++ b/setup/db/db/schema-420to430.sql @@ -281,6 +281,7 @@ CREATE VIEW `cloud`.`template_view` AS and (resource_tags.resource_type = 'Template' or resource_tags.resource_type='ISO') where vm_template.state='Active'; + DROP VIEW IF EXISTS `cloud`.`volume_view`; CREATE VIEW `cloud`.`volume_view` AS select @@ -392,3 +393,56 @@ CREATE VIEW `cloud`.`volume_view` AS INSERT IGNORE INTO `cloud`.`configuration`(category, instance, component, name, value, description, default_value) VALUES ('Advanced', 'DEFAULT', 'management-server', 's3.multipart.enabled', 'true', 'enable s3 multipart upload', 'true'); +DROP VIEW IF EXISTS `cloud`.`storage_pool_view`; +CREATE VIEW `cloud`.`storage_pool_view` AS + select + storage_pool.id, + storage_pool.uuid, + storage_pool.name, + storage_pool.status, + storage_pool.path, + storage_pool.pool_type, + storage_pool.host_address, + storage_pool.created, + storage_pool.removed, + storage_pool.capacity_bytes, + storage_pool.capacity_iops, + storage_pool.scope, + storage_pool.hypervisor, + storage_pool.storage_provider_name, + cluster.id cluster_id, + cluster.uuid cluster_uuid, + cluster.name cluster_name, + cluster.cluster_type, + data_center.id data_center_id, + data_center.uuid data_center_uuid, + data_center.name data_center_name, + data_center.networktype data_center_type, + host_pod_ref.id pod_id, + host_pod_ref.uuid pod_uuid, + host_pod_ref.name pod_name, + storage_pool_details.name tag, + op_host_capacity.used_capacity disk_used_capacity, + op_host_capacity.reserved_capacity disk_reserved_capacity, + async_job.id job_id, + async_job.uuid job_uuid, + async_job.job_status job_status, + async_job.account_id job_account_id + from + `cloud`.`storage_pool` + left join + `cloud`.`cluster` ON storage_pool.cluster_id = cluster.id + left join + `cloud`.`data_center` ON storage_pool.data_center_id = data_center.id + left join + `cloud`.`host_pod_ref` ON storage_pool.pod_id = host_pod_ref.id + left join + `cloud`.`storage_pool_details` ON storage_pool_details.pool_id = storage_pool.id + and storage_pool_details.value = 'true' + left join + `cloud`.`op_host_capacity` ON storage_pool.id = op_host_capacity.host_id + and op_host_capacity.capacity_type = 3 + left join + `cloud`.`async_job` ON async_job.instance_id = storage_pool.id + and async_job.instance_type = 'StoragePool' + and async_job.job_status = 0; From 977a75f1be98d696dd70638b614918751b96fdfd Mon Sep 17 00:00:00 2001 From: Laszlo Hornyak Date: Mon, 7 Oct 2013 19:37:26 +0200 Subject: [PATCH 3/5] UsageManagerInternal fix aed5e9dc2a6882139bc38073923be5a3bacfd9d2 seems to inroduce some typo to run Signed-off-by: Laszlo Hornyak --- usage/src/com/cloud/usage/UsageManagerImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/usage/src/com/cloud/usage/UsageManagerImpl.java b/usage/src/com/cloud/usage/UsageManagerImpl.java index 5f2867450ae..3ff53e0e6f6 100644 --- a/usage/src/com/cloud/usage/UsageManagerImpl.java +++ b/usage/src/com/cloud/usage/UsageManagerImpl.java @@ -281,15 +281,15 @@ public class UsageManagerImpl extends ManagerBase implements UsageManager, Runna @Override public void run() { - new ManagedContextRunnable() { + (new ManagedContextRunnable() { @Override protected void runInContext() { - runInContext(); + runInContextInternal(); } - }; + }).run(); } - protected void runInContext() { + protected void runInContextInternal() { if (s_logger.isInfoEnabled()) { s_logger.info("starting usage job..."); } From 4f932d048ecb786321cfc04cc759ff01439b1694 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Mon, 7 Oct 2013 13:33:17 -0700 Subject: [PATCH 4/5] CLOUDSTACK4515: UI > Settings tab of zone/cluster/account/primaryStorage detailView > add Description field. --- ui/scripts/ui-custom/granularSettings.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/scripts/ui-custom/granularSettings.js b/ui/scripts/ui-custom/granularSettings.js index 06aa82a20dd..5ab60b7af97 100644 --- a/ui/scripts/ui-custom/granularSettings.js +++ b/ui/scripts/ui-custom/granularSettings.js @@ -29,6 +29,9 @@ name: { label: 'label.name' }, + description: { + label: 'label.description' + }, value: { label: 'label.value', editable: true From 6e80bb001c3a4b721c071bc120d662ad8cf3f422 Mon Sep 17 00:00:00 2001 From: Nitin Mehta Date: Mon, 7 Oct 2013 15:48:43 -0700 Subject: [PATCH 5/5] CLOUDSTACK-4824: Add support for adding zone details Signed off by : nitin mehta --- api/src/com/cloud/server/ResourceTag.java | 3 +- .../src/com/cloud/dc/dao/DcDetailsDao.java | 5 +++ .../com/cloud/dc/dao/DcDetailsDaoImpl.java | 25 ++++++++++++- .../com/cloud/api/query/QueryManagerImpl.java | 37 +++++++++++++++++-- .../metadata/ResourceMetaDataManagerImpl.java | 16 +++++++- .../cloud/tags/TaggedResourceManagerImpl.java | 4 ++ 6 files changed, 83 insertions(+), 7 deletions(-) diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/com/cloud/server/ResourceTag.java index f1d31e4e0d0..1c16f251bd3 100644 --- a/api/src/com/cloud/server/ResourceTag.java +++ b/api/src/com/cloud/server/ResourceTag.java @@ -40,7 +40,8 @@ public interface ResourceTag extends ControlledEntity, Identity, InternalIdentit NetworkACL, StaticRoute, VMSnapshot, - RemoteAccessVpn + RemoteAccessVpn, + Zone } /** diff --git a/engine/schema/src/com/cloud/dc/dao/DcDetailsDao.java b/engine/schema/src/com/cloud/dc/dao/DcDetailsDao.java index a3b72a84745..814c7afa449 100644 --- a/engine/schema/src/com/cloud/dc/dao/DcDetailsDao.java +++ b/engine/schema/src/com/cloud/dc/dao/DcDetailsDao.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.dc.dao; +import java.util.List; import java.util.Map; import com.cloud.dc.DcDetailVO; @@ -29,4 +30,8 @@ public interface DcDetailsDao extends GenericDao { DcDetailVO findDetail(long dcId, String name); void deleteDetails(long dcId); + + void removeDetails(Long id, String key); + + List findDetailsList(long dcId); } \ No newline at end of file diff --git a/engine/schema/src/com/cloud/dc/dao/DcDetailsDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DcDetailsDaoImpl.java index 7f5723f2b8b..88c326bcc45 100644 --- a/engine/schema/src/com/cloud/dc/dao/DcDetailsDaoImpl.java +++ b/engine/schema/src/com/cloud/dc/dao/DcDetailsDaoImpl.java @@ -22,6 +22,7 @@ import java.util.Map; import javax.ejb.Local; +import com.cloud.vm.UserVmDetailVO; import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.config.ConfigKey.Scope; import org.apache.cloudstack.framework.config.ScopedConfigStorage; @@ -69,7 +70,17 @@ public class DcDetailsDaoImpl extends GenericDaoBase implement } return details; } - + + @Override + public List findDetailsList(long dcId) { + SearchCriteria sc = DcSearch.create(); + sc.setParameters("dcId", dcId); + + List results = search(sc, null); + return results; + } + + @Override public void deleteDetails(long dcId) { SearchCriteria sc = DcSearch.create(); @@ -81,6 +92,18 @@ public class DcDetailsDaoImpl extends GenericDaoBase implement } } + @Override + public void removeDetails(Long id, String key) { + if(key != null){ + DcDetailVO detail = findDetail(id, key); + if(detail != null){ + remove(detail.getId()); + } + }else { + deleteDetails(id); + } + } + @Override public void persist(long dcId, Map details) { Transaction txn = Transaction.currentTxn(); diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java index bd4f1588ece..9ff37a69828 100644 --- a/server/src/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/com/cloud/api/query/QueryManagerImpl.java @@ -27,6 +27,8 @@ import java.util.Set; import javax.ejb.Local; import javax.inject.Inject; +import com.cloud.dc.DcDetailVO; +import com.cloud.dc.dao.DcDetailsDao; import com.cloud.vm.UserVmDetailVO; import com.cloud.vm.dao.UserVmDetailsDao; import org.apache.log4j.Logger; @@ -326,6 +328,9 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { @Inject private DedicatedResourceDao _dedicatedDao; + @Inject + DcDetailsDao _dcDetailsDao; + @Inject DomainManager _domainMgr; @@ -3271,7 +3276,31 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { return nicDetailResponseList; - } else { + } else if (resourceType == ResourceTag.TaggedResourceType.Zone){ + + List dcDetailList; + if (key == null) { + dcDetailList = _dcDetailsDao.findDetailsList(id); + } else { + DcDetailVO nicDetail = _dcDetailsDao.findDetail(id, key); + dcDetailList = new LinkedList(); + dcDetailList.add(nicDetail); + } + + List dcDetailResponseList = new ArrayList(); + for (DcDetailVO dcDetail : dcDetailList) { + ResourceDetailResponse dcDetailResponse = new ResourceDetailResponse(); + // String uuid = ApiDBUtils.findN + dcDetailResponse.setName(dcDetail.getName()); + dcDetailResponse.setValue(dcDetail.getValue()); + dcDetailResponse.setResourceType(ResourceTag.TaggedResourceType.Nic.toString()); + dcDetailResponse.setObjectName("zonedetail"); + dcDetailResponseList.add(dcDetailResponse); + } + + return dcDetailResponseList; + + }else { List userVmDetailList; if (key == null) { @@ -3282,17 +3311,17 @@ public class QueryManagerImpl extends ManagerBase implements QueryService { userVmDetailList.add(nicDetail); } - List nicDetailResponseList = new ArrayList(); + List userVmDetailResponseList = new ArrayList(); for (UserVmDetailVO nicDetail : userVmDetailList) { ResourceDetailResponse userVmDetailResponse = new ResourceDetailResponse(); userVmDetailResponse.setName(nicDetail.getName()); userVmDetailResponse.setValue(nicDetail.getValue()); userVmDetailResponse.setResourceType(ResourceTag.TaggedResourceType.Nic.toString()); userVmDetailResponse.setObjectName("uservmdetail"); - nicDetailResponseList.add(userVmDetailResponse); + userVmDetailResponseList.add(userVmDetailResponse); } - return nicDetailResponseList; + return userVmDetailResponseList; } } diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java index 80d5055a8e2..836786349c3 100644 --- a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java +++ b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java @@ -23,6 +23,9 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.dc.DcDetailVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.DcDetailsDao; import com.cloud.server.ResourceMetaDataService; import com.cloud.storage.VolumeDetailVO; import com.cloud.storage.dao.VolumeDetailsDao; @@ -95,6 +98,8 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource @Inject NetworkDao _networkDao; @Inject + DataCenterDao _dataCenterDao; + @Inject LoadBalancerDao _lbDao; @Inject PortForwardingRulesDao _pfDao; @@ -123,6 +128,8 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource @Inject NicDao _nicDao; @Inject + DcDetailsDao _dcDetailsDao; + @Inject TaggedResourceService _taggedResourceMgr; @Inject UserVmDetailsDao _userVmDetail; @@ -148,6 +155,7 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource _daoMap.put(TaggedResourceType.StaticRoute, _staticRouteDao); _daoMap.put(TaggedResourceType.VMSnapshot, _vmSnapshotDao); _daoMap.put(TaggedResourceType.RemoteAccessVpn, _vpnDao); + _daoMap.put(TaggedResourceType.Zone, _dataCenterDao); return true; } @@ -208,6 +216,9 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource }else if (resourceType == TaggedResourceType.UserVm){ UserVmDetailVO userVmDetail = new UserVmDetailVO(id, key, value); _userVmDetailDao.persist(userVmDetail); + } else if (resourceType == TaggedResourceType.Zone){ + DcDetailVO dataCenterDetail = new DcDetailVO(id, key, value); + _dcDetailsDao.persist(dataCenterDetail); } else { throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet"); } @@ -233,7 +244,10 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource _nicDetailDao.removeDetails(id, key); } else if(resourceType == TaggedResourceType.UserVm){ _userVmDetailDao.removeDetails(id, key); - } else { + } else if (resourceType == TaggedResourceType.Zone){ + _dcDetailsDao.removeDetails(id, key); + } + else{ throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet"); } diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java index e90481c9d79..795a9706478 100644 --- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java +++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java @@ -25,6 +25,7 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.dc.dao.DataCenterDao; import com.cloud.vm.dao.NicDao; import com.cloud.network.vpc.NetworkACLItemDao; @@ -125,6 +126,8 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso NicDao _nicDao; @Inject NetworkACLItemDao _networkACLItemDao; + @Inject + DataCenterDao _dataCenterDao; @Override @@ -147,6 +150,7 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso _daoMap.put(TaggedResourceType.StaticRoute, _staticRouteDao); _daoMap.put(TaggedResourceType.VMSnapshot, _vmSnapshotDao); _daoMap.put(TaggedResourceType.RemoteAccessVpn, _vpnDao); + _daoMap.put(TaggedResourceType.Zone, _dataCenterDao); return true; }