From 5204349fef2abfe61f7ba7d75c03ff2b24cc34c2 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 8 Sep 2010 11:59:16 -0700 Subject: [PATCH 1/7] Refactor listSystemVms to new API framework. Add missing licensing info to several API response files. Combine ConsoleProxy and SecondaryStorageVm interfaces into SystemVm interface to have common functions callable from one interface rather than having to cast overly much just to get the same data from the objects. This also includes a partial refactoring of ListStoragePoolsAndHosts command. --- core/src/com/cloud/vm/ConsoleProxy.java | 19 +- core/src/com/cloud/vm/SecondaryStorageVm.java | 17 +- core/src/com/cloud/vm/SystemVm.java | 36 +++ .../commands/ListStoragePoolsAndHostsCmd.java | 10 +- .../api/commands/ListStoragePoolsCmd.java | 176 ++++------- .../cloud/api/commands/ListSystemVMsCmd.java | 245 +++++---------- .../com/cloud/api/response/AlertResponse.java | 17 ++ .../cloud/api/response/AsyncJobResponse.java | 17 ++ .../cloud/api/response/CapacityResponse.java | 17 ++ .../cloud/api/response/ClusterResponse.java | 17 ++ .../api/response/ConfigurationResponse.java | 17 ++ .../api/response/DiskOfferingResponse.java | 17 ++ .../cloud/api/response/DomainResponse.java | 17 ++ .../api/response/DomainRouterResponse.java | 17 ++ .../com/cloud/api/response/EventResponse.java | 17 ++ .../api/response/FirewallRuleResponse.java | 17 ++ .../api/response/GuestOSCategoryResponse.java | 17 ++ .../cloud/api/response/GuestOSResponse.java | 17 ++ .../com/cloud/api/response/HostResponse.java | 17 ++ .../cloud/api/response/IPAddressResponse.java | 17 ++ .../api/response/IngressRuleResponse.java | 17 ++ .../api/response/LoadBalancerResponse.java | 17 ++ .../api/response/NetworkGroupResponse.java | 17 ++ .../com/cloud/api/response/PodResponse.java | 17 ++ .../PortForwardingServiceRuleResponse.java | 17 ++ .../api/response/PreallocatedLunResponse.java | 17 ++ .../api/response/ResourceLimitResponse.java | 17 ++ .../api/response/SecurityGroupResponse.java | 17 ++ .../api/response/ServiceOfferingResponse.java | 17 ++ .../api/response/SnapshotPolicyResponse.java | 17 ++ .../cloud/api/response/SnapshotResponse.java | 17 ++ .../response/SnapshotScheduleResponse.java | 17 ++ .../api/response/StoragePoolResponse.java | 17 ++ .../cloud/api/response/SystemVmResponse.java | 289 ++++++++++++++++++ .../cloud/api/response/TemplateResponse.java | 17 ++ .../cloud/api/response/UpgradeVmResponse.java | 17 ++ .../com/cloud/api/response/UserResponse.java | 17 ++ .../cloud/api/response/UserVmResponse.java | 17 ++ .../api/response/VlanIpRangeResponse.java | 17 ++ .../com/cloud/api/response/ZoneResponse.java | 17 ++ .../com/cloud/server/ManagementServer.java | 16 + .../cloud/server/ManagementServerImpl.java | 59 +++- 42 files changed, 1077 insertions(+), 351 deletions(-) create mode 100644 core/src/com/cloud/vm/SystemVm.java create mode 100644 server/src/com/cloud/api/response/SystemVmResponse.java diff --git a/core/src/com/cloud/vm/ConsoleProxy.java b/core/src/com/cloud/vm/ConsoleProxy.java index 66d2da16eb2..d3fefb52cdc 100644 --- a/core/src/com/cloud/vm/ConsoleProxy.java +++ b/core/src/com/cloud/vm/ConsoleProxy.java @@ -15,30 +15,13 @@ * along with this program. If not, see . * */ - package com.cloud.vm; -import java.util.Date; - /** * ConsoleProxy is a system VM instance that is used * to proxy VNC traffic */ -public interface ConsoleProxy extends VirtualMachine { - - public String getGateway(); - public String getDns1(); - public String getDns2(); - public String getDomain(); - public String getPublicIpAddress(); - public String getPublicNetmask(); - public String getPublicMacAddress(); - public Long getVlanDbId(); - public String getVlanId(); - public String getPrivateNetmask(); - public int getRamSize(); - public int getActiveSession(); - public Date getLastUpdateTime(); +public interface ConsoleProxy extends SystemVm { public byte[] getSessionDetails(); } diff --git a/core/src/com/cloud/vm/SecondaryStorageVm.java b/core/src/com/cloud/vm/SecondaryStorageVm.java index 139bf23f6db..b43a3160788 100644 --- a/core/src/com/cloud/vm/SecondaryStorageVm.java +++ b/core/src/com/cloud/vm/SecondaryStorageVm.java @@ -17,25 +17,10 @@ */ package com.cloud.vm; -import java.util.Date; - /** * Secondary Storage VM is a system VM instance that is used * to interface the management server to secondary storage */ -public interface SecondaryStorageVm extends VirtualMachine { - - public String getGateway(); - public String getDns1(); - public String getDns2(); - public String getDomain(); - public String getPublicIpAddress(); - public String getPublicNetmask(); - public String getPublicMacAddress(); - public Long getVlanDbId(); - public String getVlanId(); - public String getPrivateNetmask(); - public int getRamSize(); - public Date getLastUpdateTime(); +public interface SecondaryStorageVm extends SystemVm { } diff --git a/core/src/com/cloud/vm/SystemVm.java b/core/src/com/cloud/vm/SystemVm.java new file mode 100644 index 00000000000..d6cad60abf8 --- /dev/null +++ b/core/src/com/cloud/vm/SystemVm.java @@ -0,0 +1,36 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.vm; + +import java.util.Date; + +public interface SystemVm extends VirtualMachine { + public String getGateway(); + public String getDns1(); + public String getDns2(); + public String getDomain(); + public String getPublicIpAddress(); + public String getPublicNetmask(); + public String getPublicMacAddress(); + public Long getVlanDbId(); + public String getVlanId(); + public String getPrivateNetmask(); + public int getRamSize(); + public int getActiveSession(); + public Date getLastUpdateTime(); +} diff --git a/server/src/com/cloud/api/commands/ListStoragePoolsAndHostsCmd.java b/server/src/com/cloud/api/commands/ListStoragePoolsAndHostsCmd.java index 7f474325f26..e84c843f9cd 100644 --- a/server/src/com/cloud/api/commands/ListStoragePoolsAndHostsCmd.java +++ b/server/src/com/cloud/api/commands/ListStoragePoolsAndHostsCmd.java @@ -25,12 +25,15 @@ import java.util.Map; import org.apache.log4j.Logger; import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.host.Host; import com.cloud.server.ManagementServer; import com.cloud.utils.Pair; - -public class ListStoragePoolsAndHostsCmd extends BaseCmd{ + +@Implementation(method="") +public class ListStoragePoolsAndHostsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListStoragePoolsAndHostsCmd.class.getName()); private static final String s_name = "liststoragepoolsandhostsresponse"; @@ -115,8 +118,7 @@ public class ListStoragePoolsAndHostsCmd extends BaseCmd{ } @Override - public List> getProperties() { - return s_properties; + public String getResponse() { } @Override diff --git a/server/src/com/cloud/api/commands/ListStoragePoolsCmd.java b/server/src/com/cloud/api/commands/ListStoragePoolsCmd.java index abb5848c2f5..5c375d5f554 100644 --- a/server/src/com/cloud/api/commands/ListStoragePoolsCmd.java +++ b/server/src/com/cloud/api/commands/ListStoragePoolsCmd.java @@ -20,40 +20,23 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import com.cloud.api.response.StoragePoolResponse; import com.cloud.dc.ClusterVO; -import com.cloud.server.Criteria; -import com.cloud.server.ManagementServer; +import com.cloud.serializer.SerializerHelper; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; -import com.cloud.storage.dao.VolumeDao; -import com.cloud.utils.Pair; -import com.cloud.utils.component.ComponentLocator; - -public class ListStoragePoolsCmd extends BaseCmd{ + +@Implementation(method="searchForStoragePools") +public class ListStoragePoolsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListStoragePoolsCmd.class.getName()); private static final String s_name = "liststoragepoolsresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.CLUSTER_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.IP_ADDRESS, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PATH, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.POD_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -114,107 +97,54 @@ public class ListStoragePoolsCmd extends BaseCmd{ return s_name; } - @Override - public List> getProperties() { - return s_properties; - } - - @Override - public List> execute(Map params) { - String name = (String)params.get(BaseCmd.Properties.NAME.getName()); - Long zoneId = (Long)params.get(BaseCmd.Properties.ZONE_ID.getName()); - Long podId = (Long)params.get(BaseCmd.Properties.POD_ID.getName()); - Long clusterId = (Long)params.get(BaseCmd.Properties.CLUSTER_ID.getName()); - String ipAddress = (String)params.get(BaseCmd.Properties.IP_ADDRESS.getName()); - String path = (String)params.get(BaseCmd.Properties.PATH.getName()); - String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - Criteria c = new Criteria("id", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - if (keyword != null) { - c.addCriteria(Criteria.KEYWORD, keyword); - } else { - c.addCriteria(Criteria.NAME, name); - c.addCriteria(Criteria.DATACENTERID, zoneId); - c.addCriteria(Criteria.PODID, podId); - c.addCriteria(Criteria.CLUSTERID, clusterId); - c.addCriteria(Criteria.ADDRESS, ipAddress); - c.addCriteria(Criteria.PATH, path); - } - - List pools = getManagementServer().searchForStoragePools(c); - - if (pools == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "unable to find pools"); - } - - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - VolumeDao volDao = locator.getDao(VolumeDao.class); - List> poolTags = new ArrayList>(); - Object[] sTag = new Object[pools.size()]; - int i = 0; - for (StoragePoolVO pool : pools) { - StoragePoolVO netfsPool = pool; - List> poolData = new ArrayList>(); - poolData.add(new Pair(BaseCmd.Properties.ID.getName(), Long.toString(pool.getId()))); - poolData.add(new Pair(BaseCmd.Properties.NAME.getName(), pool.getName())); - - if (pool.getPoolType() != null) { - poolData.add(new Pair(BaseCmd.Properties.TYPE.getName(), pool.getPoolType().toString())); - } - poolData.add(new Pair(BaseCmd.Properties.IP_ADDRESS.getName(), netfsPool.getHostAddress())); - poolData.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), Long.valueOf(pool.getDataCenterId()).toString())); - poolData.add(new Pair(BaseCmd.Properties.ZONE_NAME.getName(), getManagementServer().getDataCenterBy(pool.getDataCenterId()).getName())); - if (pool.getPodId() != null) { - poolData.add(new Pair(BaseCmd.Properties.POD_ID.getName(), Long.valueOf(pool.getPodId()).toString())); - poolData.add(new Pair(BaseCmd.Properties.POD_NAME.getName(), getManagementServer().getPodBy(pool.getPodId()).getName())); - } - - poolData.add(new Pair(BaseCmd.Properties.PATH.getName(), netfsPool.getPath().toString())); - - StorageStats stats = getManagementServer().getStoragePoolStatistics(pool.getId()); - long capacity = pool.getCapacityBytes(); - long available = pool.getAvailableBytes() ; - long used = capacity - available; - - if (stats != null) { - used = stats.getByteUsed(); - available = capacity - used; - } - - poolData.add(new Pair(BaseCmd.Properties.DISK_SIZE_TOTAL.getName(), Long.valueOf(pool.getCapacityBytes()).toString())); - poolData.add(new Pair(BaseCmd.Properties.DISK_SIZE_ALLOCATED.getName(), Long.valueOf(used).toString())); - - if (pool.getCreated() != null) { - poolData.add(new Pair(BaseCmd.Properties.CREATED.getName(), getDateString(pool.getCreated()))); + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List pools = (List)getResponseObject(); + + List response = new ArrayList(); + for (StoragePoolVO pool : pools) { + StoragePoolResponse poolResponse = new StoragePoolResponse(); + poolResponse.setId(pool.getId()); + poolResponse.setName(pool.getName()); + poolResponse.setPath(pool.getPath()); + poolResponse.setIpAddress(pool.getHostAddress()); + poolResponse.setZoneId(pool.getDataCenterId()); + poolResponse.setZoneName(getManagementServer().getDataCenterBy(pool.getDataCenterId()).getName()); + if (pool.getPoolType() != null) { + poolResponse.setType(pool.getPoolType().toString()); } - + if (pool.getPodId() != null) { + poolResponse.setPodId(pool.getPodId()); + poolResponse.setPodName(getManagementServer().getPodBy(pool.getPodId()).getName()); + } + if (pool.getCreated() != null) { + poolResponse.setCreated(pool.getCreated()); + } + + StorageStats stats = getManagementServer().getStoragePoolStatistics(pool.getId()); + long capacity = pool.getCapacityBytes(); + long available = pool.getAvailableBytes() ; + long used = capacity - available; + + if (stats != null) { + used = stats.getByteUsed(); + available = capacity - used; + } + + poolResponse.setDiskSizeTotal(pool.getCapacityBytes()); + poolResponse.setDiskSizeAllocated(used); + if (pool.getClusterId() != null) { - ClusterVO cluster = getManagementServer().findClusterById(pool.getClusterId()); - poolData.add(new Pair(BaseCmd.Properties.CLUSTER_ID.getName(), cluster.getId())); - poolData.add(new Pair(BaseCmd.Properties.CLUSTER_NAME.getName(), cluster.getName())); + ClusterVO cluster = getManagementServer().findClusterById(pool.getClusterId()); + poolResponse.setClusterId(cluster.getId()); + poolResponse.setClusterName(cluster.getName()); } - - poolData.add(new Pair(BaseCmd.Properties.TAGS.getName(), getManagementServer().getStoragePoolTags(pool.getId()))); - - sTag[i++] = poolData; - volDao.getCountAndTotalByPool(pool.getId()); - } - Pair poolTag = new Pair("storagepool", sTag); - poolTags.add(poolTag); - - return poolTags; + + poolResponse.setTags(getManagementServer().getStoragePoolTags(pool.getId())); + + response.add(poolResponse); + } + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/commands/ListSystemVMsCmd.java b/server/src/com/cloud/api/commands/ListSystemVMsCmd.java index 4ae4939639c..fd967021489 100644 --- a/server/src/com/cloud/api/commands/ListSystemVMsCmd.java +++ b/server/src/com/cloud/api/commands/ListSystemVMsCmd.java @@ -15,43 +15,30 @@ * along with this program. If not, see . * */ - package com.cloud.api.commands; - + import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; +import com.cloud.api.response.SystemVmResponse; import com.cloud.async.AsyncJobVO; -import com.cloud.server.Criteria; -import com.cloud.utils.Pair; +import com.cloud.serializer.SerializerHelper; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.SecondaryStorageVmVO; - -public class ListSystemVMsCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(ListSystemVMsCmd.class.getName()); - - private static final String s_name = "listsystemvmsresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.HOST_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.POD_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.STATE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.SYSTEM_VM_TYPE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.FALSE)); +import com.cloud.vm.SystemVm; +import com.cloud.vm.VMInstanceVO; - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } +@Implementation(method="searchForSystemVms") +public class ListSystemVMsCmd extends BaseListCmd { + public static final Logger s_logger = Logger.getLogger(ListSystemVMsCmd.class.getName()); + private static final String s_name = "listsystemvmsresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -118,157 +105,65 @@ public class ListSystemVMsCmd extends BaseCmd { return s_name; } - @Override - public List> getProperties() { - return s_properties; - } - - @Override - public List> execute(Map params) { - Long id = (Long)params.get(BaseCmd.Properties.ID.getName()); - Long zoneId = (Long)params.get(BaseCmd.Properties.ZONE_ID.getName()); - Long podId = (Long)params.get(BaseCmd.Properties.POD_ID.getName()); - Long hostId = (Long)params.get(BaseCmd.Properties.HOST_ID.getName()); - String name = (String)params.get(BaseCmd.Properties.NAME.getName()); - String state = (String)params.get(BaseCmd.Properties.STATE.getName()); - String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); - String type = (String)params.get(BaseCmd.Properties.SYSTEM_VM_TYPE.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - - Criteria c = new Criteria("id", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - if (keyword != null) { - c.addCriteria(Criteria.KEYWORD, keyword); - } else { - c.addCriteria(Criteria.ID, id); - c.addCriteria(Criteria.DATACENTERID, zoneId); - c.addCriteria(Criteria.PODID, podId); - c.addCriteria(Criteria.HOSTID, hostId); - c.addCriteria(Criteria.NAME, name); - c.addCriteria(Criteria.STATE, state); - } - - List proxies = null; - List ssVms = null; - Object[] proxyDataArray = null; - - if(type == null) //search for all vm types - { - proxies = getManagementServer().searchForConsoleProxy(c); - ssVms = getManagementServer().searchForSecondaryStorageVm(c); - - proxyDataArray = new Object[proxies.size() + ssVms.size()]; - } - else if((type != null) && (type.equalsIgnoreCase("secondarystoragevm"))) // search for ssvm - { - ssVms = getManagementServer().searchForSecondaryStorageVm(c); - - proxyDataArray = new Object[ssVms.size()]; - } - else if((type != null) && (type.equalsIgnoreCase("consoleproxy"))) // search for consoleproxy - { - proxies = getManagementServer().searchForConsoleProxy(c); - - proxyDataArray = new Object[proxies.size()]; - } - - List> proxiesTags = new ArrayList>(); - int i = 0; + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List systemVMs = (List)getResponseObject(); - if(proxies != null && proxies.size() > 0) - { - for (ConsoleProxyVO proxy : proxies) { - List> proxyData = new ArrayList>(); - proxyData.add(new Pair(BaseCmd.Properties.SYSTEM_VM_TYPE.getName(), "consoleproxy")); - - proxyData.add(new Pair(BaseCmd.Properties.ID.getName(), Long.toString(proxy.getId()))); - - AsyncJobVO asyncJob = getManagementServer().findInstancePendingAsyncJob("console_proxy", proxy.getId()); - if(asyncJob != null) { - proxyData.add(new Pair(BaseCmd.Properties.JOB_ID.getName(), asyncJob.getId().toString())); - proxyData.add(new Pair(BaseCmd.Properties.JOB_STATUS.getName(), String.valueOf(asyncJob.getStatus()))); - } - - proxyData.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), Long.valueOf(proxy.getDataCenterId()).toString())); - proxyData.add(new Pair(BaseCmd.Properties.ZONE_NAME.getName(), getManagementServer().findDataCenterById(proxy.getDataCenterId()).getName())); - proxyData.add(new Pair(BaseCmd.Properties.DNS1.getName(), proxy.getDns1())); - proxyData.add(new Pair(BaseCmd.Properties.DNS2.getName(), proxy.getDns2())); - proxyData.add(new Pair(BaseCmd.Properties.NETWORK_DOMAIN.getName(), proxy.getDomain())); - proxyData.add(new Pair(BaseCmd.Properties.GATEWAY.getName(), proxy.getGateway())); - proxyData.add(new Pair(BaseCmd.Properties.NAME.getName(), proxy.getName())); - proxyData.add(new Pair(BaseCmd.Properties.POD_ID.getName(), Long.valueOf(proxy.getPodId()).toString())); - if (proxy.getHostId() != null) { - proxyData.add(new Pair(BaseCmd.Properties.HOST_ID.getName(), proxy.getHostId().toString())); - proxyData.add(new Pair(BaseCmd.Properties.HOST_NAME.getName(), getManagementServer().getHostBy(proxy.getHostId()).getName())); - } - proxyData.add(new Pair(BaseCmd.Properties.PRIVATE_IP.getName(), proxy.getPrivateIpAddress())); - proxyData.add(new Pair(BaseCmd.Properties.PRIVATE_MAC_ADDRESS.getName(), proxy.getPrivateMacAddress())); - proxyData.add(new Pair(BaseCmd.Properties.PRIVATE_NETMASK.getName(), proxy.getPrivateNetmask())); - proxyData.add(new Pair(BaseCmd.Properties.PUBLIC_IP.getName(), proxy.getPublicIpAddress())); - proxyData.add(new Pair(BaseCmd.Properties.PUBLIC_MAC_ADDRESS.getName(), proxy.getPublicMacAddress())); - proxyData.add(new Pair(BaseCmd.Properties.PUBLIC_NETMASK.getName(), proxy.getPublicNetmask())); - proxyData.add(new Pair(BaseCmd.Properties.TEMPLATE_ID.getName(), Long.valueOf(proxy.getTemplateId()).toString())); - proxyData.add(new Pair(BaseCmd.Properties.CREATED.getName(), getDateString(proxy.getCreated()))); - proxyData.add(new Pair(BaseCmd.Properties.ACTIVE_VIEWER_SESSIONS.getName(), - String.valueOf(proxy.getActiveSession()))); - - if (proxy.getState() != null) { - proxyData.add(new Pair(BaseCmd.Properties.STATE.getName(), proxy.getState().toString())); - } - - proxyDataArray[i++] = proxyData; - } + List response = new ArrayList(); + for (VMInstanceVO systemVM : systemVMs) { + SystemVmResponse vmResponse = new SystemVmResponse(); + if (systemVM instanceof SystemVm) { + SystemVm vm = (SystemVm)systemVM; + + vmResponse.setId(vm.getId()); + vmResponse.setSystemVmType(vm.getType().toString().toLowerCase()); + + String instanceType = "console_proxy"; + if (systemVM instanceof SecondaryStorageVmVO) { + instanceType = "sec_storage_vm"; // FIXME: this should be a constant so that the async jobs get updated with the correct instance type, they are using + // different instance types at the moment + } + + AsyncJobVO asyncJob = getManagementServer().findInstancePendingAsyncJob(instanceType, vm.getId()); + if (asyncJob != null) { + vmResponse.setJobId(asyncJob.getId()); + vmResponse.setJobStatus(asyncJob.getStatus()); + } + + vmResponse.setZoneId(vm.getDataCenterId()); + vmResponse.setZoneName(getManagementServer().findDataCenterById(vm.getDataCenterId()).getName()); + vmResponse.setDns1(vm.getDns1()); + vmResponse.setDns2(vm.getDns2()); + vmResponse.setNetworkDomain(vm.getDomain()); + vmResponse.setGateway(vm.getGateway()); + vmResponse.setName(vm.getName()); + vmResponse.setPodId(vm.getPodId()); + if (vm.getHostId() != null) { + vmResponse.setHostId(vm.getHostId()); + vmResponse.setHostName(getManagementServer().getHostBy(vm.getHostId()).getName()); + } + vmResponse.setPrivateIp(vm.getPrivateIpAddress()); + vmResponse.setPrivateMacAddress(vm.getPrivateMacAddress()); + vmResponse.setPrivateNetmask(vm.getPrivateNetmask()); + vmResponse.setPublicIp(vm.getPublicIpAddress()); + vmResponse.setPublicMacAddress(vm.getPublicMacAddress()); + vmResponse.setPublicNetmask(vm.getPublicNetmask()); + vmResponse.setTemplateId(vm.getTemplateId()); + vmResponse.setCreated(vm.getCreated()); + if (vm.getState() != null) { + vmResponse.setState(vm.getState().toString()); + } + } + + // for console proxies, add the active sessions + if (systemVM instanceof ConsoleProxyVO) { + ConsoleProxyVO proxy = (ConsoleProxyVO)systemVM; + vmResponse.setActiveViewerSessions(proxy.getActiveSession()); + } + + response.add(vmResponse); } - - if(ssVms != null && ssVms.size() > 0) - { - for (SecondaryStorageVmVO ssVm : ssVms) { - List> ssvmData = new ArrayList>(); - ssvmData.add(new Pair(BaseCmd.Properties.SYSTEM_VM_TYPE.getName(), "secondarystoragevm")); - ssvmData.add(new Pair(BaseCmd.Properties.ID.getName(), ssVm.getId())); - - ssvmData.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), Long.valueOf(ssVm.getDataCenterId()).toString())); - ssvmData.add(new Pair(BaseCmd.Properties.ZONE_NAME.getName(), getManagementServer().findDataCenterById(ssVm.getDataCenterId()).getName())); - ssvmData.add(new Pair(BaseCmd.Properties.DNS1.getName(), ssVm.getDns1())); - ssvmData.add(new Pair(BaseCmd.Properties.DNS2.getName(), ssVm.getDns2())); - ssvmData.add(new Pair(BaseCmd.Properties.NETWORK_DOMAIN.getName(), ssVm.getDomain())); - ssvmData.add(new Pair(BaseCmd.Properties.GATEWAY.getName(), ssVm.getGateway())); - ssvmData.add(new Pair(BaseCmd.Properties.NAME.getName(), ssVm.getName())); - ssvmData.add(new Pair(BaseCmd.Properties.POD_ID.getName(), Long.valueOf(ssVm.getPodId()).toString())); - if (ssVm.getHostId() != null) { - ssvmData.add(new Pair(BaseCmd.Properties.HOST_ID.getName(), ssVm.getHostId().toString())); - ssvmData.add(new Pair(BaseCmd.Properties.HOST_NAME.getName(), getManagementServer().getHostBy(ssVm.getHostId()).getName())); - } - ssvmData.add(new Pair(BaseCmd.Properties.PRIVATE_IP.getName(), ssVm.getPrivateIpAddress())); - ssvmData.add(new Pair(BaseCmd.Properties.PRIVATE_MAC_ADDRESS.getName(), ssVm.getPrivateMacAddress())); - ssvmData.add(new Pair(BaseCmd.Properties.PRIVATE_NETMASK.getName(), ssVm.getPrivateNetmask())); - ssvmData.add(new Pair(BaseCmd.Properties.PUBLIC_IP.getName(), ssVm.getPublicIpAddress())); - ssvmData.add(new Pair(BaseCmd.Properties.PUBLIC_MAC_ADDRESS.getName(), ssVm.getPublicMacAddress())); - ssvmData.add(new Pair(BaseCmd.Properties.PUBLIC_NETMASK.getName(), ssVm.getPublicNetmask())); - ssvmData.add(new Pair(BaseCmd.Properties.TEMPLATE_ID.getName(), Long.valueOf(ssVm.getTemplateId()).toString())); - ssvmData.add(new Pair(BaseCmd.Properties.CREATED.getName(), getDateString(ssVm.getCreated()))); - - if (ssVm.getState() != null) { - ssvmData.add(new Pair(BaseCmd.Properties.STATE.getName(), ssVm.getState().toString())); - } - - proxyDataArray[i++] = ssvmData; - } - } - proxiesTags.add(new Pair("systemvm", proxyDataArray)); - return proxiesTags; + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/response/AlertResponse.java b/server/src/com/cloud/api/response/AlertResponse.java index 7f6e6d34fc5..3aff5cec3ce 100644 --- a/server/src/com/cloud/api/response/AlertResponse.java +++ b/server/src/com/cloud/api/response/AlertResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/AsyncJobResponse.java b/server/src/com/cloud/api/response/AsyncJobResponse.java index 5af7fbb5dde..bd9471a5070 100644 --- a/server/src/com/cloud/api/response/AsyncJobResponse.java +++ b/server/src/com/cloud/api/response/AsyncJobResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/CapacityResponse.java b/server/src/com/cloud/api/response/CapacityResponse.java index b29b9548419..6c50b4c0ab8 100644 --- a/server/src/com/cloud/api/response/CapacityResponse.java +++ b/server/src/com/cloud/api/response/CapacityResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/ClusterResponse.java b/server/src/com/cloud/api/response/ClusterResponse.java index f51b5bf2c1a..2ae7a9244ed 100644 --- a/server/src/com/cloud/api/response/ClusterResponse.java +++ b/server/src/com/cloud/api/response/ClusterResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/ConfigurationResponse.java b/server/src/com/cloud/api/response/ConfigurationResponse.java index 18d9fccada6..0f12e3349a6 100644 --- a/server/src/com/cloud/api/response/ConfigurationResponse.java +++ b/server/src/com/cloud/api/response/ConfigurationResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/DiskOfferingResponse.java b/server/src/com/cloud/api/response/DiskOfferingResponse.java index c83ed7ffe61..5945eb47e19 100644 --- a/server/src/com/cloud/api/response/DiskOfferingResponse.java +++ b/server/src/com/cloud/api/response/DiskOfferingResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/DomainResponse.java b/server/src/com/cloud/api/response/DomainResponse.java index dbae9be1473..927b02bfad4 100644 --- a/server/src/com/cloud/api/response/DomainResponse.java +++ b/server/src/com/cloud/api/response/DomainResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/DomainRouterResponse.java b/server/src/com/cloud/api/response/DomainRouterResponse.java index 2210c2756cc..23bc79a3458 100644 --- a/server/src/com/cloud/api/response/DomainRouterResponse.java +++ b/server/src/com/cloud/api/response/DomainRouterResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/EventResponse.java b/server/src/com/cloud/api/response/EventResponse.java index 68052858fee..f2030ec8a9e 100644 --- a/server/src/com/cloud/api/response/EventResponse.java +++ b/server/src/com/cloud/api/response/EventResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/FirewallRuleResponse.java b/server/src/com/cloud/api/response/FirewallRuleResponse.java index e906318e108..09afffa6113 100644 --- a/server/src/com/cloud/api/response/FirewallRuleResponse.java +++ b/server/src/com/cloud/api/response/FirewallRuleResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/GuestOSCategoryResponse.java b/server/src/com/cloud/api/response/GuestOSCategoryResponse.java index 29f0262ca52..2065ea4c0e8 100644 --- a/server/src/com/cloud/api/response/GuestOSCategoryResponse.java +++ b/server/src/com/cloud/api/response/GuestOSCategoryResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/GuestOSResponse.java b/server/src/com/cloud/api/response/GuestOSResponse.java index 7440cec3b20..d8b9603ef44 100644 --- a/server/src/com/cloud/api/response/GuestOSResponse.java +++ b/server/src/com/cloud/api/response/GuestOSResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/HostResponse.java b/server/src/com/cloud/api/response/HostResponse.java index 2ee94ad28dc..722f034135c 100644 --- a/server/src/com/cloud/api/response/HostResponse.java +++ b/server/src/com/cloud/api/response/HostResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/IPAddressResponse.java b/server/src/com/cloud/api/response/IPAddressResponse.java index 7d01b004eff..fd447bbbb53 100644 --- a/server/src/com/cloud/api/response/IPAddressResponse.java +++ b/server/src/com/cloud/api/response/IPAddressResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/IngressRuleResponse.java b/server/src/com/cloud/api/response/IngressRuleResponse.java index bbef31651e7..0f74b20e9f4 100644 --- a/server/src/com/cloud/api/response/IngressRuleResponse.java +++ b/server/src/com/cloud/api/response/IngressRuleResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/LoadBalancerResponse.java b/server/src/com/cloud/api/response/LoadBalancerResponse.java index f66eb39b897..1db3d39d47c 100644 --- a/server/src/com/cloud/api/response/LoadBalancerResponse.java +++ b/server/src/com/cloud/api/response/LoadBalancerResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/NetworkGroupResponse.java b/server/src/com/cloud/api/response/NetworkGroupResponse.java index 10152418c37..fd12715c38c 100644 --- a/server/src/com/cloud/api/response/NetworkGroupResponse.java +++ b/server/src/com/cloud/api/response/NetworkGroupResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.List; diff --git a/server/src/com/cloud/api/response/PodResponse.java b/server/src/com/cloud/api/response/PodResponse.java index 39ac46c6794..5789b62b554 100644 --- a/server/src/com/cloud/api/response/PodResponse.java +++ b/server/src/com/cloud/api/response/PodResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/PortForwardingServiceRuleResponse.java b/server/src/com/cloud/api/response/PortForwardingServiceRuleResponse.java index c9bd7b0e16b..27b383bcbb5 100644 --- a/server/src/com/cloud/api/response/PortForwardingServiceRuleResponse.java +++ b/server/src/com/cloud/api/response/PortForwardingServiceRuleResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/PreallocatedLunResponse.java b/server/src/com/cloud/api/response/PreallocatedLunResponse.java index 018c03768cd..7ac641c17be 100644 --- a/server/src/com/cloud/api/response/PreallocatedLunResponse.java +++ b/server/src/com/cloud/api/response/PreallocatedLunResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/ResourceLimitResponse.java b/server/src/com/cloud/api/response/ResourceLimitResponse.java index 07b3b0c97fe..8f5d43bb115 100644 --- a/server/src/com/cloud/api/response/ResourceLimitResponse.java +++ b/server/src/com/cloud/api/response/ResourceLimitResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/SecurityGroupResponse.java b/server/src/com/cloud/api/response/SecurityGroupResponse.java index 2b1cfd92cfd..c60e0590943 100644 --- a/server/src/com/cloud/api/response/SecurityGroupResponse.java +++ b/server/src/com/cloud/api/response/SecurityGroupResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/ServiceOfferingResponse.java b/server/src/com/cloud/api/response/ServiceOfferingResponse.java index a14cd2fd8cf..465c60dd8ac 100644 --- a/server/src/com/cloud/api/response/ServiceOfferingResponse.java +++ b/server/src/com/cloud/api/response/ServiceOfferingResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/SnapshotPolicyResponse.java b/server/src/com/cloud/api/response/SnapshotPolicyResponse.java index ebb80aa5c63..ddef2b47ec9 100644 --- a/server/src/com/cloud/api/response/SnapshotPolicyResponse.java +++ b/server/src/com/cloud/api/response/SnapshotPolicyResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/SnapshotResponse.java b/server/src/com/cloud/api/response/SnapshotResponse.java index d1a9d3daf34..e7ad60525cf 100644 --- a/server/src/com/cloud/api/response/SnapshotResponse.java +++ b/server/src/com/cloud/api/response/SnapshotResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/SnapshotScheduleResponse.java b/server/src/com/cloud/api/response/SnapshotScheduleResponse.java index a1ea9bad927..f1094f27487 100644 --- a/server/src/com/cloud/api/response/SnapshotScheduleResponse.java +++ b/server/src/com/cloud/api/response/SnapshotScheduleResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/StoragePoolResponse.java b/server/src/com/cloud/api/response/StoragePoolResponse.java index d42629ace40..518fdea6ef7 100644 --- a/server/src/com/cloud/api/response/StoragePoolResponse.java +++ b/server/src/com/cloud/api/response/StoragePoolResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/SystemVmResponse.java b/server/src/com/cloud/api/response/SystemVmResponse.java new file mode 100644 index 00000000000..d2bc6befff7 --- /dev/null +++ b/server/src/com/cloud/api/response/SystemVmResponse.java @@ -0,0 +1,289 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.api.response; + +import java.util.Date; + +import com.cloud.api.ResponseObject; +import com.cloud.serializer.Param; + +public class SystemVmResponse implements ResponseObject { + @Param(name="id") + private Long id; + + @Param(name="systemvmtype") + private String systemVmType; + + @Param(name="jobid") + private Long jobId; + + @Param(name="jobstatus") + private Integer jobStatus; + + @Param(name="zoneid") + private Long zoneId; + + @Param(name="zonename") + private String zoneName; + + @Param(name="dns1") + private String dns1; + + @Param(name="dns2") + private String dns2; + + @Param(name="networkdomain") + private String networkDomain; + + @Param(name="gateway") + private String gateway; + + @Param(name="name") + private String name; + + @Param(name="podid") + private Long podId; + + @Param(name="hostid") + private Long hostId; + + @Param(name="hostname") + private String hostName; + + @Param(name="privateip") + private String privateIp; + + @Param(name="privatemacaddress") + private String privateMacAddress; + + @Param(name="privatenetmask") + private String privateNetmask; + + @Param(name="publicip") + private String publicIp; + + @Param(name="publicmacaddress") + private String publicMacAddress; + + @Param(name="publicnetmask") + private String publicNetmask; + + @Param(name="templateid") + private Long templateId; + + @Param(name="created") + private Date created; + + @Param(name="state") + private String state; + + @Param(name="activeviewersessions") + private Integer activeViewerSessions; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getSystemVmType() { + return systemVmType; + } + + public void setSystemVmType(String systemVmType) { + this.systemVmType = systemVmType; + } + + public Long getJobId() { + return jobId; + } + + public void setJobId(Long jobId) { + this.jobId = jobId; + } + + public Integer getJobStatus() { + return jobStatus; + } + + public void setJobStatus(Integer jobStatus) { + this.jobStatus = jobStatus; + } + + public Long getZoneId() { + return zoneId; + } + + public void setZoneId(Long zoneId) { + this.zoneId = zoneId; + } + + public String getZoneName() { + return zoneName; + } + + public void setZoneName(String zoneName) { + this.zoneName = zoneName; + } + + public String getDns1() { + return dns1; + } + + public void setDns1(String dns1) { + this.dns1 = dns1; + } + + public String getDns2() { + return dns2; + } + + public void setDns2(String dns2) { + this.dns2 = dns2; + } + + public String getNetworkDomain() { + return networkDomain; + } + + public void setNetworkDomain(String networkDomain) { + this.networkDomain = networkDomain; + } + + public String getGateway() { + return gateway; + } + + public void setGateway(String gateway) { + this.gateway = gateway; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getPodId() { + return podId; + } + + public void setPodId(Long podId) { + this.podId = podId; + } + + public Long getHostId() { + return hostId; + } + + public void setHostId(Long hostId) { + this.hostId = hostId; + } + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public String getPrivateIp() { + return privateIp; + } + + public void setPrivateIp(String privateIp) { + this.privateIp = privateIp; + } + + public String getPrivateMacAddress() { + return privateMacAddress; + } + + public void setPrivateMacAddress(String privateMacAddress) { + this.privateMacAddress = privateMacAddress; + } + + public String getPrivateNetmask() { + return privateNetmask; + } + + public void setPrivateNetmask(String privateNetmask) { + this.privateNetmask = privateNetmask; + } + + public String getPublicIp() { + return publicIp; + } + + public void setPublicIp(String publicIp) { + this.publicIp = publicIp; + } + + public String getPublicMacAddress() { + return publicMacAddress; + } + + public void setPublicMacAddress(String publicMacAddress) { + this.publicMacAddress = publicMacAddress; + } + + public String getPublicNetmask() { + return publicNetmask; + } + + public void setPublicNetmask(String publicNetmask) { + this.publicNetmask = publicNetmask; + } + + public Long getTemplateId() { + return templateId; + } + + public void setTemplateId(Long templateId) { + this.templateId = templateId; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public Integer getActiveViewerSessions() { + return activeViewerSessions; + } + + public void setActiveViewerSessions(Integer activeViewerSessions) { + this.activeViewerSessions = activeViewerSessions; + } +} diff --git a/server/src/com/cloud/api/response/TemplateResponse.java b/server/src/com/cloud/api/response/TemplateResponse.java index f98f6dd4c85..bad36b25a26 100644 --- a/server/src/com/cloud/api/response/TemplateResponse.java +++ b/server/src/com/cloud/api/response/TemplateResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/UpgradeVmResponse.java b/server/src/com/cloud/api/response/UpgradeVmResponse.java index 78ad9c6aa03..196c259ba6c 100644 --- a/server/src/com/cloud/api/response/UpgradeVmResponse.java +++ b/server/src/com/cloud/api/response/UpgradeVmResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/UserResponse.java b/server/src/com/cloud/api/response/UserResponse.java index f359da34e9e..7405c188329 100644 --- a/server/src/com/cloud/api/response/UserResponse.java +++ b/server/src/com/cloud/api/response/UserResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.Date; diff --git a/server/src/com/cloud/api/response/UserVmResponse.java b/server/src/com/cloud/api/response/UserVmResponse.java index c90cf69f0a5..1d1168f48b8 100644 --- a/server/src/com/cloud/api/response/UserVmResponse.java +++ b/server/src/com/cloud/api/response/UserVmResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/VlanIpRangeResponse.java b/server/src/com/cloud/api/response/VlanIpRangeResponse.java index f7f6e5ec3d3..3a87250422b 100644 --- a/server/src/com/cloud/api/response/VlanIpRangeResponse.java +++ b/server/src/com/cloud/api/response/VlanIpRangeResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/api/response/ZoneResponse.java b/server/src/com/cloud/api/response/ZoneResponse.java index 48d0bb44689..9f6a1a280dd 100644 --- a/server/src/com/cloud/api/response/ZoneResponse.java +++ b/server/src/com/cloud/api/response/ZoneResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import com.cloud.api.ResponseObject; diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index 21f0b177200..bbb38df1792 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -55,6 +55,8 @@ import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListSnapshotsCmd; +import com.cloud.api.commands.ListStoragePoolsCmd; +import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; @@ -1806,6 +1808,13 @@ public interface ManagementServer { StoragePoolVO findPoolById(Long id); List searchForStoragePools(Criteria c); + /** + * List storage pools that match the given criteria + * @param cmd the command that wraps the search criteria (zone, pod, name, IP address, path, and cluster id) + * @return a list of storage pools that match the given criteria + */ + List searchForStoragePools(ListStoragePoolsCmd cmd); + SnapshotPolicyVO findSnapshotPolicyById(Long policyId); /** @@ -1826,6 +1835,13 @@ public interface ManagementServer { List searchForSecondaryStorageVm(Criteria c); /** + * List system VMs by the given search criteria + * @param cmd the command that wraps the search criteria (host, name, state, type, zone, pod, and/or id) + * @return the list of system vms that match the given criteria + */ + List searchForSystemVm(ListSystemVMsCmd cmd); + + /** * Returns back a SHA1 signed response * @param userId -- id for the user * @return -- ArrayList of diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 354695cd4a3..0f0e6c75a28 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -91,6 +91,8 @@ import com.cloud.api.commands.ListPublicIpAddressesCmd; import com.cloud.api.commands.ListRoutersCmd; import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListSnapshotsCmd; +import com.cloud.api.commands.ListStoragePoolsCmd; +import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; @@ -7843,20 +7845,20 @@ public class ManagementServerImpl implements ManagementServer { public List listClusterByPodId(long podId) { return _clusterDao.listByPodId(podId); } - -// @Override -// public ClusterVO createCluster(long dcId, long podId, String name) { -// ClusterVO cluster = new ClusterVO(dcId, podId, name); -// try { -// cluster = _clusterDao.persist(cluster); -// } catch (Exception e) { -// cluster = _clusterDao.findBy(name, podId); -// if (cluster == null) { -// throw new CloudRuntimeException("Unable to create cluster " + name + " in pod " + podId + " and data center " + dcId, e); -// } -// } -// return cluster; -// } + + @Override + public List searchForStoragePools(ListStoragePoolsCmd cmd) { + Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal()); + c.addCriteria(Criteria.NAME, cmd.getStoragePoolName()); + c.addCriteria(Criteria.CLUSTERID, cmd.getClusterId()); + c.addCriteria(Criteria.ADDRESS, cmd.getIpAddress()); + c.addCriteria(Criteria.KEYWORD, cmd.getKeyword()); + c.addCriteria(Criteria.PATH, cmd.getPath()); + c.addCriteria(Criteria.PODID, cmd.getPodId()); + c.addCriteria(Criteria.DATACENTERID, cmd.getZoneId()); + + return searchForStoragePools(c); + } @Override public List searchForStoragePools(Criteria c) { @@ -8144,7 +8146,34 @@ public class ManagementServerImpl implements ManagementServer { return _secStorageVmDao.search(sc, searchFilter); } - + + @Override @SuppressWarnings({"unchecked", "rawtypes"}) + public List searchForSystemVm(ListSystemVMsCmd cmd) { + Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal()); + + c.addCriteria(Criteria.KEYWORD, cmd.getKeyword()); + c.addCriteria(Criteria.ID, cmd.getId()); + c.addCriteria(Criteria.DATACENTERID, cmd.getZoneId()); + c.addCriteria(Criteria.PODID, cmd.getPodId()); + c.addCriteria(Criteria.HOSTID, cmd.getHostId()); + c.addCriteria(Criteria.NAME, cmd.getSystemVmName()); + c.addCriteria(Criteria.STATE, cmd.getState()); + + String type = cmd.getSystemVmType(); + List systemVMs = new ArrayList(); + + if (type == null) { //search for all vm types + systemVMs.addAll(searchForConsoleProxy(c)); + systemVMs.addAll(searchForSecondaryStorageVm(c)); + } else if((type != null) && (type.equalsIgnoreCase("secondarystoragevm"))) { // search for ssvm + systemVMs.addAll(searchForSecondaryStorageVm(c)); + } else if((type != null) && (type.equalsIgnoreCase("consoleproxy"))) { // search for consoleproxy + systemVMs.addAll(searchForConsoleProxy(c)); + } + + return (List)systemVMs; + } + @Override public VMInstanceVO findSystemVMById(long instanceId) { VMInstanceVO systemVm = _vmInstanceDao.findByIdTypes(instanceId, VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm); From b40f496f8003c84b878a61443c1713ac36d48acc Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 8 Sep 2010 15:13:04 -0700 Subject: [PATCH 2/7] Refactoring listTemplatePermissions and listIsoPermissions to new API framework. --- .../api/commands/ListIsoPermissionsCmd.java | 2 +- .../ListTemplateOrIsoPermissionsCmd.java | 129 +++++------------- .../commands/ListTemplatePermissionsCmd.java | 2 +- .../response/TemplatePermissionsResponse.java | 52 +++++++ .../com/cloud/server/ManagementServer.java | 19 +-- .../cloud/server/ManagementServerImpl.java | 55 +++++++- 6 files changed, 142 insertions(+), 117 deletions(-) create mode 100644 server/src/com/cloud/api/response/TemplatePermissionsResponse.java diff --git a/server/src/com/cloud/api/commands/ListIsoPermissionsCmd.java b/server/src/com/cloud/api/commands/ListIsoPermissionsCmd.java index d655008c439..0db2ea788c8 100644 --- a/server/src/com/cloud/api/commands/ListIsoPermissionsCmd.java +++ b/server/src/com/cloud/api/commands/ListIsoPermissionsCmd.java @@ -10,7 +10,7 @@ public class ListIsoPermissionsCmd extends ListTemplateOrIsoPermissionsCmd { return "listisopermissionsresponse"; } - protected String getMediaType() { + public String getMediaType() { return "iso"; } diff --git a/server/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java b/server/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java index 73185fd8d52..2e43e5db35d 100644 --- a/server/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java +++ b/server/src/com/cloud/api/commands/ListTemplateOrIsoPermissionsCmd.java @@ -1,31 +1,23 @@ package com.cloud.api.commands; -import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.domain.DomainVO; +import com.cloud.api.response.TemplatePermissionsResponse; +import com.cloud.serializer.SerializerHelper; import com.cloud.storage.VMTemplateVO; import com.cloud.user.Account; -import com.cloud.utils.Pair; +import com.cloud.user.UserContext; -public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { +@Implementation(method="listTemplatePermissions") +public class ListTemplateOrIsoPermissionsCmd extends BaseListCmd { public Logger s_logger = getLogger(); - protected static final List> s_properties = new ArrayList>(); protected String s_name = getResponseName(); - static { - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT_OBJ, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.DOMAIN_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.TRUE)); - } - ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -63,9 +55,32 @@ public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { public String getName() { return s_name; } - @Override - public List> getProperties() { - return s_properties; + + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List accountNames = (List)getResponseObject(); + Account account = (Account)UserContext.current().getAccountObject(); + boolean isAdmin = ((account == null) || isAdmin(account.getType())); + Long templateOwnerDomain = null; + VMTemplateVO template = getManagementServer().findTemplateById(id); + if (isAdmin) { + // FIXME: we have just template id and need to get template owner from that + Account templateOwner = getManagementServer().findAccountById(template.getAccountId()); + if (templateOwner != null) { + templateOwnerDomain = templateOwner.getDomainId(); + } + } + + TemplatePermissionsResponse response = new TemplatePermissionsResponse(); + response.setId(template.getId()); + response.setPublicTemplate(template.isPublicTemplate()); + if (isAdmin && (templateOwnerDomain != null)) { + response.setDomainId(templateOwnerDomain); + } + + response.setAccountNames(accountNames); + + return SerializerHelper.toSerializedString(response); } protected boolean templateIsCorrectType(VMTemplateVO template) { @@ -76,87 +91,11 @@ public class ListTemplateOrIsoPermissionsCmd extends BaseCmd { return "updatetemplateorisopermissionsresponse"; } - protected String getMediaType() { + public String getMediaType() { return "templateOrIso"; } protected Logger getLogger() { return Logger.getLogger(UpdateTemplateOrIsoPermissionsCmd.class.getName()); } - - @Override - public List> execute(Map params) { - Long id = (Long)params.get(BaseCmd.Properties.ID.getName()); - Account account = (Account)params.get(BaseCmd.Properties.ACCOUNT_OBJ.getName()); - String acctName = (String)params.get(BaseCmd.Properties.ACCOUNT.getName()); - Long domainId = (Long)params.get(BaseCmd.Properties.DOMAIN_ID.getName()); - Long accountId = null; - - if ((account == null) || account.getType() == Account.ACCOUNT_TYPE_ADMIN) { - // validate domainId before proceeding - if (domainId != null) { - if ((account != null) && !getManagementServer().isChildDomain(account.getDomainId(), domainId)) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Invalid domain id (" + domainId + ") given, unable to list " + getMediaType() + " permissions."); - } - if (acctName != null) { - Account userAccount = getManagementServer().findAccountByName(acctName, domainId); - if (userAccount != null) { - accountId = userAccount.getId(); - } else { - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, "Unable to find account " + acctName + " in domain " + domainId); - } - } - } - } else { - accountId = account.getId(); - } - - VMTemplateVO template = getManagementServer().findTemplateById(id.longValue()); - if (template == null || !templateIsCorrectType(template)) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "unable to find " + getMediaType() + " with id " + id); - } - - if (accountId != null && !template.isPublicTemplate()) { - if (account.getType() == Account.ACCOUNT_TYPE_NORMAL && template.getAccountId() != accountId) { - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, "unable to list permissions for " + getMediaType() + " with id " + id); - } else if (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) { - DomainVO accountDomain = getManagementServer().findDomainIdById(account.getDomainId()); - Account templateAccount = getManagementServer().findAccountById(template.getAccountId()); - DomainVO templateDomain = getManagementServer().findDomainIdById(templateAccount.getDomainId()); - if (!templateDomain.getPath().contains(accountDomain.getPath())) { - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, "unable to list permissions for " + getMediaType() + " with id " + id); - } - } - } - - if (id == Long.valueOf(1)) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "unable to list permissions for " + getMediaType() + " with id " + id); - } - - List accountNames = getManagementServer().listTemplatePermissions(id); - - boolean isAdmin = ((account == null) || isAdmin(account.getType())); - Long templateOwnerDomain = null; - if (isAdmin) { - Account templateOwner = getManagementServer().findAccountById(template.getAccountId()); - if (templateOwner != null) { - templateOwnerDomain = templateOwner.getDomainId(); - } - } - - List> embeddedObject = new ArrayList>(); - List> returnValues = new ArrayList>(); - returnValues.add(new Pair(BaseCmd.Properties.ID.getName(), template.getId().toString())); - returnValues.add(new Pair(BaseCmd.Properties.IS_PUBLIC.getName(), Boolean.valueOf(template.isPublicTemplate()).toString())); - if (isAdmin && (templateOwnerDomain != null)) { - returnValues.add(new Pair(BaseCmd.Properties.DOMAIN_ID.getName(), templateOwnerDomain.toString())); - } - if ((accountNames != null) && !accountNames.isEmpty()) { - for (String accountName : accountNames) { - returnValues.add(new Pair(BaseCmd.Properties.ACCOUNT.getName(), accountName)); - } - } - embeddedObject.add(new Pair(getMediaType() + "permission", new Object[] { returnValues } )); - return embeddedObject; - } } diff --git a/server/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java b/server/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java index 8525fc31d88..f9cf0181989 100644 --- a/server/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java +++ b/server/src/com/cloud/api/commands/ListTemplatePermissionsCmd.java @@ -28,7 +28,7 @@ public class ListTemplatePermissionsCmd extends ListTemplateOrIsoPermissionsCmd return "listtemplatepermissionsresponse"; } - protected String getMediaType() { + public String getMediaType() { return "template"; } diff --git a/server/src/com/cloud/api/response/TemplatePermissionsResponse.java b/server/src/com/cloud/api/response/TemplatePermissionsResponse.java new file mode 100644 index 00000000000..cd955d075af --- /dev/null +++ b/server/src/com/cloud/api/response/TemplatePermissionsResponse.java @@ -0,0 +1,52 @@ +package com.cloud.api.response; + +import java.util.List; + +import com.cloud.api.ResponseObject; +import com.cloud.serializer.Param; + +public class TemplatePermissionsResponse implements ResponseObject { + @Param(name="id") + private Long id; + + @Param(name="ispublic") + private Boolean publicTemplate; + + @Param(name="domainid") + private Long domainId; + + @Param(name="account") + private List accountNames; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Boolean getPublicTemplate() { + return publicTemplate; + } + + public void setPublicTemplate(Boolean publicTemplate) { + this.publicTemplate = publicTemplate; + } + + public Long getDomainId() { + return domainId; + } + + public void setDomainId(Long domainId) { + this.domainId = domainId; + } + + public List getAccountNames() { + return accountNames; + } + + public void setAccountNames(List accountNames) { + this.accountNames = accountNames; + } +} diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index bbb38df1792..abbc681c33b 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -57,6 +57,7 @@ import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListSnapshotsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; +import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; @@ -1594,26 +1595,12 @@ public interface ManagementServer { */ List findPrivateDiskOffering(); - /** - * Update the permissions on a template. A private template can be made public, or individual accounts can be granted permission to launch instances from the template. - * @param templateId - * @param operation - * @param isPublic - * @param isFeatured - * @param accountNames - * @return - * @throws InvalidParameterValueException - * @throws PermissionDeniedException - * @throws InternalErrorException - */ -// boolean updateTemplatePermissions(long templateId, String operation, Boolean isPublic, Boolean isFeatured, List accountNames) throws InvalidParameterValueException, PermissionDeniedException, InternalErrorException; - /** * List the permissions on a template. This will return a list of account names that have been granted permission to launch instances from the template. - * @param templateId + * @param cmd the command wrapping the search criteria (template id) * @return list of account names that have been granted permission to launch instances from the template */ - List listTemplatePermissions(long templateId); + List listTemplatePermissions(ListTemplateOrIsoPermissionsCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; /** * List private templates for which the given account/domain has been granted permission to launch instances diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 0f0e6c75a28..72497fa31d8 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -93,6 +93,7 @@ import com.cloud.api.commands.ListServiceOfferingsCmd; import com.cloud.api.commands.ListSnapshotsCmd; import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; +import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; @@ -6861,10 +6862,56 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List listTemplatePermissions(long templateId) { - List accountNames = new ArrayList(); - - List permissions = _launchPermissionDao.findByTemplate(templateId); + public List listTemplatePermissions(ListTemplateOrIsoPermissionsCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { + Account account = (Account)UserContext.current().getAccountObject(); + Long domainId = cmd.getDomainId(); + String acctName = cmd.getAccountName(); + Long id = cmd.getId(); + Long accountId = null; + + if ((account == null) || account.getType() == Account.ACCOUNT_TYPE_ADMIN) { + // validate domainId before proceeding + if (domainId != null) { + if ((account != null) && !_domainDao.isChildDomain(account.getDomainId(), domainId)) { + throw new PermissionDeniedException("Invalid domain id (" + domainId + ") given, unable to list " + cmd.getMediaType() + " permissions."); + } + if (acctName != null) { + Account userAccount = _accountDao.findActiveAccount(acctName, domainId); + if (userAccount != null) { + accountId = userAccount.getId(); + } else { + throw new PermissionDeniedException("Unable to find account " + acctName + " in domain " + domainId); + } + } + } + } else { + accountId = account.getId(); + } + + VMTemplateVO template = _templateDao.findById(id.longValue()); + if (template == null || !templateIsCorrectType(template)) { + throw new InvalidParameterValueException("unable to find " + cmd.getMediaType() + " with id " + id); + } + + if (accountId != null && !template.isPublicTemplate()) { + if (account.getType() == Account.ACCOUNT_TYPE_NORMAL && template.getAccountId() != accountId) { + throw new PermissionDeniedException("unable to list permissions for " + cmd.getMediaType() + " with id " + id); + } else if (account.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) { + DomainVO accountDomain = _domainDao.findById(account.getDomainId()); + Account templateAccount = _accountDao.findById(template.getAccountId()); + DomainVO templateDomain = _domainDao.findById(templateAccount.getDomainId()); + if (!templateDomain.getPath().contains(accountDomain.getPath())) { + throw new PermissionDeniedException("unable to list permissions for " + cmd.getMediaType() + " with id " + id); + } + } + } + + if (id == Long.valueOf(1)) { + throw new PermissionDeniedException("unable to list permissions for " + cmd.getMediaType() + " with id " + id); + } + + List accountNames = new ArrayList(); + List permissions = _launchPermissionDao.findByTemplate(id); if ((permissions != null) && !permissions.isEmpty()) { for (LaunchPermissionVO permission : permissions) { Account acct = _accountDao.findById(permission.getAccountId()); From bdebd4bfa30a4a917660d71dd03fcd9a13d92127 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 8 Sep 2010 15:42:51 -0700 Subject: [PATCH 3/7] Refactor listUsers to new API framework. --- .../com/cloud/api/commands/ListUsersCmd.java | 139 +++++------------- .../response/TemplatePermissionsResponse.java | 17 +++ .../com/cloud/api/response/UserResponse.java | 22 ++- .../com/cloud/server/ManagementServer.java | 5 +- .../cloud/server/ManagementServerImpl.java | 35 +++-- 5 files changed, 99 insertions(+), 119 deletions(-) diff --git a/server/src/com/cloud/api/commands/ListUsersCmd.java b/server/src/com/cloud/api/commands/ListUsersCmd.java index d88964f2647..130cede6e27 100644 --- a/server/src/com/cloud/api/commands/ListUsersCmd.java +++ b/server/src/com/cloud/api/commands/ListUsersCmd.java @@ -20,38 +20,21 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.domain.DomainVO; -import com.cloud.server.Criteria; -import com.cloud.user.Account; +import com.cloud.api.response.UserResponse; +import com.cloud.serializer.SerializerHelper; import com.cloud.user.UserAccountVO; -import com.cloud.utils.Pair; - -public class ListUsersCmd extends BaseCmd { + +@Implementation(method="searchForUsers") +public class ListUsersCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListUsersCmd.class.getName()); private static final String s_name = "listusersresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT_TYPE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.DOMAIN_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.STATE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.USERNAME, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT_OBJ, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -107,88 +90,36 @@ public class ListUsersCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } - public List> getProperties() { - return s_properties; - } - - @Override - public List> execute(Map params) { - Account account = (Account)params.get(BaseCmd.Properties.ACCOUNT_OBJ.getName()); - Long id = (Long)params.get(BaseCmd.Properties.ID.getName()); - String userName = (String)params.get(BaseCmd.Properties.USERNAME.getName()); - String accountName = (String)params.get(BaseCmd.Properties.ACCOUNT.getName()); - Long domainId = (Long)params.get(BaseCmd.Properties.DOMAIN_ID.getName()); - Long type = (Long)params.get(BaseCmd.Properties.ACCOUNT_TYPE.getName()); - String state = (String)params.get(BaseCmd.Properties.STATE.getName()); - String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); - - if (domainId != null) { - if ((account != null) && !getManagementServer().isChildDomain(account.getDomainId(), domainId)) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Invalid domain id (" + domainId + ") given, unable to list users."); - } - } else { - // default domainId to the admin's domain - domainId = ((account == null) ? DomainVO.ROOT_DOMAIN : account.getDomainId()); - } - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - Criteria c = new Criteria("id", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - if (keyword != null) { - c.addCriteria(Criteria.KEYWORD, keyword); - } - else { - c.addCriteria(Criteria.ID, id); - c.addCriteria(Criteria.ACCOUNTNAME, accountName); - c.addCriteria(Criteria.DOMAINID, domainId); - c.addCriteria(Criteria.USERNAME, userName); - c.addCriteria(Criteria.TYPE, type); - c.addCriteria(Criteria.STATE, state); - } - List users = getManagementServer().searchForUsers(c); - - List> userTags = new ArrayList>(); - Object[] uTag = new Object[users.size()]; - int i = 0; - for (UserAccountVO user: users) { - if ((user.getRemoved() == null)&&(user.getId() != 1)) { - List> userData = new ArrayList>(); - userData.add(new Pair(BaseCmd.Properties.ID.getName(), Long.valueOf(user.getId()).toString())); - userData.add(new Pair(BaseCmd.Properties.USERNAME.getName(), user.getUsername())); - userData.add(new Pair(BaseCmd.Properties.FIRSTNAME.getName(), user.getFirstname())); - userData.add(new Pair(BaseCmd.Properties.LASTNAME.getName(), user.getLastname())); - userData.add(new Pair(BaseCmd.Properties.EMAIL.getName(), user.getEmail())); - userData.add(new Pair(BaseCmd.Properties.CREATED.getName(), getDateString(user.getCreated()))); - userData.add(new Pair(BaseCmd.Properties.STATE.getName(), user.getState())); - userData.add(new Pair(BaseCmd.Properties.ACCOUNT.getName(), getManagementServer().findAccountById(user.getAccountId()).getAccountName())); - userData.add(new Pair(BaseCmd.Properties.ACCOUNT_TYPE.getName(), getManagementServer().findAccountById(user.getAccountId()).getType())); - userData.add(new Pair(BaseCmd.Properties.DOMAIN_ID.getName(), user.getDomainId().toString())); - userData.add(new Pair(BaseCmd.Properties.DOMAIN.getName(), getManagementServer().findDomainIdById(user.getDomainId()).getName())); - userData.add(new Pair(BaseCmd.Properties.TIMEZONE.getName(),user.getTimezone())); - if(user.getApiKey()!=null) - userData.add(new Pair(BaseCmd.Properties.API_KEY.getName(), user.getApiKey())); - if(user.getSecretKey()!=null) - userData.add(new Pair(BaseCmd.Properties.SECRET_KEY.getName(), user.getSecretKey())); - uTag[i++] = userData; - } - } - Pair userTag = new Pair("user", uTag); - userTags.add(userTag); - return userTags; - + + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List users = (List)getResponseObject(); + + List response = new ArrayList(); + for (UserAccountVO user : users) { + UserResponse userResponse = new UserResponse(); + userResponse.setId(user.getId()); + userResponse.setUsername(user.getUsername()); + userResponse.setFirstname(user.getFirstname()); + userResponse.setLastname(user.getLastname()); + userResponse.setEmail(user.getEmail()); + userResponse.setCreated(user.getCreated()); + userResponse.setState(user.getState()); + userResponse.setAccountName(user.getAccountName()); + userResponse.setAccountType(user.getType()); + userResponse.setDomainId(user.getDomainId()); + userResponse.setDomainName(getManagementServer().findDomainIdById(user.getDomainId()).getName()); + userResponse.setTimezone(user.getTimezone()); + userResponse.setApiKey(user.getApiKey()); + userResponse.setSecretKey(user.getSecretKey()); + + response.add(userResponse); + } + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/response/TemplatePermissionsResponse.java b/server/src/com/cloud/api/response/TemplatePermissionsResponse.java index cd955d075af..66b17a7a810 100644 --- a/server/src/com/cloud/api/response/TemplatePermissionsResponse.java +++ b/server/src/com/cloud/api/response/TemplatePermissionsResponse.java @@ -1,3 +1,20 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ package com.cloud.api.response; import java.util.List; diff --git a/server/src/com/cloud/api/response/UserResponse.java b/server/src/com/cloud/api/response/UserResponse.java index 7405c188329..86eacdac46c 100644 --- a/server/src/com/cloud/api/response/UserResponse.java +++ b/server/src/com/cloud/api/response/UserResponse.java @@ -59,7 +59,11 @@ public class UserResponse implements ResponseObject { @Param(name="timezone") private String timezone; - // TODO: user keys? + @Param(name="apikey") + private String apiKey; + + @Param(name="secretkey") + private String secretKey; public Long getId() { return id; @@ -156,4 +160,20 @@ public class UserResponse implements ResponseObject { public void setTimezone(String timezone) { this.timezone = timezone; } + + public String getApiKey() { + return apiKey; + } + + public void setApiKey(String apiKey) { + this.apiKey = apiKey; + } + + public String getSecretKey() { + return secretKey; + } + + public void setSecretKey(String secretKey) { + this.secretKey = secretKey; + } } diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index abbc681c33b..a77ed6bb8a9 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -59,6 +59,7 @@ import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatesCmd; +import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.RebootSystemVmCmd; @@ -870,10 +871,10 @@ public interface ManagementServer { /** revisit * Searches for users by the specified search criteria * Can search by: "id", "username", "account", "domainId", "type" - * @param c + * @param cmd * @return List of UserAccounts */ - List searchForUsers(Criteria c); + List searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException; /** * Searches for Service Offerings by the specified search criteria diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 72497fa31d8..34ebf8c313c 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -95,6 +95,7 @@ import com.cloud.api.commands.ListStoragePoolsCmd; import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatesCmd; +import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.PrepareForMaintenanceCmd; @@ -3762,16 +3763,26 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List searchForUsers(Criteria c) { - Filter searchFilter = new Filter(UserAccountVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); + public List searchForUsers(ListUsersCmd cmd) throws PermissionDeniedException { + Account account = (Account)UserContext.current().getAccountObject(); + Long domainId = cmd.getDomainId(); + if (domainId != null) { + if ((account != null) && !_domainDao.isChildDomain(account.getDomainId(), domainId)) { + throw new PermissionDeniedException("Invalid domain id (" + domainId + ") given, unable to list users."); + } + } else { + // default domainId to the admin's domain + domainId = ((account == null) ? DomainVO.ROOT_DOMAIN : account.getDomainId()); + } - Object id = c.getCriteria(Criteria.ID); - Object username = c.getCriteria(Criteria.USERNAME); - Object type = c.getCriteria(Criteria.TYPE); - Object domainId = c.getCriteria(Criteria.DOMAINID); - Object account = c.getCriteria(Criteria.ACCOUNTNAME); - Object state = c.getCriteria(Criteria.STATE); - Object keyword = c.getCriteria(Criteria.KEYWORD); + Filter searchFilter = new Filter(UserAccountVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + + Object id = cmd.getId(); + Object username = cmd.getUsername(); + Object type = cmd.getAccountType(); + Object accountName = cmd.getAccountName(); + Object state = cmd.getState(); + Object keyword = cmd.getKeyword(); SearchBuilder sb = _userAccountDao.createSearchBuilder(); sb.and("username", sb.entity().getUsername(), SearchCriteria.Op.LIKE); @@ -3781,7 +3792,7 @@ public class ManagementServerImpl implements ManagementServer { sb.and("accountName", sb.entity().getAccountName(), SearchCriteria.Op.LIKE); sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); - if ((account == null) && (domainId != null)) { + if ((accountName == null) && (domainId != null)) { SearchBuilder domainSearch = _domainDao.createSearchBuilder(); domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId()); @@ -3814,8 +3825,8 @@ public class ManagementServerImpl implements ManagementServer { sc.setParameters("type", type); } - if (account != null) { - sc.setParameters("accountName", "%" + account + "%"); + if (accountName != null) { + sc.setParameters("accountName", "%" + accountName + "%"); if (domainId != null) { sc.setParameters("domainId", domainId); } From 88f5b736828d672ab127e52255950d594b878928 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 8 Sep 2010 15:57:07 -0700 Subject: [PATCH 4/7] Refactor listVlanIpRanges to new API framework. --- .../api/commands/ListVlanIpRangesCmd.java | 163 +++++------------- .../com/cloud/server/ManagementServer.java | 38 +--- .../cloud/server/ManagementServerImpl.java | 35 ++-- 3 files changed, 72 insertions(+), 164 deletions(-) diff --git a/server/src/com/cloud/api/commands/ListVlanIpRangesCmd.java b/server/src/com/cloud/api/commands/ListVlanIpRangesCmd.java index 7a43118b74d..b7ff70da96d 100644 --- a/server/src/com/cloud/api/commands/ListVlanIpRangesCmd.java +++ b/server/src/com/cloud/api/commands/ListVlanIpRangesCmd.java @@ -15,43 +15,28 @@ * along with this program. If not, see . * */ - package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import com.cloud.api.response.VlanIpRangeResponse; import com.cloud.dc.HostPodVO; import com.cloud.dc.Vlan.VlanType; import com.cloud.dc.VlanVO; -import com.cloud.server.Criteria; +import com.cloud.serializer.SerializerHelper; import com.cloud.user.Account; -import com.cloud.utils.Pair; - -public class ListVlanIpRangesCmd extends BaseCmd { + +@Implementation(method="searchForVlans") +public class ListVlanIpRangesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListVlanIpRangesCmd.class.getName()); private static final String s_name = "listvlaniprangesresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.DOMAIN_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.POD_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.VLAN, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -107,104 +92,46 @@ public class ListVlanIpRangesCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; - } - public List> getProperties() { - return s_properties; - } - - @Override - public List> execute(Map params) { - Long id = (Long) params.get(BaseCmd.Properties.ID.getName()); - String vlanId = (String) params.get(BaseCmd.Properties.VLAN.getName()); - Long zoneId = (Long) params.get(BaseCmd.Properties.ZONE_ID.getName()); - String accountName = (String) params.get(BaseCmd.Properties.ACCOUNT.getName()); - Long domainId = (Long) params.get(BaseCmd.Properties.DOMAIN_ID.getName()); - Long podId = (Long) params.get(BaseCmd.Properties.POD_ID.getName()); - String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); - - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - - // If an account name and domain ID are specified, look up the account - Long accountId = null; - if (accountName != null && domainId != null) { - Account account = getManagementServer().findAccountByName(accountName, domainId); - if (account == null) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Please specify a valid account."); - } else { - accountId = account.getId(); - } - } - - Criteria c = new Criteria("id", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - - if (keyword != null) { - c.addCriteria(Criteria.KEYWORD, keyword); - } else { - c.addCriteria(Criteria.ID, id); - c.addCriteria(Criteria.VLAN, vlanId); - c.addCriteria(Criteria.DATACENTERID, zoneId); - c.addCriteria(Criteria.ACCOUNTID, accountId); - c.addCriteria(Criteria.PODID, podId); - } - - List vlans = getManagementServer().searchForVlans(c); - - if (vlans == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "unable to find vlans"); - } - - Object[] vlanTag = new Object[vlans.size()]; - int i = 0; - - for (VlanVO vlan : vlans) { - accountId = getManagementServer().getAccountIdForVlan(vlan.getId()); - podId = getManagementServer().getPodIdForVlan(vlan.getId()); - - List> vlanData = new ArrayList>(); - vlanData.add(new Pair(BaseCmd.Properties.ID.getName(), vlan.getId())); - vlanData.add(new Pair(BaseCmd.Properties.FOR_VIRTUAL_NETWORK.getName(), (vlan.getVlanType().equals(VlanType.VirtualNetwork)))); - vlanData.add(new Pair(BaseCmd.Properties.VLAN.getName(), vlan.getVlanId())); - vlanData.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), vlan.getDataCenterId())); - - if (accountId != null) { - Account account = getManagementServer().findAccountById(accountId); - vlanData.add(new Pair(BaseCmd.Properties.ACCOUNT.getName(), account.getAccountName())); - vlanData.add(new Pair(BaseCmd.Properties.DOMAIN_ID.getName(), account.getDomainId())); - vlanData.add(new Pair(BaseCmd.Properties.DOMAIN.getName(), getManagementServer().findDomainIdById(account.getDomainId()).getName())); - } + } + + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List vlans = (List)getResponseObject(); + + List response = new ArrayList(); + for (VlanVO vlan : vlans) { + Long accountId = getManagementServer().getAccountIdForVlan(vlan.getId()); + Long podId = getManagementServer().getPodIdForVlan(vlan.getId()); + + VlanIpRangeResponse vlanResponse = new VlanIpRangeResponse(); + vlanResponse.setId(vlan.getId()); + vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork)); + vlanResponse.setVlan(vlan.getVlanId()); + vlanResponse.setZoneId(vlan.getDataCenterId()); - if (podId != null) { - HostPodVO pod = getManagementServer().findHostPodById(podId); - vlanData.add(new Pair(BaseCmd.Properties.POD_ID.getName(), podId)); - vlanData.add(new Pair(BaseCmd.Properties.POD_NAME.getName(), pod.getName())); + if (accountId != null) { + Account account = getManagementServer().findAccountById(accountId); + vlanResponse.setAccountName(account.getAccountName()); + vlanResponse.setDomainId(account.getDomainId()); + vlanResponse.setDomainName(getManagementServer().findDomainIdById(account.getDomainId()).getName()); } - - vlanData.add(new Pair(BaseCmd.Properties.GATEWAY.getName(), vlan.getVlanGateway())); - vlanData.add(new Pair(BaseCmd.Properties.NETMASK.getName(), vlan.getVlanNetmask())); - vlanData.add(new Pair(BaseCmd.Properties.DESCRIPTION.getName(), vlan.getIpRange())); - vlanTag[i++] = vlanData; - } - - List> returnTags = new ArrayList>(); - Pair vlanTags = new Pair("vlaniprange", vlanTag); - returnTags.add(vlanTags); - return returnTags; - - } + + if (podId != null) { + HostPodVO pod = getManagementServer().findHostPodById(podId); + vlanResponse.setPodId(podId); + vlanResponse.setPodName(pod.getName()); + } + + vlanResponse.setGateway(vlan.getVlanGateway()); + vlanResponse.setNetmask(vlan.getVlanNetmask()); + vlanResponse.setDescription(vlan.getIpRange()); + + response.add(vlanResponse); + } + + return SerializerHelper.toSerializedString(response); + } } diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index a77ed6bb8a9..97881040bd4 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -60,6 +60,7 @@ import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.ListUsersCmd; +import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.RebootSystemVmCmd; @@ -417,46 +418,13 @@ public interface ManagementServer { */ VolumeStats[] getVolumeStatistics(long[] volId); - /** - * Associate / allocate an IP address to a user - * @param userId - * @param accountId - * @param domainId - * @param zoneId - * @return allocated IP address in the zone specified - * @throws InsufficientAddressCapacityException if no more addresses are available - * @throws InvalidParameterValueException if no router for that user exists in the zone specified - * @throws InternalErrorException if the new address could not be sent down to the router - */ -// String associateIpAddress(long userId, long accountId, long domainId, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, InvalidParameterValueException, InternalErrorException; -// long associateIpAddressAsync(long userId, long accountId, long domainId, long zoneId); - - - /** - * Disassociate /unallocate an allocated IP address from a user - * @param userId - * @param accountId - * @param ipAddress - * @return success - */ -// boolean disassociateIpAddress(DisassociateIPAddrCmd cmd) throws PermissionDeniedException; -// long disassociateIpAddressAsync(long userId, long accountId, String ipAddress); - - /** - * Deletes a VLAN from the database, along with all of its IP addresses. Will not delete VLANs that have allocated IP addresses. - * @param userId - * @param vlanDbId - * @return success/failure - */ -// boolean deleteVlanAndPublicIpRange(long userId, long vlanDbId) throws InvalidParameterValueException; - /** * Searches for vlan by the specified search criteria * Can search by: "id", "vlan", "name", "zoneID" - * @param c + * @param cmd * @return List of Vlans */ - List searchForVlans(Criteria c); + List searchForVlans(ListVlanIpRangesCmd cmd) throws InvalidParameterValueException; /** * If the specified VLAN is associated with the pod, returns the pod ID. Else, returns null. diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 34ebf8c313c..bfd2ece057a 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -96,6 +96,7 @@ import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.ListUsersCmd; +import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.PrepareForMaintenanceCmd; @@ -4024,18 +4025,30 @@ public class ManagementServerImpl implements ManagementServer { return _dcDao.search(sc, searchFilter); } - + @Override - public List searchForVlans(Criteria c) { - Filter searchFilter = new Filter(VlanVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); - - Object id = c.getCriteria(Criteria.ID); - Object vlan = c.getCriteria(Criteria.VLAN); - Object dataCenterId = c.getCriteria(Criteria.DATACENTERID); - Object accountId = c.getCriteria(Criteria.ACCOUNTID); - Object podId = c.getCriteria(Criteria.PODID); - Object keyword = c.getCriteria(Criteria.KEYWORD); - + public List searchForVlans(ListVlanIpRangesCmd cmd) throws InvalidParameterValueException { + // If an account name and domain ID are specified, look up the account + String accountName = cmd.getAccountName(); + Long domainId = cmd.getDomainId(); + Long accountId = null; + if (accountName != null && domainId != null) { + Account account = _accountDao.findActiveAccount(accountName, domainId); + if (account == null) { + throw new InvalidParameterValueException("Unable to find account " + accountName + " in domain " + domainId); + } else { + accountId = account.getId(); + } + } + + Filter searchFilter = new Filter(VlanVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal()); + + Object id = cmd.getId(); + Object vlan = cmd.getVlan(); + Object dataCenterId = cmd.getZoneId(); + Object podId = cmd.getPodId(); + Object keyword = cmd.getKeyword(); + SearchBuilder sb = _vlanDao.createSearchBuilder(); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("vlan", sb.entity().getVlanId(), SearchCriteria.Op.EQ); From b144be46132c21809b23463afb4ffc269d07e9f1 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 8 Sep 2010 18:03:04 -0700 Subject: [PATCH 5/7] Refactor listVMs to new API framework. --- .../ListLoadBalancerRuleInstancesCmd.java | 1 + .../com/cloud/api/commands/ListVMsCmd.java | 267 +++++----------- .../cloud/api/response/UserVmResponse.java | 288 ++++++++++++++++++ .../com/cloud/server/ManagementServer.java | 9 + .../cloud/server/ManagementServerImpl.java | 52 +++- 5 files changed, 423 insertions(+), 194 deletions(-) diff --git a/server/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java b/server/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java index 12aabd3686c..d84e936be02 100644 --- a/server/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java +++ b/server/src/com/cloud/api/commands/ListLoadBalancerRuleInstancesCmd.java @@ -80,6 +80,7 @@ public class ListLoadBalancerRuleInstancesCmd extends BaseListCmd { userVmResponse.setId(instance.getId()); userVmResponse.setName(instance.getName()); userVmResponse.setDisplayName(instance.getDisplayName()); + userVmResponse.setPrivateIp(instance.getPrivateIpAddress()); // TODO: implement Account accountTemp = getManagementServer().findAccountById(instance.getAccountId()); diff --git a/server/src/com/cloud/api/commands/ListVMsCmd.java b/server/src/com/cloud/api/commands/ListVMsCmd.java index 2f902018c7d..cc956a79276 100644 --- a/server/src/com/cloud/api/commands/ListVMsCmd.java +++ b/server/src/com/cloud/api/commands/ListVMsCmd.java @@ -15,52 +15,32 @@ * along with this program. If not, see . * */ - package com.cloud.api.commands; import java.text.DecimalFormat; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import com.cloud.api.response.UserVmResponse; import com.cloud.async.AsyncJobVO; -import com.cloud.domain.DomainVO; -import com.cloud.host.HostVO; -import com.cloud.server.Criteria; +import com.cloud.serializer.SerializerHelper; import com.cloud.service.ServiceOfferingVO; import com.cloud.storage.VMTemplateVO; import com.cloud.user.Account; -import com.cloud.uservm.UserVm; -import com.cloud.utils.Pair; +import com.cloud.user.UserContext; +import com.cloud.vm.UserVmVO; import com.cloud.vm.VmStats; -public class ListVMsCmd extends BaseCmd { +@Implementation(method="searchForUserVMs") +public class ListVMsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListVMsCmd.class.getName()); private static final String s_name = "listvirtualmachinesresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.DOMAIN_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.HOST_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.POD_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.STATE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT_OBJ, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -134,210 +114,111 @@ public class ListVMsCmd extends BaseCmd { public String getName() { return s_name; } - @Override - public List> getProperties() { - return s_properties; - } - @Override - public List> execute(Map params) { - Long id = (Long)params.get(BaseCmd.Properties.ID.getName()); - Account account = (Account)params.get(BaseCmd.Properties.ACCOUNT_OBJ.getName()); - String accountName = (String)params.get(BaseCmd.Properties.ACCOUNT.getName()); - Long domainId = (Long)params.get(BaseCmd.Properties.DOMAIN_ID.getName()); - String name = (String) params.get(BaseCmd.Properties.NAME.getName()); - String state = (String) params.get(BaseCmd.Properties.STATE.getName()); - Long zoneId = (Long)params.get(BaseCmd.Properties.ZONE_ID.getName()); - Long podId = (Long)params.get(BaseCmd.Properties.POD_ID.getName()); - Long hostId = (Long)params.get(BaseCmd.Properties.HOST_ID.getName()); - String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); - Long accountId = null; - Boolean isAdmin = false; + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List userVms = (List)getResponseObject(); - if ((account == null) || isAdmin(account.getType())) { - isAdmin = true; - if (domainId != null) { - if ((account != null) && !getManagementServer().isChildDomain(account.getDomainId(), domainId)) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Invalid domain id (" + domainId + ") given, unable to list virtual machines."); - } - - if (accountName != null) { - account = getManagementServer().findActiveAccount(accountName, domainId); - if (account == null) { - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, "Unable to find account " + accountName + " in domain " + domainId); - } - accountId = account.getId(); - } - } else { - domainId = ((account == null) ? DomainVO.ROOT_DOMAIN : account.getDomainId()); - } - } else { - accountName = account.getAccountName(); - accountId = account.getId(); - domainId = account.getDomainId(); - } - - Long[] accountIds = null; - if (accountId != null) { - accountIds = new Long[1]; - accountIds[0] = accountId; - } - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - Criteria c = new Criteria("id", Boolean.TRUE, startIndex, Long.valueOf(pageSizeNum)); - - if (keyword != null) { - c.addCriteria(Criteria.KEYWORD, keyword); - } else { - c.addCriteria(Criteria.ID, id); - c.addCriteria(Criteria.NAME, name); - c.addCriteria(Criteria.STATE, state); - - if(zoneId != null) - c.addCriteria(Criteria.DATACENTERID, zoneId); - - // ignore these search requests if it's not an admin - if (isAdmin == true) { - c.addCriteria(Criteria.DOMAINID, domainId); - - if(podId != null) - c.addCriteria(Criteria.PODID, podId); - c.addCriteria(Criteria.HOSTID, hostId); - } - } - - c.addCriteria(Criteria.ACCOUNTID, accountIds); - c.addCriteria(Criteria.ISADMIN, isAdmin); - - List virtualMachines = getManagementServer().searchForUserVMs(c); - - if (virtualMachines == null) { - throw new ServerApiException(BaseCmd.VM_LIST_ERROR, "unable to find virtual machines for account id " + accountName.toString()); - } - - Object[] vmTag = new Object[virtualMachines.size()]; - int i = 0; - - HashMap hostMap = new HashMap(); - List hostList = getManagementServer().listAllActiveHosts(); - for (HostVO hostVO : hostList) { - hostMap.put(hostVO.getId(), hostVO); - } - - for (UserVm vmInstance : virtualMachines) { - List> vmData = new ArrayList>(); - AsyncJobVO asyncJob = getManagementServer().findInstancePendingAsyncJob("vm_instance", vmInstance.getId()); - if(asyncJob != null) { - vmData.add(new Pair(BaseCmd.Properties.JOB_ID.getName(), asyncJob.getId().toString())); - vmData.add(new Pair(BaseCmd.Properties.JOB_STATUS.getName(), String.valueOf(asyncJob.getStatus()))); + List response = new ArrayList(); + for (UserVmVO userVm : userVms) { + UserVmResponse userVmResponse = new UserVmResponse(); + userVmResponse.setId(userVm.getId()); + AsyncJobVO asyncJob = getManagementServer().findInstancePendingAsyncJob("vm_instance", userVm.getId()); + if (asyncJob != null) { + userVmResponse.setJobId(asyncJob.getId()); + userVmResponse.setJobStatus(asyncJob.getStatus()); } - vmData.add(new Pair(BaseCmd.Properties.ID.getName(), Long.toString(vmInstance.getId()))); - vmData.add(new Pair(BaseCmd.Properties.NAME.getName(), vmInstance.getName())); - vmData.add(new Pair(BaseCmd.Properties.CREATED.getName(), getDateString(vmInstance.getCreated()))); - vmData.add(new Pair(BaseCmd.Properties.IP_ADDRESS.getName(), vmInstance.getPrivateIpAddress())); - if (vmInstance.getState() != null) { - vmData.add(new Pair(BaseCmd.Properties.STATE.getName(), vmInstance.getState().toString())); + userVmResponse.setName(userVm.getName()); + userVmResponse.setCreated(userVm.getCreated()); + userVmResponse.setPrivateIp(userVm.getPrivateIpAddress()); + if (userVm.getState() != null) { + userVmResponse.setState(userVm.getState().toString()); } - Account acct = getManagementServer().findAccountById(Long.valueOf(vmInstance.getAccountId())); + Account acct = getManagementServer().findAccountById(Long.valueOf(userVm.getAccountId())); if (acct != null) { - vmData.add(new Pair(BaseCmd.Properties.ACCOUNT.getName(), acct.getAccountName())); - vmData.add(new Pair(BaseCmd.Properties.DOMAIN_ID.getName(), acct.getDomainId().toString())); - vmData.add(new Pair(BaseCmd.Properties.DOMAIN.getName(), getManagementServer().findDomainIdById(acct.getDomainId()).getName())); - } - vmData.add(new Pair(BaseCmd.Properties.HA_ENABLE.getName(), Boolean.valueOf(vmInstance.isHaEnabled()).toString())); - - if (vmInstance.getDisplayName() != null) { - vmData.add(new Pair(BaseCmd.Properties.DISPLAY_NAME.getName(), vmInstance.getDisplayName())); - } - else { - vmData.add(new Pair(BaseCmd.Properties.DISPLAY_NAME.getName(), vmInstance.getName())); + userVmResponse.setAccountName(acct.getAccountName()); + userVmResponse.setDomainId(acct.getDomainId()); + userVmResponse.setDomainName(getManagementServer().findDomainIdById(acct.getDomainId()).getName()); } - if (vmInstance.getGroup() != null) { - vmData.add(new Pair(BaseCmd.Properties.GROUP.getName(), vmInstance.getGroup())); - } + userVmResponse.setHaEnable(userVm.isHaEnabled()); + + if (userVm.getDisplayName() != null) { + userVmResponse.setDisplayName(userVm.getDisplayName()); + } else { + userVmResponse.setDisplayName(userVm.getName()); + } + + userVmResponse.setGroup(userVm.getGroup()); // Data Center Info - vmData.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), Long.valueOf(vmInstance.getDataCenterId()).toString())); - vmData.add(new Pair(BaseCmd.Properties.ZONE_NAME.getName(), getManagementServer().findDataCenterById(vmInstance.getDataCenterId()).getName())); + userVmResponse.setZoneId(userVm.getDataCenterId()); + userVmResponse.setZoneName(getManagementServer().findDataCenterById(userVm.getDataCenterId()).getName()); + + Account account = (Account)UserContext.current().getAccountObject(); //if user is an admin, display host id - if ( (isAdmin == true) && (vmInstance.getHostId() != null)) { - vmData.add(new Pair(BaseCmd.Properties.HOST_ID.getName(), vmInstance.getHostId().toString())); - vmData.add(new Pair(BaseCmd.Properties.HOST_NAME.getName(), getManagementServer().getHostBy(vmInstance.getHostId()).getName())); + if (((account == null) || isAdmin(account.getType())) && (userVm.getHostId() != null)) { + userVmResponse.setHostId(userVm.getHostId()); + userVmResponse.setHostName(getManagementServer().getHostBy(userVm.getHostId()).getName()); } // Template Info - VMTemplateVO template = getManagementServer().findTemplateById(vmInstance.getTemplateId()); + VMTemplateVO template = getManagementServer().findTemplateById(userVm.getTemplateId()); if (template != null) { - vmData.add(new Pair(BaseCmd.Properties.TEMPLATE_ID.getName(), Long.valueOf(vmInstance.getTemplateId()).toString())); - vmData.add(new Pair(BaseCmd.Properties.TEMPLATE_NAME.getName(), template.getName())); - vmData.add(new Pair(BaseCmd.Properties.TEMPLATE_DISPLAY_TEXT.getName(), template.getDisplayText())); - vmData.add(new Pair(BaseCmd.Properties.PASSWORD_ENABLED.getName(), template.getEnablePassword())); + userVmResponse.setTemplateId(userVm.getTemplateId()); + userVmResponse.setTemplateName(template.getName()); + userVmResponse.setTemplateDisplayText(template.getDisplayText()); + userVmResponse.setPasswordEnabled(template.getEnablePassword()); } else { - vmData.add(new Pair(BaseCmd.Properties.TEMPLATE_ID.getName(), "-1")); - vmData.add(new Pair(BaseCmd.Properties.TEMPLATE_NAME.getName(), "ISO Boot")); - vmData.add(new Pair(BaseCmd.Properties.TEMPLATE_DISPLAY_TEXT.getName(), "ISO Boot")); - vmData.add(new Pair(BaseCmd.Properties.PASSWORD_ENABLED.getName(), false)); + userVmResponse.setTemplateId(-1L); + userVmResponse.setTemplateName("ISO Boot"); + userVmResponse.setTemplateDisplayText("ISO Boot"); + userVmResponse.setPasswordEnabled(false); } // ISO Info - if (vmInstance.getIsoId() != null) { - VMTemplateVO iso = getManagementServer().findTemplateById(vmInstance.getIsoId().longValue()); + if (userVm.getIsoId() != null) { + VMTemplateVO iso = getManagementServer().findTemplateById(userVm.getIsoId().longValue()); if (iso != null) { - vmData.add(new Pair(BaseCmd.Properties.ISO_ID.getName(), Long.valueOf(vmInstance.getIsoId()).toString())); - vmData.add(new Pair(BaseCmd.Properties.ISO_NAME.getName(), iso.getName())); + userVmResponse.setIsoId(userVm.getIsoId()); + userVmResponse.setIsoName(iso.getName()); } } // Service Offering Info ServiceOfferingVO offering = getManagementServer().findServiceOfferingById(vmInstance.getServiceOfferingId()); - vmData.add(new Pair(BaseCmd.Properties.SERVICE_OFFERING_ID.getName(), Long.valueOf(vmInstance.getServiceOfferingId()).toString())); - vmData.add(new Pair(BaseCmd.Properties.SERVICE_OFFERING_NAME.getName(), offering.getName())); - vmData.add(new Pair(BaseCmd.Properties.CPU_NUMBER.getName(), Integer.valueOf(offering.getCpu()).toString())); - vmData.add(new Pair(BaseCmd.Properties.CPU_SPEED.getName(), Integer.valueOf(offering.getSpeed()).toString())); - vmData.add(new Pair(BaseCmd.Properties.MEMORY.getName(), Integer.valueOf(offering.getRamSize()).toString())); + userVmResponse.setServiceOfferingId(userVm.getServiceOfferingId()); + userVmResponse.setServiceOfferingName(offering.getName()); + userVmResponse.setCpuNumber(offering.getCpu()); + userVmResponse.setCpuSpeed(offering.getSpeed()); + userVmResponse.setMemory(offering.getRamSize()); //stats calculation DecimalFormat decimalFormat = new DecimalFormat("#.##"); String cpuUsed = null; - VmStats vmStats = getManagementServer().getVmStatistics(vmInstance.getId()); - if (vmStats != null) - { + VmStats vmStats = getManagementServer().getVmStatistics(userVm.getId()); + if (vmStats != null) { float cpuUtil = (float) vmStats.getCPUUtilization(); cpuUsed = decimalFormat.format(cpuUtil) + "%"; - vmData.add(new Pair(BaseCmd.Properties.CPU_USED.getName(), cpuUsed)); - + userVmResponse.setCpuUsed(cpuUsed); + long networkKbRead = (long)vmStats.getNetworkReadKBs(); - vmData.add(new Pair(BaseCmd.Properties.NETWORK_KB_READ.getName(), networkKbRead)); + userVmResponse.setNetworkKbsRead(networkKbRead); long networkKbWrite = (long)vmStats.getNetworkWriteKBs(); - vmData.add(new Pair(BaseCmd.Properties.NETWORK_KB_WRITE.getName(), networkKbWrite)); + userVmResponse.setNetworkKbsWrite(networkKbWrite); } - vmData.add(new Pair(BaseCmd.Properties.OS_TYPE_ID.getName(),vmInstance.getGuestOSId())); + userVmResponse.setOsTypeId(userVm.getGuestOSId()); //network groups - vmData.add(new Pair(BaseCmd.Properties.NETWORK_GROUP_LIST.getName(), getManagementServer().getNetworkGroupsNamesForVm(vmInstance.getId()))); - - vmTag[i++] = vmData; + userVmResponse.setNetworkGroupList(getManagementServer().getNetworkGroupsNamesForVm(userVm.getId())); + + response.add(userVmResponse); } - List> returnTags = new ArrayList>(); - Pair vmTags = new Pair("virtualmachine", vmTag); - returnTags.add(vmTags); - return returnTags; + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/response/UserVmResponse.java b/server/src/com/cloud/api/response/UserVmResponse.java index 1d1168f48b8..aca85c958ac 100644 --- a/server/src/com/cloud/api/response/UserVmResponse.java +++ b/server/src/com/cloud/api/response/UserVmResponse.java @@ -17,6 +17,8 @@ */ package com.cloud.api.response; +import java.util.Date; + import com.cloud.api.ResponseObject; import com.cloud.serializer.Param; @@ -42,6 +44,84 @@ public class UserVmResponse implements ResponseObject { @Param(name="domain") private String domainName; + @Param(name="created") + private Date created; + + @Param(name="state") + private String state; + + @Param(name="haenable") + private Boolean haEnable; + + @Param(name="group") + private String group; + + @Param(name="zoneid") + private Long zoneId; + + @Param(name="zonename") + private String zoneName; + + @Param(name="hostid") + private Long hostId; + + @Param(name="hostname") + private String hostName; + + @Param(name="templateid") + private Long templateId; + + @Param(name="templatename") + private String templateName; + + @Param(name="templatedisplaytext") + private String templateDisplayText; + + @Param(name="passwordenabled") + private Boolean passwordEnabled; + + @Param(name="isoid") + private Long isoId; + + @Param(name="isoname") + private String isoName; + + @Param(name="serviceofferingid") + private Long serviceOfferingId; + + @Param(name="serviceofferingname") + private String serviceOfferingName; + + @Param(name="cpunumber") + private Integer cpuNumber; + + @Param(name="cpuspeed") + private Integer cpuSpeed; + + @Param(name="memory") + private Integer memory; + + @Param(name="cpuused") + private String cpuUsed; + + @Param(name="networkkbsread") + private Long networkKbsRead; + + @Param(name="networkkbswrite") + private Long networkKbsWrite; + + @Param(name="ostypeid") + private Long osTypeId; + + @Param(name="networkgrouplist") + private String networkGroupList; + + @Param(name="jobid") + private Long jobId; + + @Param(name="jobstatus") + private Integer jobStatus; + public Long getId() { return id; } @@ -97,4 +177,212 @@ public class UserVmResponse implements ResponseObject { public void setDomainName(String domainName) { this.domainName = domainName; } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public Boolean getHaEnable() { + return haEnable; + } + + public void setHaEnable(Boolean haEnable) { + this.haEnable = haEnable; + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + + public Long getZoneId() { + return zoneId; + } + + public void setZoneId(Long zoneId) { + this.zoneId = zoneId; + } + + public String getZoneName() { + return zoneName; + } + + public void setZoneName(String zoneName) { + this.zoneName = zoneName; + } + + public Long getHostId() { + return hostId; + } + + public void setHostId(Long hostId) { + this.hostId = hostId; + } + + public String getHostName() { + return hostName; + } + + public void setHostName(String hostName) { + this.hostName = hostName; + } + + public Long getTemplateId() { + return templateId; + } + + public void setTemplateId(Long templateId) { + this.templateId = templateId; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getTemplateDisplayText() { + return templateDisplayText; + } + + public void setTemplateDisplayText(String templateDisplayText) { + this.templateDisplayText = templateDisplayText; + } + + public Boolean getPasswordEnabled() { + return passwordEnabled; + } + + public void setPasswordEnabled(Boolean passwordEnabled) { + this.passwordEnabled = passwordEnabled; + } + + public Long getIsoId() { + return isoId; + } + + public void setIsoId(Long isoId) { + this.isoId = isoId; + } + + public String getIsoName() { + return isoName; + } + + public void setIsoName(String isoName) { + this.isoName = isoName; + } + + public Long getServiceOfferingId() { + return serviceOfferingId; + } + + public void setServiceOfferingId(Long serviceOfferingId) { + this.serviceOfferingId = serviceOfferingId; + } + + public String getServiceOfferingName() { + return serviceOfferingName; + } + + public void setServiceOfferingName(String serviceOfferingName) { + this.serviceOfferingName = serviceOfferingName; + } + + public Integer getCpuNumber() { + return cpuNumber; + } + + public void setCpuNumber(Integer cpuNumber) { + this.cpuNumber = cpuNumber; + } + + public Integer getCpuSpeed() { + return cpuSpeed; + } + + public void setCpuSpeed(Integer cpuSpeed) { + this.cpuSpeed = cpuSpeed; + } + + public Integer getMemory() { + return memory; + } + + public void setMemory(Integer memory) { + this.memory = memory; + } + + public String getCpuUsed() { + return cpuUsed; + } + + public void setCpuUsed(String cpuUsed) { + this.cpuUsed = cpuUsed; + } + + public Long getNetworkKbsRead() { + return networkKbsRead; + } + + public void setNetworkKbsRead(Long networkKbsRead) { + this.networkKbsRead = networkKbsRead; + } + + public Long getNetworkKbsWrite() { + return networkKbsWrite; + } + + public void setNetworkKbsWrite(Long networkKbsWrite) { + this.networkKbsWrite = networkKbsWrite; + } + + public Long getOsTypeId() { + return osTypeId; + } + + public void setOsTypeId(Long osTypeId) { + this.osTypeId = osTypeId; + } + + public String getNetworkGroupList() { + return networkGroupList; + } + + public void setNetworkGroupList(String networkGroupList) { + this.networkGroupList = networkGroupList; + } + + public Long getJobId() { + return jobId; + } + + public void setJobId(Long jobId) { + this.jobId = jobId; + } + + public Integer getJobStatus() { + return jobStatus; + } + + public void setJobStatus(Integer jobStatus) { + this.jobStatus = jobStatus; + } } diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index 97881040bd4..fbc149d53de 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -60,6 +60,7 @@ import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.ListUsersCmd; +import com.cloud.api.commands.ListVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; @@ -1101,6 +1102,14 @@ public interface ManagementServer { */ List searchForUserVMs(Criteria c); + /** + * Obtains a list of virtual machines by the specified search criteria. + * Can search by: "userId", "name", "state", "dataCenterId", "podId", "hostId" + * @param cmd the API command that wraps the search criteria + * @return List of UserVMs. + */ + List searchForUserVMs(ListVMsCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; + /** * Update an existing port forwarding rule on the given public IP / public port for the given protocol * @param userId id of the user performing the action diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index bfd2ece057a..dcc264f803d 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -96,6 +96,7 @@ import com.cloud.api.commands.ListSystemVMsCmd; import com.cloud.api.commands.ListTemplateOrIsoPermissionsCmd; import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.ListUsersCmd; +import com.cloud.api.commands.ListVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; @@ -4894,13 +4895,62 @@ public class ManagementServerImpl implements ManagementServer { return _templateHostDao.findByHostTemplate(secondaryStorageHost.getId(), templateId); } } - @Override public List listUserVMsByHostId(long hostId) { return _userVmDao.listByHostId(hostId); } + @Override + public List searchForUserVMs(ListVMsCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { + Account account = (Account)UserContext.current().getAccountObject(); + Long domainId = cmd.getDomainId(); + String accountName = cmd.getAccountName(); + Long accountId = null; + boolean isAdmin = false; + if ((account == null) || isAdmin(account.getType())) { + isAdmin = true; + if (domainId != null) { + if ((account != null) && !_domainDao.isChildDomain(account.getDomainId(), domainId)) { + throw new PermissionDeniedException("Invalid domain id (" + domainId + ") given, unable to list virtual machines."); + } + + if (accountName != null) { + account = _accountDao.findActiveAccount(accountName, domainId); + if (account == null) { + throw new InvalidParameterValueException("Unable to find account " + accountName + " in domain " + domainId); + } + accountId = account.getId(); + } + } else { + domainId = ((account == null) ? DomainVO.ROOT_DOMAIN : account.getDomainId()); + } + } else { + accountName = account.getAccountName(); + accountId = account.getId(); + domainId = account.getDomainId(); + } + + Criteria c = new Criteria("id", Boolean.TRUE, cmd.getStartIndex(), cmd.getPageSizeVal()); + c.addCriteria(Criteria.KEYWORD, cmd.getKeyword()); + c.addCriteria(Criteria.ID, cmd.getId()); + c.addCriteria(Criteria.NAME, cmd.getInstanceName()); + c.addCriteria(Criteria.STATE, cmd.getState()); + c.addCriteria(Criteria.DATACENTERID, cmd.getZoneId()); + + // ignore these search requests if it's not an admin + if (isAdmin == true) { + c.addCriteria(Criteria.DOMAINID, domainId); + c.addCriteria(Criteria.PODID, cmd.getPodId()); + c.addCriteria(Criteria.HOSTID, cmd.getHostId()); + } + + c.addCriteria(Criteria.ACCOUNTID, accountId); + c.addCriteria(Criteria.ISADMIN, isAdmin); + + return searchForUserVMs(c); + } + @Override public List searchForUserVMs(Criteria c) { Filter searchFilter = new Filter(UserVmVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); From 741bb77b7ee665355052c7a9c008f6071f20143c Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 8 Sep 2010 18:36:03 -0700 Subject: [PATCH 6/7] Refactor listVolumes to new API framework. --- .../cloud/api/commands/ListVolumesCmd.java | 260 +++++----------- .../cloud/api/response/VolumeResponse.java | 278 ++++++++++++++++++ .../com/cloud/server/ManagementServer.java | 5 +- .../cloud/server/ManagementServerImpl.java | 68 +++-- 4 files changed, 405 insertions(+), 206 deletions(-) create mode 100644 server/src/com/cloud/api/response/VolumeResponse.java diff --git a/server/src/com/cloud/api/commands/ListVolumesCmd.java b/server/src/com/cloud/api/commands/ListVolumesCmd.java index eb70306b43c..b661d766710 100644 --- a/server/src/com/cloud/api/commands/ListVolumesCmd.java +++ b/server/src/com/cloud/api/commands/ListVolumesCmd.java @@ -15,50 +15,32 @@ * along with this program. If not, see . * */ - package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; +import com.cloud.api.response.VolumeResponse; import com.cloud.async.AsyncJobVO; -import com.cloud.domain.DomainVO; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.server.Criteria; +import com.cloud.serializer.SerializerHelper; +import com.cloud.storage.DiskOfferingVO; import com.cloud.storage.VolumeVO; import com.cloud.user.Account; -import com.cloud.utils.Pair; import com.cloud.vm.VMInstanceVO; - -public class ListVolumesCmd extends BaseCmd{ + +@Implementation(method="searchForVolumes") +public class ListVolumesCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListVolumesCmd.class.getName()); private static final String s_name = "listvolumesresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT_OBJ, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.DOMAIN_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.HOST_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.NAME, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.POD_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.TYPE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.VIRTUAL_MACHINE_ID, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.FALSE)); - - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -138,177 +120,85 @@ public class ListVolumesCmd extends BaseCmd{ @Override public String getName() { return s_name; - } - @Override - public List> getProperties() { - return s_properties; - } + } - @Override - public List> execute(Map params) { - Account account = (Account)params.get(BaseCmd.Properties.ACCOUNT_OBJ.getName()); - Long id = (Long)params.get(BaseCmd.Properties.ID.getName()); - String type = (String)params.get(BaseCmd.Properties.TYPE.getName()); - String name = (String)params.get(BaseCmd.Properties.NAME.getName()); - Long zoneId = (Long)params.get(BaseCmd.Properties.ZONE_ID.getName()); - Long podId = (Long)params.get(BaseCmd.Properties.POD_ID.getName()); - Long vmId = (Long)params.get(BaseCmd.Properties.VIRTUAL_MACHINE_ID.getName()); - String accountName = (String)params.get(BaseCmd.Properties.ACCOUNT.getName()); - Long domainId = (Long)params.get(BaseCmd.Properties.DOMAIN_ID.getName()); - Long hostId = (Long)params.get(BaseCmd.Properties.HOST_ID.getName()); - String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); - Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); - - Long accountId = null; - boolean isAdmin = false; - if ((account == null) || isAdmin(account.getType())) { - isAdmin = true; - if (domainId != null) { - if ((account != null) && !getManagementServer().isChildDomain(account.getDomainId(), domainId)) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Invalid domain id (" + domainId + ") given, unable to list volumes."); - } - if (accountName != null) { - Account userAccount = getManagementServer().findActiveAccount(accountName, domainId); - if (userAccount != null) { - accountId = userAccount.getId(); - } else { - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, "could not find account " + accountName + " in domain " + domainId); - } - } - } else { - domainId = ((account == null) ? DomainVO.ROOT_DOMAIN : account.getDomainId()); - } - } else { - accountId = account.getId(); - } - - Long[] accountIds = null; - if (accountId != null) { - accountIds = new Long[1]; - accountIds[0] = accountId; - } - - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum-1)); - } - } - - Criteria c = new Criteria("created", Boolean.FALSE, startIndex, Long.valueOf(pageSizeNum)); - - c.addCriteria(Criteria.ACCOUNTID, accountIds); - if (keyword != null) { - c.addCriteria(Criteria.KEYWORD, keyword); - } else { - c.addCriteria(Criteria.ID, id); - c.addCriteria(Criteria.INSTANCEID, vmId); - c.addCriteria(Criteria.NAME, name); - if (isAdmin) { - c.addCriteria(Criteria.VTYPE, type); - c.addCriteria(Criteria.DATACENTERID, zoneId); - c.addCriteria(Criteria.PODID, podId); - c.addCriteria(Criteria.HOSTID, hostId); - c.addCriteria(Criteria.DOMAINID, domainId); - } - } - - List volumes = getManagementServer().searchForVolumes(c); - - if (volumes == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "unable to find volumes"); - } - - List> volumeTags = new ArrayList>(); - Object[] vTag = new Object[volumes.size()]; - int i = 0; - for (VolumeVO volume : volumes) { - - List> volumeData = new ArrayList>(); - - volumeData.add(new Pair(BaseCmd.Properties.ID.getName(), volume.getId())); + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List volumes = (List)getResponseObject(); + + List response = new ArrayList(); + for (VolumeVO volume : volumes) { + VolumeResponse volResponse = new VolumeResponse(); + volResponse.setId(volume.getId()); - AsyncJobVO asyncJob = getManagementServer().findInstancePendingAsyncJob("volume", volume.getId()); - if(asyncJob != null) { - volumeData.add(new Pair(BaseCmd.Properties.JOB_ID.getName(), asyncJob.getId().toString())); - volumeData.add(new Pair(BaseCmd.Properties.JOB_STATUS.getName(), String.valueOf(asyncJob.getStatus()))); + if (asyncJob != null) { + volResponse.setJobId(asyncJob.getId()); + volResponse.setJobStatus(asyncJob.getStatus()); } - - if (volume.getName() != null) { - volumeData.add(new Pair(BaseCmd.Properties.NAME.getName(), volume.getName())); - } else { - volumeData.add(new Pair(BaseCmd.Properties.NAME.getName(), "")); + + if (volume.getName() != null) { + volResponse.setName(volume.getName()); + } else { + volResponse.setName(""); } - volumeData.add(new Pair(BaseCmd.Properties.ZONE_ID.getName(), Long.valueOf(volume.getDataCenterId()).toString())); - volumeData.add(new Pair(BaseCmd.Properties.ZONE_NAME.getName(), getManagementServer().findDataCenterById(volume.getDataCenterId()).getName())); - - volumeData.add(new Pair(BaseCmd.Properties.TYPE.getName(), volume.getVolumeType())); - //volumeData.add(new Pair(BaseCmd.Properties.HOST_NAME.getName(), getManagementServer().getHostBy(volume.getHostId()).getName())); + volResponse.setZoneId(volume.getDataCenterId()); + volResponse.setZoneName(getManagementServer().findDataCenterById(volume.getDataCenterId()).getName()); - //volume.getDeviceId() might be null - if(volume.getDeviceId() != null) - volumeData.add(new Pair(BaseCmd.Properties.DEVICE_ID.getName(), Long.valueOf(volume.getDeviceId()).toString())); - - Long instanceId = volume.getInstanceId(); - if (instanceId != null) { - VMInstanceVO vm = getManagementServer().findVMInstanceById(instanceId); - volumeData.add(new Pair(BaseCmd.Properties.VIRTUAL_MACHINE_ID.getName(), vm.getId())); - volumeData.add(new Pair(BaseCmd.Properties.VIRTUAL_MACHINE_NAME.getName(), vm.getName())); - volumeData.add(new Pair(BaseCmd.Properties.VIRTUAL_MACHINE_DISPLAYNAME.getName(), vm.getName())); - volumeData.add(new Pair(BaseCmd.Properties.VIRTUAL_MACHINE_STATE.getName(), vm.getState())); - } - - // Show the virtual size of the volume - long virtualSizeInBytes = volume.getSize(); - volumeData.add(new Pair(BaseCmd.Properties.SIZE.getName(), virtualSizeInBytes)); - - volumeData.add(new Pair(BaseCmd.Properties.CREATED.getName(), getDateString(volume.getCreated()))); - volumeData.add(new Pair(BaseCmd.Properties.STATE.getName(),volume.getStatus())); - - Account accountTemp = getManagementServer().findAccountById(volume.getAccountId()); - - if (accountTemp != null) { - volumeData.add(new Pair(BaseCmd.Properties.ACCOUNT.getName(), accountTemp.getAccountName())); - volumeData.add(new Pair(BaseCmd.Properties.DOMAIN_ID.getName(), accountTemp.getDomainId())); - volumeData.add(new Pair(BaseCmd.Properties.DOMAIN.getName(), getManagementServer().findDomainIdById(accountTemp.getDomainId()).getName())); - } - - String storageType; + volResponse.setVolumeType(volume.getVolumeType().toString()); + volResponse.setDeviceId(volume.getDeviceId()); + + Long instanceId = volume.getInstanceId(); + if (instanceId != null) { + VMInstanceVO vm = getManagementServer().findVMInstanceById(instanceId); + volResponse.setVirtualMachineId(vm.getId()); + volResponse.setVirtualMachineName(vm.getName()); + volResponse.setVirtualMachineDisplayName(vm.getName()); + volResponse.setVirtualMachineState(vm.getState().toString()); + } + + // Show the virtual size of the volume + volResponse.setSize(volume.getSize()); + + volResponse.setCreated(volume.getCreated()); + volResponse.setState(volume.getStatus().toString()); + + Account accountTemp = getManagementServer().findAccountById(volume.getAccountId()); + if (accountTemp != null) { + volResponse.setAccountName(accountTemp.getAccountName()); + volResponse.setDomainId(accountTemp.getDomainId()); + volResponse.setDomainName(getManagementServer().findDomainIdById(accountTemp.getDomainId()).getName()); + } + + String storageType; try { if(volume.getPoolId() == null){ storageType = "unknown"; - } else { + } else { storageType = getManagementServer().volumeIsOnSharedStorage(volume.getId()) ? "shared" : "local"; - } - } catch (InvalidParameterValueException e) { - s_logger.error(e.getMessage(), e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Volume " + volume.getName() + " does not have a valid ID"); - } - - volumeData.add(new Pair(BaseCmd.Properties.STORAGE_TYPE.getName(), storageType)); - - volumeData.add(new Pair(BaseCmd.Properties.DISK_OFFERING_ID.getName(),volume.getDiskOfferingId())); - if(volume.getDiskOfferingId()!=null) - { - volumeData.add(new Pair(BaseCmd.Properties.DISK_OFFERING_NAME.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getName())); - volumeData.add(new Pair(BaseCmd.Properties.DISK_OFFERING_DISPLAY_TEXT.getName(),getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()).getDisplayText())); + } + } catch (InvalidParameterValueException e) { + s_logger.error(e.getMessage(), e); + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Volume " + volume.getName() + " does not have a valid ID"); } + + volResponse.setStorageType(storageType); + + volResponse.setDiskOfferingId(volume.getDiskOfferingId()); + if (volume.getDiskOfferingId() != null) { + DiskOfferingVO diskOffering = getManagementServer().findDiskOfferingById(volume.getDiskOfferingId()); + volResponse.setDiskOfferingName(diskOffering.getName()); + volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText()); + } + Long poolId = volume.getPoolId(); - String poolName = (poolId == null) ? "none" : getManagementServer().findPoolById(poolId).getName(); - volumeData.add(new Pair(BaseCmd.Properties.STORAGE.getName(), poolName)); - - vTag[i++] = volumeData; - } - Pair volumeTag = new Pair("volume", vTag); - volumeTags.add(volumeTag); - return volumeTags; + String poolName = (poolId == null) ? "none" : getManagementServer().findPoolById(poolId).getName(); + volResponse.setStoragePoolName(poolName); + + response.add(volResponse); + } + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/response/VolumeResponse.java b/server/src/com/cloud/api/response/VolumeResponse.java new file mode 100644 index 00000000000..87e8ce2edce --- /dev/null +++ b/server/src/com/cloud/api/response/VolumeResponse.java @@ -0,0 +1,278 @@ +/** + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * + * This software is licensed under the GNU General Public License v3 or later. + * + * It is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ +package com.cloud.api.response; + +import java.util.Date; + +import com.cloud.api.ResponseObject; +import com.cloud.serializer.Param; + +public class VolumeResponse implements ResponseObject { + @Param(name="id") + private Long id; + + @Param(name="jobid") + private Long jobId; + + @Param(name="jobstatus") + private Integer jobStatus; + + @Param(name="name") + private String name; + + @Param(name="zoneid") + private Long zoneId; + + @Param(name="zonename") + private String zoneName; + + @Param(name="type") + private String volumeType; + + @Param(name="deviceid") + private Long deviceId; + + @Param(name="virtualmachineid") + private Long virtualMachineId; + + @Param(name="virtualmachinename") + private String virtualMachineName; + + @Param(name="virtualmachinedisplayname") + private String virtualMachineDisplayName; + + @Param(name="virtualmachinestate") + private String virtualMachineState; + + @Param(name="size") + private Long size; + + @Param(name="created") + private Date created; + + @Param(name="state") + private String state; + + @Param(name="account") + private String accountName; + + @Param(name="domainid") + private Long domainId; + + @Param(name="domain") + private String domainName; + + @Param(name="storagetype") + private String storageType; + + @Param(name="diskofferingid") + private Long diskOfferingId; + + @Param(name="diskofferingname") + private String diskOfferingName; + + @Param(name="diskofferingdisplaytext") + private String diskOfferingDisplayText; + + @Param(name="storage") + private String storagePoolName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getJobId() { + return jobId; + } + + public void setJobId(Long jobId) { + this.jobId = jobId; + } + + public Integer getJobStatus() { + return jobStatus; + } + + public void setJobStatus(Integer jobStatus) { + this.jobStatus = jobStatus; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getZoneId() { + return zoneId; + } + + public void setZoneId(Long zoneId) { + this.zoneId = zoneId; + } + + public String getZoneName() { + return zoneName; + } + + public void setZoneName(String zoneName) { + this.zoneName = zoneName; + } + + public String getVolumeType() { + return volumeType; + } + + public void setVolumeType(String volumeType) { + this.volumeType = volumeType; + } + + public Long getDeviceId() { + return deviceId; + } + + public void setDeviceId(Long deviceId) { + this.deviceId = deviceId; + } + + public Long getVirtualMachineId() { + return virtualMachineId; + } + + public void setVirtualMachineId(Long virtualMachineId) { + this.virtualMachineId = virtualMachineId; + } + + public String getVirtualMachineName() { + return virtualMachineName; + } + + public void setVirtualMachineName(String virtualMachineName) { + this.virtualMachineName = virtualMachineName; + } + + public String getVirtualMachineDisplayName() { + return virtualMachineDisplayName; + } + + public void setVirtualMachineDisplayName(String virtualMachineDisplayName) { + this.virtualMachineDisplayName = virtualMachineDisplayName; + } + + public String getVirtualMachineState() { + return virtualMachineState; + } + + public void setVirtualMachineState(String virtualMachineState) { + this.virtualMachineState = virtualMachineState; + } + + public Long getSize() { + return size; + } + + public void setSize(Long size) { + this.size = size; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public Long getDomainId() { + return domainId; + } + + public void setDomainId(Long domainId) { + this.domainId = domainId; + } + + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + public String getStorageType() { + return storageType; + } + + public void setStorageType(String storageType) { + this.storageType = storageType; + } + + public Long getDiskOfferingId() { + return diskOfferingId; + } + + public void setDiskOfferingId(Long diskOfferingId) { + this.diskOfferingId = diskOfferingId; + } + + public String getDiskOfferingName() { + return diskOfferingName; + } + + public void setDiskOfferingName(String diskOfferingName) { + this.diskOfferingName = diskOfferingName; + } + + public String getDiskOfferingDisplayText() { + return diskOfferingDisplayText; + } + + public void setDiskOfferingDisplayText(String diskOfferingDisplayText) { + this.diskOfferingDisplayText = diskOfferingDisplayText; + } + + public String getStoragePoolName() { + return storagePoolName; + } + + public void setStoragePoolName(String storagePoolName) { + this.storagePoolName = storagePoolName; + } +} diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index fbc149d53de..d6dc1162299 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -62,6 +62,7 @@ import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.ListVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; +import com.cloud.api.commands.ListVolumesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.RebootSystemVmCmd; @@ -1200,10 +1201,10 @@ public interface ManagementServer { /** revisit * Obtains a list of storage volumes by the specified search criteria. * Can search by: "userId", "vType", "instanceId", "dataCenterId", "podId", "hostId" - * @param c + * @param cmd * @return List of Volumes. */ - List searchForVolumes(Criteria c); + List searchForVolumes(ListVolumesCmd cmd) throws InvalidParameterValueException, PermissionDeniedException; /** * Checks that the volume is stored on a shared storage pool. diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index dcc264f803d..458f38c7b1e 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -98,6 +98,7 @@ import com.cloud.api.commands.ListTemplatesCmd; import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.ListVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; +import com.cloud.api.commands.ListVolumesCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.PrepareForMaintenanceCmd; @@ -5549,19 +5550,52 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List searchForVolumes(Criteria c) { - Filter searchFilter = new Filter(VolumeVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); - // SearchCriteria sc = _volumeDao.createSearchCriteria(); + public List searchForVolumes(ListVolumesCmd cmd) throws InvalidParameterValueException, PermissionDeniedException { + Account account = (Account)UserContext.current().getAccountObject(); + Long domainId = cmd.getDomainId(); + String accountName = cmd.getAccountName(); + Long accountId = null; + boolean isAdmin = false; + if ((account == null) || isAdmin(account.getType())) { + isAdmin = true; + if (domainId != null) { + if ((account != null) && !_domainDao.isChildDomain(account.getDomainId(), domainId)) { + throw new PermissionDeniedException("Invalid domain id (" + domainId + ") given, unable to list volumes."); + } + if (accountName != null) { + Account userAccount = _accountDao.findActiveAccount(accountName, domainId); + if (userAccount != null) { + accountId = userAccount.getId(); + } else { + throw new InvalidParameterValueException("could not find account " + accountName + " in domain " + domainId); + } + } + } else { + domainId = ((account == null) ? DomainVO.ROOT_DOMAIN : account.getDomainId()); + } + } else { + accountId = account.getId(); + } - Object[] accountIds = (Object[]) c.getCriteria(Criteria.ACCOUNTID); - Object type = c.getCriteria(Criteria.VTYPE); - Long vmInstanceId = (Long) c.getCriteria(Criteria.INSTANCEID); - Object zone = c.getCriteria(Criteria.DATACENTERID); - Object pod = c.getCriteria(Criteria.PODID); - Object domainId = c.getCriteria(Criteria.DOMAINID); - Object id = c.getCriteria(Criteria.ID); - Object keyword = c.getCriteria(Criteria.KEYWORD); - Object name = c.getCriteria(Criteria.NAME); + Filter searchFilter = new Filter(VolumeVO.class, "created", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + + Object id = cmd.getId(); + Long vmInstanceId = cmd.getVirtualMachineId(); + Object name = cmd.getVolumeName(); + Object keyword = cmd.getKeyword(); + + Object type = null; + Object zone = null; + Object pod = null; + //Object host = null; TODO + if (isAdmin) { + type = cmd.getType(); + zone = cmd.getZoneId(); + pod = cmd.getPodId(); + // host = cmd.getHostId(); TODO + } else { + domainId = null; + } // hack for now, this should be done better but due to needing a join I opted to // do this quickly and worry about making it pretty later @@ -5586,7 +5620,7 @@ public class ManagementServerImpl implements ManagementServer { // Only return volumes that are not destroyed sb.and("destroyed", sb.entity().getDestroyed(), SearchCriteria.Op.EQ); - if ((accountIds == null) && (domainId != null)) { + if ((accountId == null) && (domainId != null)) { // if accountId isn't specified, we can do a domain match for the admin case SearchBuilder domainSearch = _domainDao.createSearchBuilder(); domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); @@ -5612,12 +5646,8 @@ public class ManagementServerImpl implements ManagementServer { sc.setParameters("id", id); } - if (accountIds != null) { - if ((accountIds.length == 1) && (accountIds[0] != null)) { - sc.setParameters("accountIdEQ", accountIds[0]); - } else { - sc.setParameters("accountIdIN", accountIds); - } + if (accountId != null) { + sc.setParameters("accountIdEQ", accountId); } else if (domainId != null) { DomainVO domain = _domainDao.findById((Long)domainId); sc.setJoinParameters("domainSearch", "path", domain.getPath() + "%"); From 8c2756b681838737e9b8b6d9dc02178084d7fdcb Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 8 Sep 2010 18:55:38 -0700 Subject: [PATCH 7/7] Refactor listZones to new API framework. --- .../cloud/api/commands/ListZonesByCmd.java | 115 ++++++------------ .../com/cloud/api/response/ZoneResponse.java | 11 ++ .../com/cloud/server/ManagementServer.java | 26 +--- .../cloud/server/ManagementServerImpl.java | 40 +++--- 4 files changed, 74 insertions(+), 118 deletions(-) diff --git a/server/src/com/cloud/api/commands/ListZonesByCmd.java b/server/src/com/cloud/api/commands/ListZonesByCmd.java index bf6b2868153..bb5e5c78fce 100644 --- a/server/src/com/cloud/api/commands/ListZonesByCmd.java +++ b/server/src/com/cloud/api/commands/ListZonesByCmd.java @@ -20,28 +20,23 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; +import com.cloud.api.response.ZoneResponse; import com.cloud.dc.DataCenterVO; +import com.cloud.serializer.SerializerHelper; import com.cloud.user.Account; -import com.cloud.utils.Pair; - -//FIXME: consolidate this class and ListDataCentersByCmd -public class ListZonesByCmd extends BaseCmd { +import com.cloud.user.UserContext; + +@Implementation(method="listDataCenters") +public class ListZonesByCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListZonesByCmd.class.getName()); private static final String s_name = "listzonesresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.AVAILABLE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT_OBJ, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -65,71 +60,35 @@ public class ListZonesByCmd extends BaseCmd { @Override public String getName() { return s_name; - } - @Override - public List> getProperties() { - return s_properties; - } + } - @Override - public List> execute(Map params) { - Account account = (Account)params.get(BaseCmd.Properties.ACCOUNT_OBJ.getName()); - Boolean available = (Boolean)params.get(BaseCmd.Properties.AVAILABLE.getName()); - - List dataCenters = null; - if (account != null) { - if (available != null && available) { - dataCenters = getManagementServer().listDataCenters(); - } else { - dataCenters = getManagementServer().listDataCentersBy(account.getId().longValue()); - } - } else { - // available is kinda useless in this case because we can't exactly list by - // accountId if we don't have one. In this case, we just assume the user - // wants all the zones. - dataCenters = getManagementServer().listDataCenters(); - } - - if (dataCenters == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "unable to find zones for account " + account.getAccountName()); - } - List> dcTags = new ArrayList>(); - Object[] dcInstTag = new Object[dataCenters.size()]; - int i = 0; - for (DataCenterVO dataCenter : dataCenters) { - List> dcData = new ArrayList>(); - if (dataCenter.getId() != null) { - dcData.add(new Pair(BaseCmd.Properties.ID.getName(), dataCenter.getId().toString())); - } - dcData.add(new Pair(BaseCmd.Properties.NAME.getName(), dataCenter.getName())); - if ((dataCenter.getDescription() != null) && !dataCenter.getDescription().equalsIgnoreCase("null")) { - dcData.add(new Pair(BaseCmd.Properties.DESCRIPTION.getName(), dataCenter.getDescription())); - } - if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) { - if (dataCenter.getDns1() != null) { - dcData.add(new Pair(BaseCmd.Properties.DNS1.getName(), dataCenter.getDns1())); - } - if (dataCenter.getDns2() != null) { - dcData.add(new Pair(BaseCmd.Properties.DNS2.getName(), dataCenter.getDns2())); - } - if (dataCenter.getInternalDns1() != null) { - dcData.add(new Pair(BaseCmd.Properties.INTERNAL_DNS1.getName(), dataCenter.getInternalDns1())); - } - if (dataCenter.getInternalDns2() != null) { - dcData.add(new Pair(BaseCmd.Properties.INTERNAL_DNS2.getName(), dataCenter.getInternalDns2())); - } - if (dataCenter.getVnet() != null) { - dcData.add(new Pair("vlan", dataCenter.getVnet())); - } - if (dataCenter.getGuestNetworkCidr() != null) { - dcData.add(new Pair(BaseCmd.Properties.GUEST_CIDR_ADDRESS.getName(), dataCenter.getGuestNetworkCidr())); - } - } - - dcInstTag[i++] = dcData; - } - Pair dcTag = new Pair("zone", dcInstTag); - dcTags.add(dcTag); - return dcTags; + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List dataCenters = (List)getResponseObject(); + Account account = (Account)UserContext.current().getAccountObject(); + + List response = new ArrayList(); + for (DataCenterVO dataCenter : dataCenters) { + ZoneResponse zoneResponse = new ZoneResponse(); + zoneResponse.setId(dataCenter.getId()); + zoneResponse.setName(dataCenter.getName()); + + if ((dataCenter.getDescription() != null) && !dataCenter.getDescription().equalsIgnoreCase("null")) { + zoneResponse.setDescription(dataCenter.getDescription()); + } + + if ((account == null) || (account.getType() == Account.ACCOUNT_TYPE_ADMIN)) { + zoneResponse.setDns1(dataCenter.getDns1()); + zoneResponse.setDns2(dataCenter.getDns2()); + zoneResponse.setInternalDns1(dataCenter.getInternalDns1()); + zoneResponse.setInternalDns2(dataCenter.getInternalDns2()); + zoneResponse.setVlan(dataCenter.getVnet()); + zoneResponse.setGuestCidrAddress(dataCenter.getGuestNetworkCidr()); + } + + response.add(zoneResponse); + } + + return SerializerHelper.toSerializedString(response); } } diff --git a/server/src/com/cloud/api/response/ZoneResponse.java b/server/src/com/cloud/api/response/ZoneResponse.java index 9f6a1a280dd..c41e185ca08 100644 --- a/server/src/com/cloud/api/response/ZoneResponse.java +++ b/server/src/com/cloud/api/response/ZoneResponse.java @@ -27,6 +27,9 @@ public class ZoneResponse implements ResponseObject { @Param(name="name") private String name; + @Param(name="description") + private String description; + @Param(name="dns1") private String dns1; @@ -61,6 +64,14 @@ public class ZoneResponse implements ResponseObject { this.name = name; } + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + public String getDns1() { return dns1; } diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index d6dc1162299..40d69e3a83d 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -63,6 +63,7 @@ import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.ListVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.ListVolumesCmd; +import com.cloud.api.commands.ListZonesByCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.RebootSystemVmCmd; @@ -781,19 +782,13 @@ public interface ManagementServer { HostPodVO getPodBy(long podId); /** - * Retrieves the list of all data centers + * Retrieves the list of data centers with search criteria. + * Currently the only search criteria is "available" zones for the account that invokes the API. By specifying + * available=true all zones which the account can access. By specifying available=false the zones where the + * account has virtual machine instances will be returned. * @return a list of DataCenters */ - List listDataCenters(); - - /** - * Retrieves a list of data centers that contain domain routers - * that the specified user owns. - * - * @param userId - * @return a list of DataCenters - */ - List listDataCentersBy(long userId); + List listDataCenters(ListZonesByCmd cmd); /** * Retrieves a host by id @@ -802,15 +797,6 @@ public interface ManagementServer { */ HostVO getHostBy(long hostId); - -// /** -// * Deletes a host -// * -// * @param hostId -// * @param true if deleted, false otherwise -// */ -// boolean deleteHost(long hostId); - /** * Retrieves all Events between the start and end date specified * diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 458f38c7b1e..fe6334ee3a7 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -99,6 +99,7 @@ import com.cloud.api.commands.ListUsersCmd; import com.cloud.api.commands.ListVMsCmd; import com.cloud.api.commands.ListVlanIpRangesCmd; import com.cloud.api.commands.ListVolumesCmd; +import com.cloud.api.commands.ListZonesByCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.PrepareForMaintenanceCmd; @@ -2822,26 +2823,29 @@ public class ManagementServerImpl implements ManagementServer { @Override - public List listDataCenters() { - return _dcDao.listAllActive(); - } - - @Override - public List listDataCentersBy(long accountId) { + public List listDataCenters(ListZonesByCmd cmd) { List dcs = _dcDao.listAllActive(); - List routers = _routerDao.listBy(accountId); - for (Iterator iter = dcs.iterator(); iter.hasNext();) { - DataCenterVO dc = iter.next(); - boolean found = false; - for (DomainRouterVO router : routers) { - if (dc.getId() == router.getDataCenterId()) { - found = true; - break; + + Account account = (Account)UserContext.current().getAccountObject(); + Boolean available = cmd.isAvailable(); + if (account != null) { + if ((available != null) && Boolean.FALSE.equals(available)) { + List routers = _routerDao.listBy(account.getId()); + for (Iterator iter = dcs.iterator(); iter.hasNext();) { + DataCenterVO dc = iter.next(); + boolean found = false; + for (DomainRouterVO router : routers) { + if (dc.getId() == router.getDataCenterId()) { + found = true; + break; + } + } + if (!found) + iter.remove(); } } - if (!found) - iter.remove(); } + return dcs; } @@ -2850,10 +2854,6 @@ public class ManagementServerImpl implements ManagementServer { return _hostDao.findById(hostId); } -// public boolean deleteHost(long hostId) { -// return _agentMgr.deleteHost(hostId); -// } - @Override public long getId() { return MacAddress.getMacAddress().toLong();