diff --git a/api/src/com/cloud/api/BaseAsyncCmd.java b/api/src/com/cloud/api/BaseAsyncCmd.java
index 3a182a45f37..993eac79254 100644
--- a/api/src/com/cloud/api/BaseAsyncCmd.java
+++ b/api/src/com/cloud/api/BaseAsyncCmd.java
@@ -56,7 +56,8 @@ public abstract class BaseAsyncCmd extends BaseCmd {
public ResponseObject getResponse(long jobId) {
AsyncJobResponse response = new AsyncJobResponse();
- response.setId(jobId);
+
+ response.setId(_identityService.getIdentityUuid("async_job", String.valueOf(jobId)));
response.setResponseName(getCommandName());
return response;
}
@@ -129,6 +130,4 @@ public abstract class BaseAsyncCmd extends BaseCmd {
}
return _mgr.saveCompletedEvent((userId == null) ? User.UID_SYSTEM : userId, getEntityOwnerId(), level, eventType, description, startEvent);
}
-
-
}
diff --git a/api/src/com/cloud/api/BaseCmd.java b/api/src/com/cloud/api/BaseCmd.java
index eb2530fed26..25c2b1cebd4 100755
--- a/api/src/com/cloud/api/BaseCmd.java
+++ b/api/src/com/cloud/api/BaseCmd.java
@@ -124,7 +124,8 @@ public abstract class BaseCmd {
public static FirewallService _firewallService;
public static DomainService _domainService;
public static ResourceLimitService _resourceLimitService;
-
+ public static IdentityService _identityService;
+
static void setComponents(ResponseGenerator generator) {
ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
_mgr = (ManagementService)ComponentLocator.getComponent(ManagementService.Name);
@@ -149,6 +150,7 @@ public abstract class BaseCmd {
_firewallService = locator.getManager(FirewallService.class);
_domainService = locator.getManager(DomainService.class);
_resourceLimitService = locator.getManager(ResourceLimitService.class);
+ _identityService = locator.getManager(IdentityService.class);
}
public abstract void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException;
diff --git a/server/src/com/cloud/Identity/dao/IdentityVO.java b/api/src/com/cloud/api/IdentityProxy.java
similarity index 56%
rename from server/src/com/cloud/Identity/dao/IdentityVO.java
rename to api/src/com/cloud/api/IdentityProxy.java
index 0d6cb4175f8..5d90baa3804 100644
--- a/server/src/com/cloud/Identity/dao/IdentityVO.java
+++ b/api/src/com/cloud/api/IdentityProxy.java
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved.
+ * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
*
* This software is licensed under the GNU General Public License v3 or later.
*
@@ -15,13 +15,33 @@
* along with this program. If not, see .
*
*/
-package com.cloud.Identity.dao;
+package com.cloud.api;
-import javax.persistence.Entity;
+public class IdentityProxy {
+ private String _tableName;
+ private Long _value;
-/**
- * This is a dummy class to fit for CloudStack Dao framework
- */
-@Entity
-public class IdentityVO {
+ public IdentityProxy() {
+ }
+
+ public IdentityProxy(String tableName) {
+ _tableName = tableName;
+ }
+
+ public String getTableName() {
+ return _tableName;
+ }
+
+ public void setTableName(String tableName) {
+ _tableName = tableName;
+ }
+
+ public Long getValue() {
+ return _value;
+ }
+
+ public void setValue(Long value) {
+ _value = value;
+ }
}
+
diff --git a/server/src/com/cloud/Identity/dao/IdentityDao.java b/api/src/com/cloud/api/IdentityService.java
similarity index 74%
rename from server/src/com/cloud/Identity/dao/IdentityDao.java
rename to api/src/com/cloud/api/IdentityService.java
index 9c078562325..1c36be520fe 100644
--- a/server/src/com/cloud/Identity/dao/IdentityDao.java
+++ b/api/src/com/cloud/api/IdentityService.java
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved.
+ * Copyright (C) 2010 Cloud.com, Inc. All rights reserved.
*
* This software is licensed under the GNU General Public License v3 or later.
*
@@ -15,12 +15,9 @@
* along with this program. If not, see .
*
*/
+package com.cloud.api;
-package com.cloud.Identity.dao;
-
-import com.cloud.api.IdentityMapper;
-import com.cloud.utils.db.GenericDao;
-
-public interface IdentityDao extends GenericDao {
+public interface IdentityService {
Long getIdentityId(IdentityMapper mapper, String identityString);
+ String getIdentityUuid(String tableName, String identityString);
}
diff --git a/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java b/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java
index 910aea2df17..3fc1402f145 100644
--- a/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java
+++ b/api/src/com/cloud/api/commands/QueryAsyncJobResultCmd.java
@@ -22,6 +22,7 @@ import org.apache.log4j.Logger;
import com.cloud.api.ApiConstants;
import com.cloud.api.BaseCmd;
+import com.cloud.api.IdentityMapper;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.response.AsyncJobResponse;
@@ -37,6 +38,7 @@ public class QueryAsyncJobResultCmd extends BaseCmd {
//////////////// API parameters /////////////////////
/////////////////////////////////////////////////////
+ @IdentityMapper(entityTableName="async_job")
@Parameter(name=ApiConstants.JOB_ID, type=CommandType.LONG, required=true, description="the ID of the asychronous job")
private Long id;
diff --git a/api/src/com/cloud/api/response/AsyncJobResponse.java b/api/src/com/cloud/api/response/AsyncJobResponse.java
index 8beac5e14be..7b416d7e0ce 100644
--- a/api/src/com/cloud/api/response/AsyncJobResponse.java
+++ b/api/src/com/cloud/api/response/AsyncJobResponse.java
@@ -20,13 +20,14 @@ package com.cloud.api.response;
import java.util.Date;
import com.cloud.api.ApiConstants;
+import com.cloud.api.IdentityProxy;
import com.cloud.api.ResponseObject;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
public class AsyncJobResponse extends BaseResponse {
@SerializedName(ApiConstants.JOB_ID) @Param(description="async job ID")
- private Long id;
+ private String id;
@SerializedName("accountid") @Param(description="the account that executed the async command")
private Long accountId;
@@ -56,16 +57,17 @@ public class AsyncJobResponse extends BaseResponse {
private String jobInstanceType;
@SerializedName("jobinstanceid") @Param(description="the unique ID of the instance/entity object related to the job")
- private Long jobInstanceId;
+ // private Long jobInstanceId;
+ IdentityProxy jobInstanceIdProxy = new IdentityProxy();
@SerializedName(ApiConstants.CREATED) @Param(description=" the created date of the job")
private Date created;
- public Long getId() {
+ public String getId() {
return id;
}
- public void setId(Long id) {
+ public void setId(String id) {
this.id = id;
}
@@ -139,14 +141,26 @@ public class AsyncJobResponse extends BaseResponse {
public void setJobInstanceType(String jobInstanceType) {
this.jobInstanceType = jobInstanceType;
+ if(jobInstanceType != null) {
+ if(jobInstanceType.equalsIgnoreCase("volume")) {
+ this.jobInstanceIdProxy.setTableName("volumes");
+ } else if(jobInstanceType.equalsIgnoreCase("template")) {
+ this.jobInstanceIdProxy.setTableName("vm_template");
+ } else if(jobInstanceType.equalsIgnoreCase("iso")) {
+ this.jobInstanceIdProxy.setTableName("vm_template");
+ } else {
+ // TODO : when we hit here, we need to add instanceType -> UUID entity table mapping
+ assert(false);
+ }
+ }
}
public Long getJobInstanceId() {
- return jobInstanceId;
+ return jobInstanceIdProxy.getValue();
}
public void setJobInstanceId(Long jobInstanceId) {
- this.jobInstanceId = jobInstanceId;
+ this.jobInstanceIdProxy.setValue(jobInstanceId);
}
public Date getCreated() {
diff --git a/api/src/com/cloud/async/AsyncJob.java b/api/src/com/cloud/async/AsyncJob.java
index 6334bfe9ba5..b6d09031311 100644
--- a/api/src/com/cloud/async/AsyncJob.java
+++ b/api/src/com/cloud/async/AsyncJob.java
@@ -19,7 +19,9 @@ package com.cloud.async;
import java.util.Date;
-public interface AsyncJob {
+import com.cloud.api.Identity;
+
+public interface AsyncJob extends Identity{
public enum Type {
None,
VirtualMachine,
diff --git a/core/src/com/cloud/async/AsyncJobVO.java b/core/src/com/cloud/async/AsyncJobVO.java
index 1d413381fbd..0e4c57d18d4 100644
--- a/core/src/com/cloud/async/AsyncJobVO.java
+++ b/core/src/com/cloud/async/AsyncJobVO.java
@@ -19,6 +19,7 @@
package com.cloud.async;
import java.util.Date;
+import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -109,7 +110,10 @@ public class AsyncJobVO implements AsyncJob {
private Date lastPolled;
@Column(name=GenericDao.REMOVED_COLUMN)
- private Date removed;
+ private Date removed;
+
+ @Column(name="uuid")
+ private String uuid;
@Transient
private SyncQueueItemVO syncSource = null;
@@ -118,6 +122,7 @@ public class AsyncJobVO implements AsyncJob {
private boolean fromPreviousSession = false;
public AsyncJobVO() {
+ this.uuid = UUID.randomUUID().toString();
}
public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo) {
@@ -125,7 +130,8 @@ public class AsyncJobVO implements AsyncJob {
this.accountId = accountId;
this.cmd = cmd;
this.cmdInfo = cmdInfo;
- callbackType = CALLBACK_POLLING;
+ this.callbackType = CALLBACK_POLLING;
+ this.uuid = UUID.randomUUID().toString();
}
public AsyncJobVO(long userId, long accountId, String cmd, String cmdInfo,
@@ -134,6 +140,7 @@ public class AsyncJobVO implements AsyncJob {
this(userId, accountId, cmd, cmdInfo);
this.callbackType = callbackType;
this.callbackAddress = callbackAddress;
+ this.uuid = UUID.randomUUID().toString();
}
@Override
@@ -352,6 +359,15 @@ public class AsyncJobVO implements AsyncJob {
this.fromPreviousSession = fromPreviousSession;
}
+ @Override
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
diff --git a/server/src/com/cloud/Identity/dao/IdentityDaoImpl.java b/server/src/com/cloud/Identity/dao/IdentityDaoImpl.java
deleted file mode 100644
index 1d49c6899d7..00000000000
--- a/server/src/com/cloud/Identity/dao/IdentityDaoImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * 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.Identity.dao;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-import javax.ejb.Local;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.api.IdentityMapper;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.Transaction;
-
-@Local(value={IdentityDao.class})
-public class IdentityDaoImpl extends GenericDaoBase implements IdentityDao {
- private static final Logger s_logger = Logger.getLogger(IdentityDaoImpl.class);
-
- public Long getIdentityId(IdentityMapper mapper, String identityString) {
- assert(mapper.entityTableName() != null);
- assert(identityString != null);
-
- PreparedStatement pstmt = null;
- Transaction txn = Transaction.currentTxn();;
-
- try {
- pstmt = txn.prepareAutoCloseStatement(
- String.format("SELECT id FROM %s WHERE id=? OR uuid=?", mapper.entityTableName()));
-
- long id = 0;
- try {
- id = Long.parseLong(identityString);
- } catch(NumberFormatException e) {
- // this could happen when it is a uuid string, so catch and ignore it
- }
-
- pstmt.setLong(1, id);
- pstmt.setString(2, identityString);
-
- ResultSet rs = pstmt.executeQuery();
- if(rs.next()) {
- return rs.getLong(1);
- }
- } catch (SQLException e) {
- s_logger.error("Unexpected exception ", e);
- }
- return null;
- }
-}
diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java
index 8c4aa2bb2fe..03e67243de2 100755
--- a/server/src/com/cloud/api/ApiDispatcher.java
+++ b/server/src/com/cloud/api/ApiDispatcher.java
@@ -30,8 +30,6 @@ import java.util.regex.Matcher;
import org.apache.log4j.Logger;
-import com.cloud.Identity.dao.IdentityDao;
-import com.cloud.Identity.dao.IdentityDaoImpl;
import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.commands.ListEventsCmd;
import com.cloud.async.AsyncCommandQueued;
@@ -42,6 +40,8 @@ import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.identity.dao.IdentityDao;
+import com.cloud.identity.dao.IdentityDaoImpl;
import com.cloud.server.ManagementServer;
import com.cloud.user.Account;
import com.cloud.user.UserContext;
diff --git a/server/src/com/cloud/api/ApiGsonHelper.java b/server/src/com/cloud/api/ApiGsonHelper.java
index 7a48f49a0aa..a52dcfcbe39 100644
--- a/server/src/com/cloud/api/ApiGsonHelper.java
+++ b/server/src/com/cloud/api/ApiGsonHelper.java
@@ -25,7 +25,8 @@ public class ApiGsonHelper {
static {
s_gBuilder = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
s_gBuilder.setVersion(1.3);
- s_gBuilder.registerTypeAdapter(ResponseObject.class, new ResponseObjectTypeAdapter());
+ s_gBuilder.registerTypeAdapter(ResponseObject.class, new ResponseObjectTypeAdapter());
+ s_gBuilder.registerTypeAdapter(IdentityProxy.class, new IdentityTypeAdapter());
}
public static GsonBuilder getBuilder() {
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java
index 6fda783396a..76cb730c7a0 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -1,2739 +1,2752 @@
-/**
- * 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;
-
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.apache.log4j.Logger;
-
-import com.cloud.acl.ControlledEntity;
-import com.cloud.api.commands.QueryAsyncJobResultCmd;
-import com.cloud.api.response.AccountResponse;
-import com.cloud.api.response.ApiResponseSerializer;
-import com.cloud.api.response.AsyncJobResponse;
-import com.cloud.api.response.CapabilityResponse;
-import com.cloud.api.response.CapacityResponse;
-import com.cloud.api.response.ClusterResponse;
-import com.cloud.api.response.ConfigurationResponse;
-import com.cloud.api.response.ControlledEntityResponse;
-import com.cloud.api.response.CreateCmdResponse;
-import com.cloud.api.response.DiskOfferingResponse;
-import com.cloud.api.response.DomainResponse;
-import com.cloud.api.response.DomainRouterResponse;
-import com.cloud.api.response.EgressRuleResponse;
-import com.cloud.api.response.EventResponse;
-import com.cloud.api.response.ExtractResponse;
-import com.cloud.api.response.FirewallResponse;
-import com.cloud.api.response.FirewallRuleResponse;
-import com.cloud.api.response.HostResponse;
-import com.cloud.api.response.HypervisorCapabilitiesResponse;
-import com.cloud.api.response.IPAddressResponse;
-import com.cloud.api.response.IngressRuleResponse;
-import com.cloud.api.response.IngressRuleResultObject;
-import com.cloud.api.response.InstanceGroupResponse;
-import com.cloud.api.response.IpForwardingRuleResponse;
-import com.cloud.api.response.ListResponse;
-import com.cloud.api.response.LoadBalancerResponse;
-import com.cloud.api.response.NetworkOfferingResponse;
-import com.cloud.api.response.NetworkResponse;
-import com.cloud.api.response.NicResponse;
-import com.cloud.api.response.PodResponse;
-import com.cloud.api.response.ProjectAccountResponse;
-import com.cloud.api.response.ProjectInvitationResponse;
-import com.cloud.api.response.ProjectResponse;
-import com.cloud.api.response.RemoteAccessVpnResponse;
-import com.cloud.api.response.ResourceCountResponse;
-import com.cloud.api.response.ResourceLimitResponse;
-import com.cloud.api.response.SecurityGroupResponse;
-import com.cloud.api.response.SecurityGroupResultObject;
-import com.cloud.api.response.ServiceOfferingResponse;
-import com.cloud.api.response.ServiceResponse;
-import com.cloud.api.response.SnapshotPolicyResponse;
-import com.cloud.api.response.SnapshotResponse;
-import com.cloud.api.response.StoragePoolResponse;
-import com.cloud.api.response.SwiftResponse;
-import com.cloud.api.response.SystemVmInstanceResponse;
-import com.cloud.api.response.SystemVmResponse;
-import com.cloud.api.response.TemplatePermissionsResponse;
-import com.cloud.api.response.TemplateResponse;
-import com.cloud.api.response.UserResponse;
-import com.cloud.api.response.UserVmResponse;
-import com.cloud.api.response.VlanIpRangeResponse;
-import com.cloud.api.response.VolumeResponse;
-import com.cloud.api.response.VpnUsersResponse;
-import com.cloud.api.response.ZoneResponse;
-import com.cloud.async.AsyncJob;
-import com.cloud.async.AsyncJobResult;
-import com.cloud.capacity.Capacity;
-import com.cloud.capacity.CapacityVO;
-import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity;
-import com.cloud.configuration.Configuration;
-import com.cloud.configuration.Resource.ResourceOwnerType;
-import com.cloud.configuration.Resource.ResourceType;
-import com.cloud.configuration.ResourceCount;
-import com.cloud.configuration.ResourceLimit;
-import com.cloud.dc.ClusterVO;
-import com.cloud.dc.DataCenter;
-import com.cloud.dc.DataCenter.NetworkType;
-import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.HostPodVO;
-import com.cloud.dc.Pod;
-import com.cloud.dc.Vlan;
-import com.cloud.dc.Vlan.VlanType;
-import com.cloud.dc.VlanVO;
-import com.cloud.domain.Domain;
-import com.cloud.event.Event;
-import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.host.Host;
-import com.cloud.host.HostStats;
-import com.cloud.host.HostVO;
-import com.cloud.hypervisor.HypervisorCapabilities;
-import com.cloud.network.IPAddressVO;
-import com.cloud.network.IpAddress;
-import com.cloud.network.Network;
-import com.cloud.network.Network.Capability;
-import com.cloud.network.Network.Service;
-import com.cloud.network.NetworkProfile;
-import com.cloud.network.Networks.TrafficType;
-import com.cloud.network.RemoteAccessVpn;
-import com.cloud.network.VpnUser;
-import com.cloud.network.router.VirtualRouter;
-import com.cloud.network.rules.FirewallRule;
-import com.cloud.network.rules.LoadBalancer;
-import com.cloud.network.rules.PortForwardingRule;
-import com.cloud.network.rules.StaticNatRule;
-import com.cloud.network.security.EgressRule;
-import com.cloud.network.security.IngressRule;
-import com.cloud.network.security.SecurityGroup;
-import com.cloud.network.security.SecurityGroupRules;
-import com.cloud.offering.DiskOffering;
-import com.cloud.offering.NetworkOffering;
-import com.cloud.offering.ServiceOffering;
-import com.cloud.org.Cluster;
-import com.cloud.projects.Project;
-import com.cloud.projects.ProjectAccount;
-import com.cloud.projects.ProjectInvitation;
-import com.cloud.server.Criteria;
-import com.cloud.storage.DiskOfferingVO;
-import com.cloud.storage.GuestOS;
-import com.cloud.storage.GuestOSCategoryVO;
-import com.cloud.storage.Snapshot;
-import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.storage.Storage.TemplateType;
-import com.cloud.storage.StoragePool;
-import com.cloud.storage.StoragePoolVO;
-import com.cloud.storage.StorageStats;
-import com.cloud.storage.Swift;
-import com.cloud.storage.UploadVO;
-import com.cloud.storage.VMTemplateHostVO;
-import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
-import com.cloud.storage.VMTemplateSwiftVO;
-import com.cloud.storage.VMTemplateVO;
-import com.cloud.storage.Volume;
-import com.cloud.storage.VolumeVO;
-import com.cloud.storage.snapshot.SnapshotPolicy;
-import com.cloud.template.VirtualMachineTemplate;
-import com.cloud.test.PodZoneConfig;
-import com.cloud.user.Account;
-import com.cloud.user.User;
-import com.cloud.user.UserAccount;
-import com.cloud.user.UserContext;
-import com.cloud.user.UserStatisticsVO;
-import com.cloud.user.UserVO;
-import com.cloud.uservm.UserVm;
-import com.cloud.utils.StringUtils;
-import com.cloud.utils.net.NetUtils;
-import com.cloud.vm.ConsoleProxyVO;
-import com.cloud.vm.InstanceGroup;
-import com.cloud.vm.NicProfile;
-import com.cloud.vm.VMInstanceVO;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachine.State;
-import com.cloud.vm.VirtualMachine.Type;
-import com.cloud.vm.VmStats;
-import com.cloud.vm.dao.UserVmData;
-import com.cloud.vm.dao.UserVmData.NicData;
-import com.cloud.vm.dao.UserVmData.SecurityGroupData;
-
-public class ApiResponseHelper implements ResponseGenerator {
-
- public final Logger s_logger = Logger.getLogger(ApiResponseHelper.class);
- private static final DecimalFormat s_percentFormat = new DecimalFormat("##.##");
-
- @Override
- public UserResponse createUserResponse(User user) {
- UserResponse userResponse = new UserResponse();
- Account account = ApiDBUtils.findAccountById(user.getAccountId());
- userResponse.setAccountName(account.getAccountName());
- userResponse.setAccountType(account.getType());
- userResponse.setCreated(user.getCreated());
- userResponse.setDomainId(account.getDomainId());
- userResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName());
- userResponse.setEmail(user.getEmail());
- userResponse.setFirstname(user.getFirstname());
- userResponse.setId(user.getId());
- userResponse.setLastname(user.getLastname());
- userResponse.setState(user.getState().toString());
- userResponse.setTimezone(user.getTimezone());
- userResponse.setUsername(user.getUsername());
- userResponse.setApiKey(user.getApiKey());
- userResponse.setSecretKey(user.getSecretKey());
- userResponse.setObjectName("user");
-
- return userResponse;
- }
-
- // this method is used for response generation via createAccount (which creates an account + user)
- @Override
- public AccountResponse createUserAccountResponse(UserAccount user) {
- return createAccountResponse(ApiDBUtils.findAccountById(user.getAccountId()));
- }
-
- @Override
- public AccountResponse createAccountResponse(Account account) {
- boolean accountIsAdmin = (account.getType() == Account.ACCOUNT_TYPE_ADMIN);
- AccountResponse accountResponse = new AccountResponse();
- accountResponse.setId(account.getId());
- accountResponse.setName(account.getAccountName());
- accountResponse.setAccountType(account.getType());
- accountResponse.setDomainId(account.getDomainId());
- accountResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName());
- accountResponse.setState(account.getState().toString());
- accountResponse.setNetworkDomain(account.getNetworkDomain());
-
- // get network stat
- List stats = ApiDBUtils.listUserStatsBy(account.getId());
- if (stats == null) {
- throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error searching for user stats");
- }
-
- Long bytesSent = 0L;
- Long bytesReceived = 0L;
- for (UserStatisticsVO stat : stats) {
- Long rx = stat.getNetBytesReceived() + stat.getCurrentBytesReceived();
- Long tx = stat.getNetBytesSent() + stat.getCurrentBytesSent();
- bytesReceived = bytesReceived + Long.valueOf(rx);
- bytesSent = bytesSent + Long.valueOf(tx);
- }
- accountResponse.setBytesReceived(bytesReceived);
- accountResponse.setBytesSent(bytesSent);
-
- // Get resource limits and counts
-
- Long vmLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.user_vm, account.getId());
- String vmLimitDisplay = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit);
- Long vmTotal = ApiDBUtils.getResourceCount(ResourceType.user_vm, account.getId());
- String vmAvail = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit - vmTotal);
- accountResponse.setVmLimit(vmLimitDisplay);
- accountResponse.setVmTotal(vmTotal);
- accountResponse.setVmAvailable(vmAvail);
-
- Long ipLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.public_ip, account.getId());
- String ipLimitDisplay = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit);
- Long ipTotal = ApiDBUtils.getResourceCount(ResourceType.public_ip, account.getId());
- String ipAvail = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit - ipTotal);
- accountResponse.setIpLimit(ipLimitDisplay);
- accountResponse.setIpTotal(ipTotal);
- accountResponse.setIpAvailable(ipAvail);
-
- Long volumeLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.volume, account.getId());
- String volumeLimitDisplay = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit);
- Long volumeTotal = ApiDBUtils.getResourceCount(ResourceType.volume, account.getId());
- String volumeAvail = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit - volumeTotal);
- accountResponse.setVolumeLimit(volumeLimitDisplay);
- accountResponse.setVolumeTotal(volumeTotal);
- accountResponse.setVolumeAvailable(volumeAvail);
-
- Long snapshotLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.snapshot, account.getId());
- String snapshotLimitDisplay = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit);
- Long snapshotTotal = ApiDBUtils.getResourceCount(ResourceType.snapshot, account.getId());
- String snapshotAvail = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit - snapshotTotal);
- accountResponse.setSnapshotLimit(snapshotLimitDisplay);
- accountResponse.setSnapshotTotal(snapshotTotal);
- accountResponse.setSnapshotAvailable(snapshotAvail);
-
- Long templateLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.template, account.getId());
- String templateLimitDisplay = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit);
- Long templateTotal = ApiDBUtils.getResourceCount(ResourceType.template, account.getId());
- String templateAvail = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit - templateTotal);
- accountResponse.setTemplateLimit(templateLimitDisplay);
- accountResponse.setTemplateTotal(templateTotal);
- accountResponse.setTemplateAvailable(templateAvail);
-
- // Get stopped and running VMs
- int vmStopped = 0;
- int vmRunning = 0;
-
- Long[] accountIds = new Long[1];
- accountIds[0] = account.getId();
-
- Criteria c1 = new Criteria();
- c1.addCriteria(Criteria.ACCOUNTID, accountIds);
- List extends UserVm> virtualMachines = ApiDBUtils.searchForUserVMs(c1);
-
- // get Running/Stopped VMs
- for (Iterator extends UserVm> iter = virtualMachines.iterator(); iter.hasNext();) {
- // count how many stopped/running vms we have
- UserVm vm = iter.next();
-
- if (vm.getState() == State.Stopped) {
- vmStopped++;
- } else if (vm.getState() == State.Running) {
- vmRunning++;
- }
- }
-
- accountResponse.setVmStopped(vmStopped);
- accountResponse.setVmRunning(vmRunning);
- accountResponse.setObjectName("account");
-
- // adding all the users for an account as part of the response obj
- List usersForAccount = ApiDBUtils.listUsersByAccount(account.getAccountId());
- List userResponseList = new ArrayList();
- for (UserVO user : usersForAccount) {
- UserResponse userResponse = createUserResponse(user);
- userResponseList.add(userResponse);
- }
-
- accountResponse.setUsers(userResponseList);
- return accountResponse;
- }
-
-
- @Override
- public UserResponse createUserResponse(UserAccount user) {
- UserResponse userResponse = new UserResponse();
- userResponse.setAccountName(user.getAccountName());
- userResponse.setAccountType(user.getType());
- userResponse.setCreated(user.getCreated());
- userResponse.setDomainId(user.getDomainId());
- userResponse.setDomainName(ApiDBUtils.findDomainById(user.getDomainId()).getName());
- userResponse.setEmail(user.getEmail());
- userResponse.setFirstname(user.getFirstname());
- userResponse.setId(user.getId());
- userResponse.setLastname(user.getLastname());
- userResponse.setState(user.getState());
- userResponse.setTimezone(user.getTimezone());
- userResponse.setUsername(user.getUsername());
- userResponse.setApiKey(user.getApiKey());
- userResponse.setSecretKey(user.getSecretKey());
- userResponse.setObjectName("user");
-
- return userResponse;
- }
-
- @Override
- public DomainResponse createDomainResponse(Domain domain) {
- DomainResponse domainResponse = new DomainResponse();
- domainResponse.setDomainName(domain.getName());
- domainResponse.setId(domain.getId());
- domainResponse.setLevel(domain.getLevel());
- domainResponse.setNetworkDomain(domain.getNetworkDomain());
- domainResponse.setParentDomainId(domain.getParent());
- if (domain.getParent() != null) {
- domainResponse.setParentDomainName(ApiDBUtils.findDomainById(domain.getParent()).getName());
- }
- if (domain.getChildCount() > 0) {
- domainResponse.setHasChild(true);
- }
- domainResponse.setObjectName("domain");
- return domainResponse;
- }
-
- @Override
- public DiskOfferingResponse createDiskOfferingResponse(DiskOffering offering) {
- DiskOfferingResponse diskOfferingResponse = new DiskOfferingResponse();
- diskOfferingResponse.setId(offering.getId());
- diskOfferingResponse.setName(offering.getName());
- diskOfferingResponse.setDisplayText(offering.getDisplayText());
- diskOfferingResponse.setCreated(offering.getCreated());
- diskOfferingResponse.setDiskSize(offering.getDiskSize() / (1024 * 1024 * 1024));
- if (offering.getDomainId() != null) {
- diskOfferingResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName());
- diskOfferingResponse.setDomainId(offering.getDomainId());
- }
- diskOfferingResponse.setTags(offering.getTags());
- diskOfferingResponse.setCustomized(offering.isCustomized());
- diskOfferingResponse.setObjectName("diskoffering");
- return diskOfferingResponse;
- }
-
- @Override
- public ResourceLimitResponse createResourceLimitResponse(ResourceLimit limit) {
- ResourceLimitResponse resourceLimitResponse = new ResourceLimitResponse();
- if (limit.getResourceOwnerType() == ResourceOwnerType.Domain) {
- populateDomain(resourceLimitResponse, limit.getOwnerId());
- } else if (limit.getResourceOwnerType() == ResourceOwnerType.Account) {
- Account accountTemp = ApiDBUtils.findAccountById(limit.getOwnerId());
- populateAccount(resourceLimitResponse, limit.getOwnerId());
- populateDomain(resourceLimitResponse, accountTemp.getDomainId());
- }
- resourceLimitResponse.setResourceType(Integer.valueOf(limit.getType().getOrdinal()).toString());
- resourceLimitResponse.setMax(limit.getMax());
- resourceLimitResponse.setObjectName("resourcelimit");
-
- return resourceLimitResponse;
- }
-
- @Override
- public ResourceCountResponse createResourceCountResponse(ResourceCount resourceCount) {
- ResourceCountResponse resourceCountResponse = new ResourceCountResponse();
-
- if (resourceCount.getResourceOwnerType() == ResourceOwnerType.Account) {
- Account accountTemp = ApiDBUtils.findAccountById(resourceCount.getOwnerId());
- if (accountTemp != null) {
- populateAccount(resourceCountResponse, accountTemp.getId());
- populateDomain(resourceCountResponse, accountTemp.getDomainId());
- }
- } else if (resourceCount.getResourceOwnerType() == ResourceOwnerType.Domain) {
- populateDomain(resourceCountResponse, resourceCount.getOwnerId());
- }
-
- resourceCountResponse.setResourceType(Integer.valueOf(resourceCount.getType().getOrdinal()).toString());
- resourceCountResponse.setResourceCount(resourceCount.getCount());
- resourceCountResponse.setObjectName("resourcecount");
- return resourceCountResponse;
- }
-
- @Override
- public ServiceOfferingResponse createServiceOfferingResponse(ServiceOffering offering) {
- ServiceOfferingResponse offeringResponse = new ServiceOfferingResponse();
- offeringResponse.setId(offering.getId());
- offeringResponse.setName(offering.getName());
- offeringResponse.setIsSystemOffering(offering.getSystemUse());
- offeringResponse.setDefaultUse(offering.getDefaultUse());
- offeringResponse.setSystemVmType(offering.getSystemVmType());
- offeringResponse.setDisplayText(offering.getDisplayText());
- offeringResponse.setCpuNumber(offering.getCpu());
- offeringResponse.setCpuSpeed(offering.getSpeed());
- offeringResponse.setMemory(offering.getRamSize());
- offeringResponse.setCreated(offering.getCreated());
- offeringResponse.setStorageType(offering.getUseLocalStorage() ? ServiceOffering.StorageType.local.toString() : ServiceOffering.StorageType.shared.toString());
- offeringResponse.setOfferHa(offering.getOfferHA());
- offeringResponse.setLimitCpuUse(offering.getLimitCpuUse());
- offeringResponse.setTags(offering.getTags());
- if (offering.getDomainId() != null) {
- offeringResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName());
- offeringResponse.setDomainId(offering.getDomainId());
- }
- offeringResponse.setNetworkRate(offering.getRateMbps());
- offeringResponse.setHostTag(offering.getHostTag());
- offeringResponse.setObjectName("serviceoffering");
-
- return offeringResponse;
- }
-
- @Override
- public ConfigurationResponse createConfigurationResponse(Configuration cfg) {
- ConfigurationResponse cfgResponse = new ConfigurationResponse();
- cfgResponse.setCategory(cfg.getCategory());
- cfgResponse.setDescription(cfg.getDescription());
- cfgResponse.setName(cfg.getName());
- cfgResponse.setValue(cfg.getValue());
- cfgResponse.setObjectName("configuration");
-
- return cfgResponse;
- }
-
- @Override
- public SnapshotResponse createSnapshotResponse(Snapshot snapshot) {
- SnapshotResponse snapshotResponse = new SnapshotResponse();
- snapshotResponse.setId(snapshot.getId());
-
- populateOwner(snapshotResponse, snapshot);
-
- VolumeVO volume = findVolumeById(snapshot.getVolumeId());
- String snapshotTypeStr = snapshot.getType().name();
- snapshotResponse.setSnapshotType(snapshotTypeStr);
- snapshotResponse.setVolumeId(snapshot.getVolumeId());
- if (volume != null) {
- snapshotResponse.setVolumeName(volume.getName());
- snapshotResponse.setVolumeType(volume.getVolumeType().name());
- }
- snapshotResponse.setCreated(snapshot.getCreated());
- snapshotResponse.setName(snapshot.getName());
- snapshotResponse.setIntervalType(ApiDBUtils.getSnapshotIntervalTypes(snapshot.getId()));
- snapshotResponse.setState(snapshot.getStatus());
- snapshotResponse.setObjectName("snapshot");
- return snapshotResponse;
- }
-
- @Override
- public SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy) {
- SnapshotPolicyResponse policyResponse = new SnapshotPolicyResponse();
- policyResponse.setId(policy.getId());
- policyResponse.setVolumeId(policy.getVolumeId());
- policyResponse.setSchedule(policy.getSchedule());
- policyResponse.setIntervalType(policy.getInterval());
- policyResponse.setMaxSnaps(policy.getMaxSnaps());
- policyResponse.setTimezone(policy.getTimezone());
- policyResponse.setObjectName("snapshotpolicy");
-
- return policyResponse;
- }
-
- @Override
- public HostResponse createHostResponse(Host host) {
- HostResponse hostResponse = new HostResponse();
- hostResponse.setId(host.getId());
- hostResponse.setCapabilities(host.getCapabilities());
- hostResponse.setClusterId(host.getClusterId());
- hostResponse.setCpuNumber(host.getCpus());
- hostResponse.setZoneId(host.getDataCenterId());
- hostResponse.setDisconnectedOn(host.getDisconnectedOn());
- hostResponse.setHypervisor(host.getHypervisorType());
- hostResponse.setHostType(host.getType());
- hostResponse.setLastPinged(new Date(host.getLastPinged()));
- hostResponse.setManagementServerId(host.getManagementServerId());
- hostResponse.setName(host.getName());
- hostResponse.setPodId(host.getPodId());
- hostResponse.setRemoved(host.getRemoved());
- hostResponse.setCpuSpeed(host.getSpeed());
- hostResponse.setState(host.getStatus());
- hostResponse.setIpAddress(host.getPrivateIpAddress());
- hostResponse.setVersion(host.getVersion());
- hostResponse.setCreated(host.getCreated());
-
- GuestOSCategoryVO guestOSCategory = ApiDBUtils.getHostGuestOSCategory(host.getId());
- if (guestOSCategory != null) {
- hostResponse.setOsCategoryId(guestOSCategory.getId());
- hostResponse.setOsCategoryName(guestOSCategory.getName());
- }
- hostResponse.setZoneName(ApiDBUtils.findZoneById(host.getDataCenterId()).getName());
-
- if (host.getPodId() != null) {
- HostPodVO pod = ApiDBUtils.findPodById(host.getPodId());
- if (pod != null) {
- hostResponse.setPodName(pod.getName());
- }
- }
-
- DecimalFormat decimalFormat = new DecimalFormat("#.##");
- if (host.getType() == Host.Type.Routing) {
- //set allocated capacities
- Long mem = ApiDBUtils.getMemoryOrCpuCapacitybyHost(host.getId(),Capacity.CAPACITY_TYPE_MEMORY);
- Long cpu = ApiDBUtils.getMemoryOrCpuCapacitybyHost(host.getId(),Capacity.CAPACITY_TYPE_CPU);
-
- hostResponse.setMemoryAllocated(mem);
- hostResponse.setMemoryTotal(host.getTotalMemory());
- hostResponse.setHostTags(ApiDBUtils.getHostTags(host.getId()));
- hostResponse.setHypervisorVersion(host.getHypervisorVersion());
-
- String cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%";
- hostResponse.setCpuAllocated(cpuAlloc);
- String cpuWithOverprovisioning = new Float(host.getCpus() * host.getSpeed() * ApiDBUtils.getCpuOverprovisioningFactor()).toString();
- hostResponse.setCpuWithOverprovisioning(cpuWithOverprovisioning);
-
- // set CPU/RAM/Network stats
- String cpuUsed = null;
- HostStats hostStats = ApiDBUtils.getHostStatistics(host.getId());
- if (hostStats != null) {
- float cpuUtil = (float) hostStats.getCpuUtilization();
- cpuUsed = decimalFormat.format(cpuUtil) + "%";
- hostResponse.setCpuUsed(cpuUsed);
- hostResponse.setMemoryUsed( (new Double(hostStats.getUsedMemory())).longValue());
- hostResponse.setNetworkKbsRead((new Double(hostStats.getNetworkReadKBs())).longValue());
- hostResponse.setNetworkKbsWrite((new Double(hostStats.getNetworkWriteKBs())).longValue());
-
- }
-
- }else if (host.getType() == Host.Type.SecondaryStorage){
- StorageStats secStorageStats = ApiDBUtils.getSecondaryStorageStatistics(host.getId());
- if (secStorageStats != null){
- hostResponse.setDiskSizeTotal(secStorageStats.getCapacityBytes());
- hostResponse.setDiskSizeAllocated(secStorageStats.getByteUsed());
- }
- }
-
- if (host.getClusterId() != null) {
- ClusterVO cluster = ApiDBUtils.findClusterById(host.getClusterId());
- hostResponse.setClusterName(cluster.getName());
- hostResponse.setClusterType(cluster.getClusterType().toString());
- }
-
- hostResponse.setLocalStorageActive(ApiDBUtils.isLocalStorageActiveOnHost(host));
-
- Set possibleEvents = host.getStatus().getPossibleEvents();
- if ((possibleEvents != null) && !possibleEvents.isEmpty()) {
- String events = "";
- Iterator iter = possibleEvents.iterator();
- while (iter.hasNext()) {
- com.cloud.host.Status.Event event = iter.next();
- events += event.toString();
- if (iter.hasNext()) {
- events += "; ";
- }
- }
- hostResponse.setEvents(events);
- }
-
- hostResponse.setAllocationState(host.getResourceState().toString());
-
- hostResponse.setObjectName("host");
-
- return hostResponse;
- }
-
- @Override
- public SwiftResponse createSwiftResponse(Swift swift) {
- SwiftResponse swiftResponse = new SwiftResponse();
- swiftResponse.setId(swift.getId());
- swiftResponse.setUrl(swift.getUrl());
- swiftResponse.setObjectName("Swift");
- return swiftResponse;
- }
-
- @Override
- public VlanIpRangeResponse createVlanIpRangeResponse(Vlan vlan) {
- Long podId = ApiDBUtils.getPodIdForVlan(vlan.getId());
-
- VlanIpRangeResponse vlanResponse = new VlanIpRangeResponse();
- vlanResponse.setId(vlan.getId());
- vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork));
- vlanResponse.setVlan(vlan.getVlanTag());
- vlanResponse.setZoneId(vlan.getDataCenterId());
-
- if (podId != null) {
- HostPodVO pod = ApiDBUtils.findPodById(podId);
- vlanResponse.setPodId(podId);
- if (pod != null) {
- vlanResponse.setPodName(pod.getName());
- }
- }
-
- vlanResponse.setGateway(vlan.getVlanGateway());
- vlanResponse.setNetmask(vlan.getVlanNetmask());
-
- // get start ip and end ip of corresponding vlan
- String ipRange = vlan.getIpRange();
- String[] range = ipRange.split("-");
- vlanResponse.setStartIp(range[0]);
- vlanResponse.setEndIp(range[1]);
-
- vlanResponse.setNetworkId(vlan.getNetworkId());
- Account owner = ApiDBUtils.getVlanAccount(vlan.getId());
- if (owner != null) {
- populateAccount(vlanResponse, owner.getId());
- populateDomain(vlanResponse, owner.getDomainId());
- }
-
- vlanResponse.setObjectName("vlan");
- return vlanResponse;
- }
-
- @Override
- public IPAddressResponse createIPAddressResponse(IpAddress ipAddress) {
- VlanVO vlan = ApiDBUtils.findVlanById(ipAddress.getVlanId());
- boolean forVirtualNetworks = vlan.getVlanType().equals(VlanType.VirtualNetwork);
- long zoneId = ipAddress.getDataCenterId();
-
- IPAddressResponse ipResponse = new IPAddressResponse();
- ipResponse.setId(ipAddress.getId());
- ipResponse.setIpAddress(ipAddress.getAddress().toString());
- if (ipAddress.getAllocatedTime() != null) {
- ipResponse.setAllocated(ipAddress.getAllocatedTime());
- }
- ipResponse.setZoneId(zoneId);
- ipResponse.setZoneName(ApiDBUtils.findZoneById(ipAddress.getDataCenterId()).getName());
- ipResponse.setSourceNat(ipAddress.isSourceNat());
-
- // get account information
- populateOwner(ipResponse, ipAddress);
-
- ipResponse.setForVirtualNetwork(forVirtualNetworks);
- ipResponse.setStaticNat(ipAddress.isOneToOneNat());
-
- if (ipAddress.getAssociatedWithVmId() != null) {
- UserVm vm = ApiDBUtils.findUserVmById(ipAddress.getAssociatedWithVmId());
- ipResponse.setVirtualMachineId(vm.getId());
- ipResponse.setVirtualMachineName(vm.getHostName());
- ipResponse.setVirtualMachineDisplayName(vm.getDisplayName());
- }
-
- ipResponse.setAssociatedNetworkId(ipAddress.getAssociatedWithNetworkId());
-
- // Network id the ip is associated withif associated networkId is null, try to get this information from vlan
- Long associatedNetworkId = ipAddress.getAssociatedWithNetworkId();
- Long vlanNetworkId = ApiDBUtils.getVlanNetworkId(ipAddress.getVlanId());
- if (associatedNetworkId == null) {
- associatedNetworkId = vlanNetworkId;
- }
-
- ipResponse.setAssociatedNetworkId(associatedNetworkId);
-
- // Network id the ip belongs to
- Long networkId;
- if (vlanNetworkId != null) {
- networkId = vlanNetworkId;
- } else {
- networkId = ApiDBUtils.getPublicNetworkIdByZone(zoneId);
- }
-
- ipResponse.setNetworkId(networkId);
- ipResponse.setState(ipAddress.getState().toString());
-
- // show this info to admin only
- Account account = UserContext.current().getCaller();
- if ((account == null) || account.getType() == Account.ACCOUNT_TYPE_ADMIN) {
- ipResponse.setVlanId(ipAddress.getVlanId());
- ipResponse.setVlanName(ApiDBUtils.findVlanById(ipAddress.getVlanId()).getVlanTag());
- }
- ipResponse.setObjectName("ipaddress");
- return ipResponse;
- }
-
- @Override
- public LoadBalancerResponse createLoadBalancerResponse(LoadBalancer loadBalancer) {
- LoadBalancerResponse lbResponse = new LoadBalancerResponse();
- lbResponse.setId(loadBalancer.getId());
- lbResponse.setName(loadBalancer.getName());
- lbResponse.setDescription(loadBalancer.getDescription());
- List cidrs = ApiDBUtils.findFirewallSourceCidrs(loadBalancer.getId());
- lbResponse.setCidrList(StringUtils.join(cidrs, ","));
-
- IPAddressVO publicIp = ApiDBUtils.findIpAddressById(loadBalancer.getSourceIpAddressId());
- lbResponse.setPublicIpId(publicIp.getId());
- lbResponse.setPublicIp(publicIp.getAddress().addr());
- lbResponse.setPublicPort(Integer.toString(loadBalancer.getSourcePortStart()));
- lbResponse.setPrivatePort(Integer.toString(loadBalancer.getDefaultPortStart()));
- lbResponse.setAlgorithm(loadBalancer.getAlgorithm());
- FirewallRule.State state = loadBalancer.getState();
- String stateToSet = state.toString();
- if (state.equals(FirewallRule.State.Revoke)) {
- stateToSet = "Deleting";
- }
- lbResponse.setState(stateToSet);
- populateOwner(lbResponse, loadBalancer);
- lbResponse.setZoneId(publicIp.getDataCenterId());
-
- lbResponse.setObjectName("loadbalancer");
- return lbResponse;
- }
-
- @Override
- public PodResponse createPodResponse(Pod pod, Boolean showCapacities) {
- String[] ipRange = new String[2];
- if (pod.getDescription() != null && pod.getDescription().length() > 0) {
- ipRange = pod.getDescription().split("-");
- } else {
- ipRange[0] = pod.getDescription();
- }
-
- PodResponse podResponse = new PodResponse();
- podResponse.setId(pod.getId());
- podResponse.setName(pod.getName());
- podResponse.setZoneId(pod.getDataCenterId());
- podResponse.setZoneName(PodZoneConfig.getZoneName(pod.getDataCenterId()));
- podResponse.setNetmask(NetUtils.getCidrNetmask(pod.getCidrSize()));
- podResponse.setStartIp(ipRange[0]);
- podResponse.setEndIp(((ipRange.length > 1) && (ipRange[1] != null)) ? ipRange[1] : "");
- podResponse.setGateway(pod.getGateway());
- podResponse.setAllocationState(pod.getAllocationState().toString());
- if (showCapacities != null && showCapacities){
- List capacities = ApiDBUtils.getCapacityByClusterPodZone(null,pod.getId(),null);
- Set capacityResponses = new HashSet();
- float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
-
- for (SummedCapacity capacity : capacities){
- CapacityResponse capacityResponse = new CapacityResponse();
- capacityResponse.setCapacityType(capacity.getCapacityType());
- capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
- if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU){
- capacityResponse.setCapacityTotal(new Long((long)(capacity.getTotalCapacity()*cpuOverprovisioningFactor)));
- }else if(capacity.getCapacityType() == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED){
- List c = ApiDBUtils.findNonSharedStorageForClusterPodZone(null, pod.getId() ,null);
- capacityResponse.setCapacityTotal(capacity.getTotalCapacity() - c.get(0).getTotalCapacity());
- capacityResponse.setCapacityUsed(capacity.getUsedCapacity() - c.get(0).getUsedCapacity());
- }else{
- capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
- }
- if (capacityResponse.getCapacityTotal() != 0) {
- capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
- } else {
- capacityResponse.setPercentUsed(s_percentFormat.format(0L));
- }
- capacityResponses.add(capacityResponse);
- }
- // Do it for stats as well.
- capacityResponses.addAll(getStatsCapacityresponse(null, null, pod.getId(), pod.getDataCenterId()));
- podResponse.setCapacitites(new ArrayList(capacityResponses));
- }
- podResponse.setObjectName("pod");
- return podResponse;
- }
-
- @Override
- public ZoneResponse createZoneResponse(DataCenter dataCenter, Boolean showCapacities) {
- Account account = UserContext.current().getCaller();
- ZoneResponse zoneResponse = new ZoneResponse();
- zoneResponse.setId(dataCenter.getId());
- zoneResponse.setName(dataCenter.getName());
- zoneResponse.setSecurityGroupsEnabled(ApiDBUtils.isSecurityGroupEnabledInZone(dataCenter.getId()));
-
- 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());
- }
-
- if (showCapacities != null && showCapacities){
- List capacities = ApiDBUtils.getCapacityByClusterPodZone(dataCenter.getId(),null,null);
- Set capacityResponses = new HashSet();
- float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
-
- for (SummedCapacity capacity : capacities){
- CapacityResponse capacityResponse = new CapacityResponse();
- capacityResponse.setCapacityType(capacity.getCapacityType());
- capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
- if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU){
- capacityResponse.setCapacityTotal(new Long((long)(capacity.getTotalCapacity()*cpuOverprovisioningFactor)));
- }else if(capacity.getCapacityType() == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED){
- List c = ApiDBUtils.findNonSharedStorageForClusterPodZone(dataCenter.getId(), null ,null);
- capacityResponse.setCapacityTotal(capacity.getTotalCapacity() - c.get(0).getTotalCapacity());
- capacityResponse.setCapacityUsed(capacity.getUsedCapacity() - c.get(0).getUsedCapacity());
- }else{
- capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
- }
- if (capacityResponse.getCapacityTotal() != 0) {
- capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
- } else {
- capacityResponse.setPercentUsed(s_percentFormat.format(0L));
- }
- capacityResponses.add(capacityResponse);
- }
- // Do it for stats as well.
- capacityResponses.addAll(getStatsCapacityresponse(null, null, null, dataCenter.getId()));
-
- zoneResponse.setCapacitites(new ArrayList(capacityResponses));
- }
-
- zoneResponse.setDomain(dataCenter.getDomain());
- zoneResponse.setDomainId(dataCenter.getDomainId());
- zoneResponse.setType(dataCenter.getNetworkType().toString());
- zoneResponse.setAllocationState(dataCenter.getAllocationState().toString());
- zoneResponse.setZoneToken(dataCenter.getZoneToken());
- zoneResponse.setDhcpProvider(dataCenter.getDhcpProvider());
- zoneResponse.setObjectName("zone");
- return zoneResponse;
- }
-
- private List getStatsCapacityresponse(Long poolId, Long clusterId, Long podId, Long zoneId){
- List capacities = new ArrayList();
- capacities.add(ApiDBUtils.getStoragePoolUsedStats(poolId, clusterId, podId, zoneId));
- if(clusterId == null && podId == null){
- capacities.add(ApiDBUtils.getSecondaryStorageUsedStats(poolId, zoneId));
- }
-
- List capacityResponses = new ArrayList();
- for (CapacityVO capacity : capacities){
- CapacityResponse capacityResponse = new CapacityResponse();
- capacityResponse.setCapacityType(capacity.getCapacityType());
- capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
- capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
- if (capacityResponse.getCapacityTotal() != 0) {
- capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
- } else {
- capacityResponse.setPercentUsed(s_percentFormat.format(0L));
- }
- capacityResponses.add(capacityResponse);
- }
-
- return capacityResponses;
- }
-
- @Override
- public VolumeResponse createVolumeResponse(Volume volume) {
- VolumeResponse volResponse = new VolumeResponse();
- volResponse.setId(volume.getId());
-
- if (volume.getName() != null) {
- volResponse.setName(volume.getName());
- } else {
- volResponse.setName("");
- }
-
- volResponse.setZoneId(volume.getDataCenterId());
- volResponse.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName());
-
- volResponse.setVolumeType(volume.getVolumeType().toString());
- volResponse.setDeviceId(volume.getDeviceId());
-
- Long instanceId = volume.getInstanceId();
- if (instanceId != null && volume.getState() != Volume.State.Destroy) {
- VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId);
- if(vm != null){
- volResponse.setVirtualMachineId(vm.getId());
- volResponse.setVirtualMachineName(vm.getHostName());
- UserVm userVm = ApiDBUtils.findUserVmById(vm.getId());
- if (userVm != null) {
- volResponse.setVirtualMachineDisplayName(userVm.getDisplayName());
- volResponse.setVirtualMachineState(vm.getState().toString());
- } else {
- s_logger.error("User Vm with Id: "+instanceId+" does not exist for volume "+volume.getId());
- }
- } else {
- s_logger.error("Vm with Id: "+instanceId+" does not exist for volume "+volume.getId());
- }
- }
-
- // Show the virtual size of the volume
- volResponse.setSize(volume.getSize());
-
- volResponse.setCreated(volume.getCreated());
- volResponse.setState(volume.getState().toString());
-
- populateOwner(volResponse, volume);
-
- String storageType;
- try {
- if (volume.getPoolId() == null) {
- if (volume.getState() == Volume.State.Allocated) {
- /* set it as shared, so the UI can attach it to VM */
- storageType = "shared";
- } else {
- storageType = "unknown";
- }
- } else {
- storageType = ApiDBUtils.volumeIsOnSharedStorage(volume.getId()) ? ServiceOffering.StorageType.shared.toString() : ServiceOffering.StorageType.local.toString();
- }
- } 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);
- if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
- volResponse.setServiceOfferingId(volume.getDiskOfferingId());
- } else {
- volResponse.setDiskOfferingId(volume.getDiskOfferingId());
- }
-
- DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId());
- if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
- volResponse.setServiceOfferingName(diskOffering.getName());
- volResponse.setServiceOfferingDisplayText(diskOffering.getDisplayText());
- } else {
- volResponse.setDiskOfferingName(diskOffering.getName());
- volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText());
- }
-
- Long poolId = volume.getPoolId();
- String poolName = (poolId == null) ? "none" : ApiDBUtils.findStoragePoolById(poolId).getName();
- volResponse.setStoragePoolName(poolName);
- // volResponse.setSourceId(volume.getSourceId());
- // if (volume.getSourceType() != null) {
- // volResponse.setSourceType(volume.getSourceType().toString());
- // }
- volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
- volResponse.setAttached(volume.getAttached());
- volResponse.setDestroyed(volume.getState() == Volume.State.Destroy);
- VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId());
- boolean isExtractable = template != null && template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM);
- volResponse.setExtractable(isExtractable);
- volResponse.setObjectName("volume");
- return volResponse;
- }
-
- @Override
- public InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group) {
- InstanceGroupResponse groupResponse = new InstanceGroupResponse();
- groupResponse.setId(group.getId());
- groupResponse.setName(group.getName());
- groupResponse.setCreated(group.getCreated());
-
- populateOwner(groupResponse, group);
-
- groupResponse.setObjectName("instancegroup");
- return groupResponse;
- }
-
- @Override
- public StoragePoolResponse createStoragePoolResponse(StoragePool pool) {
- StoragePoolResponse poolResponse = new StoragePoolResponse();
- poolResponse.setId(pool.getId());
- poolResponse.setName(pool.getName());
- poolResponse.setState(pool.getStatus());
- poolResponse.setPath(pool.getPath());
- poolResponse.setIpAddress(pool.getHostAddress());
- poolResponse.setZoneId(pool.getDataCenterId());
- poolResponse.setZoneName(ApiDBUtils.findZoneById(pool.getDataCenterId()).getName());
- if (pool.getPoolType() != null) {
- poolResponse.setType(pool.getPoolType().toString());
- }
- if (pool.getPodId() != null) {
- poolResponse.setPodId(pool.getPodId());
- HostPodVO pod = ApiDBUtils.findPodById(pool.getPodId());
- if (pod != null) {
- poolResponse.setPodName(pod.getName());
- }
- }
- if (pool.getCreated() != null) {
- poolResponse.setCreated(pool.getCreated());
- }
-
- StorageStats stats = ApiDBUtils.getStoragePoolStatistics(pool.getId());
- long allocatedSize = ApiDBUtils.getStorageCapacitybyPool(pool.getId(),Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED);
- poolResponse.setDiskSizeTotal(pool.getCapacityBytes());
- poolResponse.setDiskSizeAllocated(allocatedSize);
-
- if (stats != null) {
- Long used = stats.getByteUsed();
- poolResponse.setDiskSizeUsed(used);
- }
-
- if (pool.getClusterId() != null) {
- ClusterVO cluster = ApiDBUtils.findClusterById(pool.getClusterId());
- poolResponse.setClusterId(cluster.getId());
- poolResponse.setClusterName(cluster.getName());
- }
- poolResponse.setTags(ApiDBUtils.getStoragePoolTags(pool.getId()));
- poolResponse.setObjectName("storagepool");
- return poolResponse;
- }
-
- @Override
- public ClusterResponse createClusterResponse(Cluster cluster, Boolean showCapacities) {
- ClusterResponse clusterResponse = new ClusterResponse();
- clusterResponse.setId(cluster.getId());
- clusterResponse.setName(cluster.getName());
- clusterResponse.setPodId(cluster.getPodId());
- clusterResponse.setZoneId(cluster.getDataCenterId());
- clusterResponse.setHypervisorType(cluster.getHypervisorType().toString());
- clusterResponse.setClusterType(cluster.getClusterType().toString());
- clusterResponse.setAllocationState(cluster.getAllocationState().toString());
- clusterResponse.setManagedState(cluster.getManagedState().toString());
- HostPodVO pod = ApiDBUtils.findPodById(cluster.getPodId());
- if (pod != null) {
- clusterResponse.setPodName(pod.getName());
- }
- DataCenterVO zone = ApiDBUtils.findZoneById(cluster.getDataCenterId());
- clusterResponse.setZoneName(zone.getName());
- if (showCapacities != null && showCapacities){
- List capacities = ApiDBUtils.getCapacityByClusterPodZone(null,null,cluster.getId());
- Set capacityResponses = new HashSet();
- float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
-
- for (SummedCapacity capacity : capacities){
- CapacityResponse capacityResponse = new CapacityResponse();
- capacityResponse.setCapacityType(capacity.getCapacityType());
- capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
-
- if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU){
- capacityResponse.setCapacityTotal(new Long((long)(capacity.getTotalCapacity()*cpuOverprovisioningFactor)));
- }else if(capacity.getCapacityType() == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED){
- List c = ApiDBUtils.findNonSharedStorageForClusterPodZone(null, null, cluster.getId());
- capacityResponse.setCapacityTotal(capacity.getTotalCapacity() - c.get(0).getTotalCapacity());
- capacityResponse.setCapacityUsed(capacity.getUsedCapacity() - c.get(0).getUsedCapacity());
- }else{
- capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
- }
- if (capacityResponse.getCapacityTotal() != 0) {
- capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
- } else {
- capacityResponse.setPercentUsed(s_percentFormat.format(0L));
- }
- capacityResponses.add(capacityResponse);
- }
- // Do it for stats as well.
- capacityResponses.addAll(getStatsCapacityresponse(null, cluster.getId(), pod.getId(), pod.getDataCenterId()));
- clusterResponse.setCapacitites(new ArrayList(capacityResponses));
- }
- clusterResponse.setObjectName("cluster");
- return clusterResponse;
- }
-
- @Override
- public FirewallRuleResponse createPortForwardingRuleResponse(PortForwardingRule fwRule) {
- FirewallRuleResponse response = new FirewallRuleResponse();
- response.setId(fwRule.getId());
- response.setPrivateStartPort(Integer.toString(fwRule.getDestinationPortStart()));
- response.setPrivateEndPort(Integer.toString(fwRule.getDestinationPortEnd()));
- response.setProtocol(fwRule.getProtocol());
- response.setPublicStartPort(Integer.toString(fwRule.getSourcePortStart()));
- response.setPublicEndPort(Integer.toString(fwRule.getSourcePortEnd()));
- List cidrs = ApiDBUtils.findFirewallSourceCidrs(fwRule.getId());
- response.setCidrList(StringUtils.join(cidrs, ","));
-
- IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId());
- response.setPublicIpAddressId(ip.getId());
- response.setPublicIpAddress(ip.getAddress().addr());
-
- if (ip != null && fwRule.getDestinationIpAddress() != null) {
- UserVm vm = ApiDBUtils.findUserVmById(fwRule.getVirtualMachineId());
- if (vm != null) {
- response.setVirtualMachineId(vm.getId());
- response.setVirtualMachineName(vm.getHostName());
- response.setVirtualMachineDisplayName(vm.getDisplayName());
- }
- }
- FirewallRule.State state = fwRule.getState();
- String stateToSet = state.toString();
- if (state.equals(FirewallRule.State.Revoke)) {
- stateToSet = "Deleting";
- }
- response.setState(stateToSet);
- response.setObjectName("portforwardingrule");
- return response;
- }
-
- @Override
- public IpForwardingRuleResponse createIpForwardingRuleResponse(StaticNatRule fwRule) {
- IpForwardingRuleResponse response = new IpForwardingRuleResponse();
- response.setId(fwRule.getId());
- response.setProtocol(fwRule.getProtocol());
-
- IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId());
- response.setPublicIpAddressId(ip.getId());
- response.setPublicIpAddress(ip.getAddress().addr());
-
- if (ip != null && fwRule.getDestIpAddress() != null) {
- UserVm vm = ApiDBUtils.findUserVmById(ip.getAssociatedWithVmId());
- if (vm != null) {// vm might be destroyed
- response.setVirtualMachineId(vm.getId());
- response.setVirtualMachineName(vm.getHostName());
- response.setVirtualMachineDisplayName(vm.getDisplayName());
- }
- }
- FirewallRule.State state = fwRule.getState();
- String stateToSet = state.toString();
- if (state.equals(FirewallRule.State.Revoke)) {
- stateToSet = "Deleting";
- }
-
- response.setStartPort(fwRule.getSourcePortStart());
- response.setEndPort(fwRule.getSourcePortEnd());
- response.setProtocol(fwRule.getProtocol());
- response.setState(stateToSet);
- response.setObjectName("ipforwardingrule");
- return response;
- }
-
-
- @Override
- public List createUserVmResponse(String objectName, UserVm... userVms) {
- return createUserVmResponse(objectName, 0, userVms);
- }
-
- @Override
- public List createUserVmResponse(String objectName, int details, UserVm... userVms) {
- Account caller = UserContext.current().getCaller();
- boolean caller_is_admin = ((caller == null) || (caller.getType() == Account.ACCOUNT_TYPE_ADMIN));
-
- Hashtable vmDataList = new Hashtable();
- // Initialise the vmdatalist with the input data
- for (UserVm userVm : userVms) {
- UserVmData userVmData = newUserVmData(userVm);
- vmDataList.put(userVm.getId(), userVmData);
- }
-
- vmDataList = ApiDBUtils.listVmDetails(vmDataList, details);
-
- //initialize vmresponse from vmdatalist
- List vmResponses = new ArrayList();
- DecimalFormat decimalFormat = new DecimalFormat("#.##");
- for (UserVmData uvd: vmDataList.values()){
- UserVmResponse userVmResponse = newUserVmResponse(uvd, caller_is_admin);
-
- // stats calculation
- String cpuUsed = null;
- // VmStats vmStats = ApiDBUtils.getVmStatistics(userVmResponse.getId());
- VmStats vmStats = ApiDBUtils.getVmStatistics(uvd.getId());
- if (vmStats != null) {
- float cpuUtil = (float) vmStats.getCPUUtilization();
- cpuUsed = decimalFormat.format(cpuUtil) + "%";
- userVmResponse.setCpuUsed(cpuUsed);
-
- Double networkKbRead = Double.valueOf(vmStats.getNetworkReadKBs());
- userVmResponse.setNetworkKbsRead(networkKbRead.longValue());
-
- Double networkKbWrite = Double.valueOf(vmStats.getNetworkWriteKBs());
- userVmResponse.setNetworkKbsWrite(networkKbWrite.longValue());
- }
- userVmResponse.setObjectName(objectName);
-
- vmResponses.add(userVmResponse);
- }
- return vmResponses;
- }
-
-
- @Override
- public DomainRouterResponse createDomainRouterResponse(VirtualRouter router) {
- Map serviceOfferings = new HashMap();
-
- DomainRouterResponse routerResponse = new DomainRouterResponse();
- routerResponse.setId(router.getId());
- routerResponse.setZoneId(router.getDataCenterIdToDeployIn());
- routerResponse.setName(router.getHostName());
- routerResponse.setPodId(router.getPodIdToDeployIn());
- routerResponse.setTemplateId(router.getTemplateId());
- routerResponse.setCreated(router.getCreated());
- routerResponse.setState(router.getState());
- routerResponse.setIsRedundantRouter(router.getIsRedundantRouter());
- routerResponse.setRedundantState(router.getRedundantState().toString());
-
- if (router.getHostId() != null) {
- routerResponse.setHostId(router.getHostId());
- routerResponse.setHostName(ApiDBUtils.findHostById(router.getHostId()).getName());
- }
-
- // Service Offering Info
- ServiceOffering offering = serviceOfferings.get(router.getServiceOfferingId());
-
- if (offering == null) {
- offering = ApiDBUtils.findServiceOfferingById(router.getServiceOfferingId());
- serviceOfferings.put(offering.getId(), offering);
- }
- routerResponse.setServiceOfferingId(offering.getId());
- routerResponse.setServiceOfferingName(offering.getName());
-
- populateOwner(routerResponse, router);
-
- List nicProfiles = ApiDBUtils.getNics(router);
- for (NicProfile singleNicProfile : nicProfiles) {
- Network network = ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId());
- if (network != null) {
- if (network.getTrafficType() == TrafficType.Public) {
- routerResponse.setPublicIp(singleNicProfile.getIp4Address());
- routerResponse.setPublicMacAddress(singleNicProfile.getMacAddress());
- routerResponse.setPublicNetmask(singleNicProfile.getNetmask());
- routerResponse.setGateway(singleNicProfile.getGateway());
- routerResponse.setPublicNetworkId(singleNicProfile.getNetworkId());
- } else if (network.getTrafficType() == TrafficType.Control) {
- routerResponse.setLinkLocalIp(singleNicProfile.getIp4Address());
- routerResponse.setLinkLocalMacAddress(singleNicProfile.getMacAddress());
- routerResponse.setLinkLocalNetmask(singleNicProfile.getNetmask());
- routerResponse.setLinkLocalNetworkId(singleNicProfile.getNetworkId());
- } else if (network.getTrafficType() == TrafficType.Guest) {
- routerResponse.setGuestIpAddress(singleNicProfile.getIp4Address());
- routerResponse.setGuestMacAddress(singleNicProfile.getMacAddress());
- routerResponse.setGuestNetmask(singleNicProfile.getNetmask());
- routerResponse.setGuestNetworkId(singleNicProfile.getNetworkId());
- routerResponse.setNetworkDomain(network.getNetworkDomain());
- }
- }
- }
- DataCenter zone = ApiDBUtils.findZoneById(router.getDataCenterIdToDeployIn());
- if (zone != null) {
- routerResponse.setZoneName(zone.getName());
- routerResponse.setDns1(zone.getDns1());
- routerResponse.setDns2(zone.getDns2());
- }
-
- routerResponse.setObjectName("domainrouter");
- return routerResponse;
- }
-
- @Override
- public SystemVmResponse createSystemVmResponse(VirtualMachine vm) {
- SystemVmResponse vmResponse = new SystemVmResponse();
- if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy) {
- // SystemVm vm = (SystemVm) systemVM;
-
- if(vm.getUuid() != null && !vm.getUuid().isEmpty())
- vmResponse.setId(vm.getUuid());
- else
- vmResponse.setId(String.valueOf(vm.getId()));
- vmResponse.setObjectId(vm.getId());
- vmResponse.setSystemVmType(vm.getType().toString().toLowerCase());
- vmResponse.setZoneId(vm.getDataCenterIdToDeployIn());
-
- vmResponse.setName(vm.getHostName());
- vmResponse.setPodId(vm.getPodIdToDeployIn());
- vmResponse.setTemplateId(vm.getTemplateId());
- vmResponse.setCreated(vm.getCreated());
-
- if (vm.getHostId() != null) {
- vmResponse.setHostId(vm.getHostId());
- vmResponse.setHostName(ApiDBUtils.findHostById(vm.getHostId()).getName());
- }
-
- if (vm.getState() != null) {
- vmResponse.setState(vm.getState().toString());
- }
-
- // for console proxies, add the active sessions
- if (vm.getType() == Type.ConsoleProxy) {
- ConsoleProxyVO proxy = ApiDBUtils.findConsoleProxy(vm.getId());
- //proxy can be already destroyed
- if (proxy != null) {
- vmResponse.setActiveViewerSessions(proxy.getActiveSession());
- }
- }
-
- DataCenter zone = ApiDBUtils.findZoneById(vm.getDataCenterIdToDeployIn());
- if (zone != null) {
- vmResponse.setZoneName(zone.getName());
- vmResponse.setDns1(zone.getDns1());
- vmResponse.setDns2(zone.getDns2());
- }
-
- List nicProfiles = ApiDBUtils.getNics(vm);
- for (NicProfile singleNicProfile : nicProfiles) {
- Network network = ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId());
- if (network != null) {
- TrafficType trafficType = TrafficType.Public;
- if (zone.getNetworkType() == NetworkType.Basic || zone.isSecurityGroupEnabled()) {
- trafficType = TrafficType.Guest;
- }
- if (network.getTrafficType() == trafficType) {
- vmResponse.setPublicIp(singleNicProfile.getIp4Address());
- vmResponse.setPublicMacAddress(singleNicProfile.getMacAddress());
- vmResponse.setPublicNetmask(singleNicProfile.getNetmask());
- vmResponse.setGateway(singleNicProfile.getGateway());
- } else if (network.getTrafficType() == TrafficType.Management) {
- vmResponse.setPrivateIp(singleNicProfile.getIp4Address());
- vmResponse.setPrivateMacAddress(singleNicProfile.getMacAddress());
- vmResponse.setPrivateNetmask(singleNicProfile.getNetmask());
- } else if (network.getTrafficType() == TrafficType.Control) {
- vmResponse.setLinkLocalIp(singleNicProfile.getIp4Address());
- vmResponse.setLinkLocalMacAddress(singleNicProfile.getMacAddress());
- vmResponse.setLinkLocalNetmask(singleNicProfile.getNetmask());
- }
- }
- }
- }
- vmResponse.setObjectName("systemvm");
- return vmResponse;
- }
-
- @Override
- public Host findHostById(Long hostId) {
- return ApiDBUtils.findHostById(hostId);
- }
-
- @Override
- public User findUserById(Long userId) {
- return ApiDBUtils.findUserById(userId);
- }
-
- @Override
- public UserVm findUserVmById(Long vmId) {
- return ApiDBUtils.findUserVmById(vmId);
-
- }
-
- @Override
- public VolumeVO findVolumeById(Long volumeId) {
- return ApiDBUtils.findVolumeById(volumeId);
- }
-
- @Override
- public Account findAccountByNameDomain(String accountName, Long domainId) {
- return ApiDBUtils.findAccountByNameDomain(accountName, domainId);
- }
-
- @Override
- public VirtualMachineTemplate findTemplateById(Long templateId) {
- return ApiDBUtils.findTemplateById(templateId);
- }
-
- @Override
- public VpnUsersResponse createVpnUserResponse(VpnUser vpnUser) {
- VpnUsersResponse vpnResponse = new VpnUsersResponse();
- vpnResponse.setId(vpnUser.getId());
- vpnResponse.setUserName(vpnUser.getUsername());
-
- populateOwner(vpnResponse, vpnUser);
-
- vpnResponse.setObjectName("vpnuser");
- return vpnResponse;
- }
-
- @Override
- public RemoteAccessVpnResponse createRemoteAccessVpnResponse(RemoteAccessVpn vpn) {
- RemoteAccessVpnResponse vpnResponse = new RemoteAccessVpnResponse();
- vpnResponse.setPublicIpId(vpn.getServerAddressId());
- vpnResponse.setPublicIp(ApiDBUtils.findIpAddressById(vpn.getServerAddressId()).getAddress().addr());
- vpnResponse.setIpRange(vpn.getIpRange());
- vpnResponse.setPresharedKey(vpn.getIpsecPresharedKey());
- vpnResponse.setDomainId(vpn.getDomainId());
-
- populateOwner(vpnResponse, vpn);
-
- vpnResponse.setState(vpn.getState().toString());
- vpnResponse.setObjectName("remoteaccessvpn");
-
- return vpnResponse;
- }
-
- @Override
- public TemplateResponse createIsoResponse(VirtualMachineTemplate result) {
- TemplateResponse response = new TemplateResponse();
- response.setId(result.getId());
- response.setName(result.getName());
- response.setDisplayText(result.getDisplayText());
- response.setPublic(result.isPublicTemplate());
- response.setCreated(result.getCreated());
- response.setFormat(result.getFormat());
- response.setOsTypeId(result.getGuestOSId());
- response.setOsTypeName(ApiDBUtils.findGuestOSById(result.getGuestOSId()).getDisplayName());
-
- if (result.getFormat() == ImageFormat.ISO) { // Templates are always bootable
- response.setBootable(result.isBootable());
- } else {
- response.setHypervisor(result.getHypervisorType().toString());// hypervisors are associated with templates
- }
-
- // add account ID and name
- Account owner = ApiDBUtils.findAccountById(result.getAccountId());
- populateAccount(response, owner.getId());
- populateDomain(response, owner.getDomainId());
-
- response.setObjectName("iso");
- return response;
- }
-
- @Override
- public List createTemplateResponses(long templateId, Long zoneId, boolean readyOnly) {
- List dcs = new ArrayList();
- if (zoneId == null || zoneId == -1) {
- dcs.addAll(ApiDBUtils.listZones());
- List response = new ArrayList();
- for (DataCenterVO dc : dcs ) {
- response.addAll(createTemplateResponses(templateId, dc.getId(), readyOnly));
- }
- return response;
- } else {
- return createTemplateResponses(templateId, zoneId.longValue(), readyOnly);
- }
- }
-
- private List createSwiftTemplateResponses(long templateId) {
- VirtualMachineTemplate template = findTemplateById(templateId);
- List responses = new ArrayList();
- VMTemplateSwiftVO templateSwiftRef = ApiDBUtils.findTemplateSwiftRef(templateId);
- if (templateSwiftRef == null) {
- return responses;
- }
-
- TemplateResponse templateResponse = new TemplateResponse();
- templateResponse.setId(template.getId());
- templateResponse.setName(template.getName());
- templateResponse.setDisplayText(template.getDisplayText());
- templateResponse.setPublic(template.isPublicTemplate());
- templateResponse.setCreated(templateSwiftRef.getCreated());
-
- templateResponse.setReady(true);
- templateResponse.setFeatured(template.isFeatured());
- templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM));
- templateResponse.setPasswordEnabled(template.getEnablePassword());
- templateResponse.setCrossZones(template.isCrossZones());
- templateResponse.setFormat(template.getFormat());
- if (template.getTemplateType() != null) {
- templateResponse.setTemplateType(template.getTemplateType().toString());
- }
- templateResponse.setHypervisor(template.getHypervisorType().toString());
-
- GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
- if (os != null) {
- templateResponse.setOsTypeId(os.getId());
- templateResponse.setOsTypeName(os.getDisplayName());
- } else {
- templateResponse.setOsTypeId(-1L);
- templateResponse.setOsTypeName("");
- }
-
- Account account = ApiDBUtils.findAccountByIdIncludingRemoved(template.getAccountId());
- populateAccount(templateResponse, account.getId());
- populateDomain(templateResponse, account.getDomainId());
-
- Account caller = UserContext.current().getCaller();
- boolean isAdmin = false;
- if ((caller == null) || BaseCmd.isAdmin(caller.getType())) {
- isAdmin = true;
- }
-
- // If the user is an Admin, add the template download status
- if (isAdmin || caller.getId() == template.getAccountId()) {
- // add download status
- templateResponse.setStatus("Successfully Installed");
- }
-
- Long templateSize = templateSwiftRef.getSize();
- if (templateSize > 0) {
- templateResponse.setSize(templateSize);
- }
-
- templateResponse.setChecksum(template.getChecksum());
- templateResponse.setSourceTemplateId(template.getSourceTemplateId());
-
- templateResponse.setChecksum(template.getChecksum());
-
- templateResponse.setTemplateTag(template.getTemplateTag());
-
- templateResponse.setObjectName("template");
- responses.add(templateResponse);
- return responses;
- }
-
- @Override
- public List createTemplateResponses(long templateId, long zoneId, boolean readyOnly) {
- if (zoneId == 0) {
- return createSwiftTemplateResponses(templateId);
- }
- VirtualMachineTemplate template = findTemplateById(templateId);
- List responses = new ArrayList();
- VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(templateId, zoneId, readyOnly);
- if (templateHostRef == null) {
- return responses;
- }
-
- HostVO host = ApiDBUtils.findHostById(templateHostRef.getHostId());
- if (host.getType() == Host.Type.LocalSecondaryStorage && host.getStatus() != com.cloud.host.Status.Up) {
- return responses;
- }
-
- TemplateResponse templateResponse = new TemplateResponse();
- templateResponse.setId(template.getId());
- templateResponse.setName(template.getName());
- templateResponse.setDisplayText(template.getDisplayText());
- templateResponse.setPublic(template.isPublicTemplate());
- templateResponse.setCreated(templateHostRef.getCreated());
-
- templateResponse.setReady(templateHostRef.getDownloadState() == Status.DOWNLOADED);
- templateResponse.setFeatured(template.isFeatured());
- templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM));
- templateResponse.setPasswordEnabled(template.getEnablePassword());
- templateResponse.setCrossZones(template.isCrossZones());
- templateResponse.setFormat(template.getFormat());
- if (template.getTemplateType() != null) {
- templateResponse.setTemplateType(template.getTemplateType().toString());
- }
- templateResponse.setHypervisor(template.getHypervisorType().toString());
-
- GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
- if (os != null) {
- templateResponse.setOsTypeId(os.getId());
- templateResponse.setOsTypeName(os.getDisplayName());
- } else {
- templateResponse.setOsTypeId(-1L);
- templateResponse.setOsTypeName("");
- }
-
- Account account = ApiDBUtils.findAccountByIdIncludingRemoved(template.getAccountId());
- populateAccount(templateResponse, account.getId());
- populateDomain(templateResponse, account.getDomainId());
-
- DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId);
-
- // Add the zone ID
- templateResponse.setZoneId(zoneId);
- templateResponse.setZoneName(datacenter.getName());
-
- Account caller = UserContext.current().getCaller();
- boolean isAdmin = false;
- if ((caller == null) || BaseCmd.isAdmin(caller.getType())) {
- isAdmin = true;
- }
-
- // If the user is an Admin, add the template download status
- if (isAdmin || caller.getId() == template.getAccountId()) {
- // add download status
- if (templateHostRef.getDownloadState() != Status.DOWNLOADED) {
- String templateStatus = "Processing";
- if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
- if (templateHostRef.getDownloadPercent() == 100) {
- templateStatus = "Installing Template";
- } else {
- templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded";
- }
- } else {
- templateStatus = templateHostRef.getErrorString();
- }
- templateResponse.setStatus(templateStatus);
- } else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) {
- templateResponse.setStatus("Download Complete");
- } else {
- templateResponse.setStatus("Successfully Installed");
- }
- }
-
- Long templateSize = templateHostRef.getSize();
- if (templateSize > 0) {
- templateResponse.setSize(templateSize);
- }
-
- templateResponse.setChecksum(template.getChecksum());
- templateResponse.setSourceTemplateId(template.getSourceTemplateId());
-
- templateResponse.setChecksum(template.getChecksum());
-
- templateResponse.setTemplateTag(template.getTemplateTag());
-
- templateResponse.setObjectName("template");
- responses.add(templateResponse);
- return responses;
- }
- @Override
- public List createIsoResponses(long isoId, Long zoneId, boolean readyOnly) {
-
- List isoResponses = new ArrayList();
- VirtualMachineTemplate iso = findTemplateById(isoId);
- if ( iso.getTemplateType() == TemplateType.PERHOST) {
- TemplateResponse isoResponse = new TemplateResponse();
- isoResponse.setId(iso.getId());
- isoResponse.setName(iso.getName());
- isoResponse.setDisplayText(iso.getDisplayText());
- isoResponse.setPublic(iso.isPublicTemplate());
- isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST));
- isoResponse.setReady(true);
- isoResponse.setBootable(iso.isBootable());
- isoResponse.setFeatured(iso.isFeatured());
- isoResponse.setCrossZones(iso.isCrossZones());
- isoResponse.setPublic(iso.isPublicTemplate());
- isoResponse.setCreated(iso.getCreated());
- isoResponse.setChecksum(iso.getChecksum());
- isoResponse.setPasswordEnabled(false);
-
- // add account ID and name
- Account owner = ApiDBUtils.findAccountById(iso.getAccountId());
- populateAccount(isoResponse, owner.getId());
- populateDomain(isoResponse, owner.getDomainId());
-
- isoResponse.setObjectName("iso");
- isoResponses.add(isoResponse);
- return isoResponses;
- } else {
- List dcs = new ArrayList();
- if (zoneId == null || zoneId == -1 ) {
- dcs.addAll(ApiDBUtils.listZones());
- for (DataCenterVO dc : dcs ) {
- isoResponses.addAll(createIsoResponses(iso, dc.getId(), readyOnly));
- }
- return isoResponses;
- } else {
- return createIsoResponses(iso, zoneId, readyOnly);
- }
- }
- }
-
- private List createSwiftIsoResponses(VirtualMachineTemplate iso) {
- long isoId = iso.getId();
- List isoResponses = new ArrayList();
- VMTemplateSwiftVO isoSwift = ApiDBUtils.findTemplateSwiftRef(isoId);
- if (isoSwift == null) {
- return isoResponses;
- }
- TemplateResponse isoResponse = new TemplateResponse();
- isoResponse.setId(iso.getId());
- isoResponse.setName(iso.getName());
- isoResponse.setDisplayText(iso.getDisplayText());
- isoResponse.setPublic(iso.isPublicTemplate());
- isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST));
- isoResponse.setCreated(isoSwift.getCreated());
- isoResponse.setReady(true);
- isoResponse.setBootable(iso.isBootable());
- isoResponse.setFeatured(iso.isFeatured());
- isoResponse.setCrossZones(iso.isCrossZones());
- isoResponse.setPublic(iso.isPublicTemplate());
- isoResponse.setChecksum(iso.getChecksum());
-
- // TODO: implement
- GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId());
- if (os != null) {
- isoResponse.setOsTypeId(os.getId());
- isoResponse.setOsTypeName(os.getDisplayName());
- } else {
- isoResponse.setOsTypeId(-1L);
- isoResponse.setOsTypeName("");
- }
-
- populateOwner(isoResponse, iso);
-
- Account account = UserContext.current().getCaller();
- boolean isAdmin = false;
- if ((account == null) || BaseCmd.isAdmin(account.getType())) {
- isAdmin = true;
- }
-
- // If the user is an admin, add the template download status
- if (isAdmin || account.getId() == iso.getAccountId()) {
- // add download status
- isoResponse.setStatus("Successfully Installed");
- }
- Long isoSize = isoSwift.getSize();
- if (isoSize > 0) {
- isoResponse.setSize(isoSize);
- }
- isoResponse.setObjectName("iso");
- isoResponses.add(isoResponse);
- return isoResponses;
- }
-
- @Override
- public List createIsoResponses(VirtualMachineTemplate iso, long zoneId, boolean readyOnly) {
- if (zoneId == 0) {
- return createSwiftIsoResponses(iso);
- }
- long isoId = iso.getId();
- List isoResponses = new ArrayList();
- VMTemplateHostVO isoHost = ApiDBUtils.findTemplateHostRef(isoId, zoneId, readyOnly);
- if( isoHost == null ) {
- return isoResponses;
- }
- TemplateResponse isoResponse = new TemplateResponse();
- isoResponse.setId(iso.getId());
- isoResponse.setName(iso.getName());
- isoResponse.setDisplayText(iso.getDisplayText());
- isoResponse.setPublic(iso.isPublicTemplate());
- isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST));
- isoResponse.setCreated(isoHost.getCreated());
- isoResponse.setReady(isoHost.getDownloadState() == Status.DOWNLOADED);
- isoResponse.setBootable(iso.isBootable());
- isoResponse.setFeatured(iso.isFeatured());
- isoResponse.setCrossZones(iso.isCrossZones());
- isoResponse.setPublic(iso.isPublicTemplate());
- isoResponse.setChecksum(iso.getChecksum());
-
- // TODO: implement
- GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId());
- if (os != null) {
- isoResponse.setOsTypeId(os.getId());
- isoResponse.setOsTypeName(os.getDisplayName());
- } else {
- isoResponse.setOsTypeId(-1L);
- isoResponse.setOsTypeName("");
- }
-
- populateOwner(isoResponse, iso);
-
- Account account = UserContext.current().getCaller();
- boolean isAdmin = false;
- if ((account == null) || BaseCmd.isAdmin(account.getType())) {
- isAdmin = true;
- }
- // Add the zone ID
- DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId);
- isoResponse.setZoneId(zoneId);
- isoResponse.setZoneName(datacenter.getName());
-
- // If the user is an admin, add the template download status
- if (isAdmin || account.getId() == iso.getAccountId()) {
- // add download status
- if (isoHost.getDownloadState() != Status.DOWNLOADED) {
- String isoStatus = "Processing";
- if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) {
- isoStatus = "Download Complete";
- } else if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
- if (isoHost.getDownloadPercent() == 100) {
- isoStatus = "Installing ISO";
- } else {
- isoStatus = isoHost.getDownloadPercent() + "% Downloaded";
- }
- } else {
- isoStatus = isoHost.getErrorString();
- }
- isoResponse.setStatus(isoStatus);
- } else {
- isoResponse.setStatus("Successfully Installed");
- }
- }
-
- Long isoSize = isoHost.getSize();
- if (isoSize > 0) {
- isoResponse.setSize(isoSize);
- }
-
- isoResponse.setObjectName("iso");
- isoResponses.add(isoResponse);
- return isoResponses;
- }
-
- @Override
- public ListResponse createSecurityGroupResponses(List extends SecurityGroupRules> networkGroups) {
- List groupResultObjs = SecurityGroupResultObject.transposeNetworkGroups(networkGroups);
-
- ListResponse response = new ListResponse();
- List netGrpResponses = new ArrayList();
- for (SecurityGroupResultObject networkGroup : groupResultObjs) {
- SecurityGroupResponse netGrpResponse = new SecurityGroupResponse();
- netGrpResponse.setId(networkGroup.getId());
- netGrpResponse.setName(networkGroup.getName());
- netGrpResponse.setDescription(networkGroup.getDescription());
-
- populateOwner(netGrpResponse, networkGroup);
-
- List ingressRules = networkGroup.getIngressRules();
- if ((ingressRules != null) && !ingressRules.isEmpty()) {
- List ingressRulesResponse = new ArrayList();
-
- for (IngressRuleResultObject ingressRule : ingressRules) {
- IngressRuleResponse ingressData = new IngressRuleResponse();
-
- ingressData.setRuleId(ingressRule.getId());
- ingressData.setProtocol(ingressRule.getProtocol());
- if ("icmp".equalsIgnoreCase(ingressRule.getProtocol())) {
- ingressData.setIcmpType(ingressRule.getStartPort());
- ingressData.setIcmpCode(ingressRule.getEndPort());
- } else {
- ingressData.setStartPort(ingressRule.getStartPort());
- ingressData.setEndPort(ingressRule.getEndPort());
- }
-
- if (ingressRule.getAllowedSecurityGroup() != null) {
- ingressData.setSecurityGroupName(ingressRule.getAllowedSecurityGroup());
- ingressData.setAccountName(ingressRule.getAllowedSecGroupAcct());
- } else {
- ingressData.setCidr(ingressRule.getAllowedSourceIpCidr());
- }
-
- ingressData.setObjectName("ingressrule");
- ingressRulesResponse.add(ingressData);
- }
- netGrpResponse.setIngressRules(ingressRulesResponse);
- }
- netGrpResponse.setObjectName("securitygroup");
- netGrpResponses.add(netGrpResponse);
- }
-
- response.setResponses(netGrpResponses);
- return response;
- }
-
- @Override
- public SecurityGroupResponse createSecurityGroupResponse(SecurityGroup group) {
- SecurityGroupResponse response = new SecurityGroupResponse();
-
- populateOwner(response, group);
-
- response.setDescription(group.getDescription());
- response.setId(group.getId());
- response.setName(group.getName());
-
- response.setObjectName("securitygroup");
- return response;
-
- }
-
- @Override
- public ExtractResponse createExtractResponse(Long uploadId, Long id, Long zoneId, Long accountId, String mode) {
- UploadVO uploadInfo = ApiDBUtils.findUploadById(uploadId);
- ExtractResponse response = new ExtractResponse();
- response.setObjectName("template");
- response.setId(id);
- response.setName(ApiDBUtils.findTemplateById(id).getName());
- response.setZoneId(zoneId);
- response.setZoneName(ApiDBUtils.findZoneById(zoneId).getName());
- response.setMode(mode);
- response.setUploadId(uploadId);
- response.setState(uploadInfo.getUploadState().toString());
- response.setAccountId(accountId);
- response.setUrl(uploadInfo.getUploadUrl());
- return response;
-
- }
-
- @Override
- public String toSerializedString(CreateCmdResponse response, String responseType) {
- return ApiResponseSerializer.toSerializedString(response, responseType);
- }
-
- @Override
- public AsyncJobResponse createAsyncJobResponse(AsyncJob job) {
- AsyncJobResponse jobResponse = new AsyncJobResponse();
- jobResponse.setAccountId(job.getAccountId());
- jobResponse.setCmd(job.getCmd());
- jobResponse.setCreated(job.getCreated());
- jobResponse.setId(job.getId());
-
- if (job.getInstanceType() != null && job.getInstanceId() != null) {
- jobResponse.setJobInstanceId(job.getInstanceId());
- jobResponse.setJobInstanceType(job.getInstanceType().toString());
- }
- jobResponse.setJobProcStatus(job.getProcessStatus());
- jobResponse.setJobResult((ResponseObject) ApiSerializerHelper.fromSerializedString(job.getResult()));
- jobResponse.setJobResultCode(job.getResultCode());
- jobResponse.setJobStatus(job.getStatus());
- jobResponse.setUserId(job.getUserId());
-
- jobResponse.setObjectName("asyncjobs");
- return jobResponse;
- }
-
- @Override
- public List createTemplateResponses(long templateId, Long snapshotId, Long volumeId, boolean readyOnly) {
- VolumeVO volume = null;
- if (snapshotId != null) {
- Snapshot snapshot = ApiDBUtils.findSnapshotById(snapshotId);
- volume = findVolumeById(snapshot.getVolumeId());
- } else {
- volume = findVolumeById(volumeId);
- }
- return createTemplateResponses(templateId, volume.getDataCenterId(), readyOnly);
- }
-
- @Override
- public List createTemplateResponses(long templateId, Long vmId) {
- UserVm vm = findUserVmById(vmId);
- Long hostId = (vm.getHostId() == null ? vm.getLastHostId() : vm.getHostId());
- Host host = findHostById(hostId);
- return createTemplateResponses(templateId, host.getDataCenterId(), true);
- }
-
- @Override
- public EventResponse createEventResponse(Event event) {
- EventResponse responseEvent = new EventResponse();
- responseEvent.setCreated(event.getCreateDate());
- responseEvent.setDescription(event.getDescription());
- responseEvent.setEventType(event.getType());
- responseEvent.setId(event.getId());
- responseEvent.setLevel(event.getLevel());
- responseEvent.setParentId(event.getStartId());
- responseEvent.setState(event.getState());
-
- populateOwner(responseEvent, event);
-
- User user = ApiDBUtils.findUserById(event.getUserId());
- if (user != null) {
- responseEvent.setUsername(user.getUsername());
- }
-
- responseEvent.setObjectName("event");
- return responseEvent;
- }
-
-
- private List sumCapacities(List extends Capacity> hostCapacities) {
- Map totalCapacityMap = new HashMap();
- Map usedCapacityMap = new HashMap();
-
- Set poolIdsToIgnore = new HashSet();
- Criteria c = new Criteria();
- // TODO: implement
- List extends StoragePoolVO> allStoragePools = ApiDBUtils.searchForStoragePools(c);
- for (StoragePoolVO pool : allStoragePools) {
- StoragePoolType poolType = pool.getPoolType();
- if (!(poolType.isShared())) {// All the non shared storages shouldn't show up in the capacity calculation
- poolIdsToIgnore.add(pool.getId());
- }
- }
-
- float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
-
- // collect all the capacity types, sum allocated/used and sum total...get one capacity number for each
- for (Capacity capacity : hostCapacities) {
-
- //check if zone exist
- DataCenter zone = ApiDBUtils.findZoneById(capacity.getDataCenterId());
- if (zone == null) {
- continue;
- }
-
- short capacityType = capacity.getCapacityType();
-
- //If local storage then ignore
- if ( (capacityType == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED || capacityType == Capacity.CAPACITY_TYPE_STORAGE)
- && poolIdsToIgnore.contains(capacity.getHostOrPoolId())) {
- continue;
- }
-
- String key = capacity.getCapacityType() + "_" + capacity.getDataCenterId();
- String keyForPodTotal = key + "_-1";
-
- boolean sumPodCapacity = false;
- if (capacity.getPodId() != null) {
- key += "_" + capacity.getPodId();
- sumPodCapacity = true;
- }
-
- Long totalCapacity = totalCapacityMap.get(key);
- Long usedCapacity = usedCapacityMap.get(key);
-
- // reset overprovisioning factor to 1
- float overprovisioningFactor = 1;
- if (capacityType == Capacity.CAPACITY_TYPE_CPU) {
- overprovisioningFactor = cpuOverprovisioningFactor;
- }
-
- if (totalCapacity == null) {
- totalCapacity = new Long((long) (capacity.getTotalCapacity() * overprovisioningFactor));
- } else {
- totalCapacity = new Long((long) (capacity.getTotalCapacity() * overprovisioningFactor)) + totalCapacity;
- }
-
- if (usedCapacity == null) {
- usedCapacity = new Long(capacity.getUsedCapacity());
- } else {
- usedCapacity = new Long(capacity.getUsedCapacity() + usedCapacity);
- }
-
- if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType == Capacity.CAPACITY_TYPE_MEMORY) { // Reserved
- // Capacity
- // accounts for
- // stopped vms
- // that have been
- // stopped within
- // an interval
- usedCapacity += capacity.getReservedCapacity();
- }
-
- totalCapacityMap.put(key, totalCapacity);
- usedCapacityMap.put(key, usedCapacity);
-
- if (sumPodCapacity) {
- totalCapacity = totalCapacityMap.get(keyForPodTotal);
- usedCapacity = usedCapacityMap.get(keyForPodTotal);
-
- overprovisioningFactor = 1;
- if (capacityType == Capacity.CAPACITY_TYPE_CPU) {
- overprovisioningFactor = cpuOverprovisioningFactor;
- }
-
- if (totalCapacity == null) {
- totalCapacity = new Long((long) (capacity.getTotalCapacity() * overprovisioningFactor));
- } else {
- totalCapacity = new Long((long) (capacity.getTotalCapacity() * overprovisioningFactor)) + totalCapacity;
- }
-
- if (usedCapacity == null) {
- usedCapacity = new Long(capacity.getUsedCapacity());
- } else {
- usedCapacity = new Long(capacity.getUsedCapacity() + usedCapacity);
- }
-
- if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType == Capacity.CAPACITY_TYPE_MEMORY) { // Reserved
- // Capacity
- // accounts
- // for
- // stopped
- // vms that
- // have been
- // stopped
- // within an
- // interval
- usedCapacity += capacity.getReservedCapacity();
- }
-
- totalCapacityMap.put(keyForPodTotal, totalCapacity);
- usedCapacityMap.put(keyForPodTotal, usedCapacity);
- }
- }
-
- List summedCapacities = new ArrayList();
- for (String key : totalCapacityMap.keySet()) {
- CapacityVO summedCapacity = new CapacityVO();
-
- StringTokenizer st = new StringTokenizer(key, "_");
- summedCapacity.setCapacityType(Short.parseShort(st.nextToken()));
- summedCapacity.setDataCenterId(Long.parseLong(st.nextToken()));
- if (st.hasMoreTokens()) {
- summedCapacity.setPodId(Long.parseLong(st.nextToken()));
- }
-
- summedCapacity.setTotalCapacity(totalCapacityMap.get(key));
- summedCapacity.setUsedCapacity(usedCapacityMap.get(key));
-
- summedCapacities.add(summedCapacity);
- }
- return summedCapacities;
- }
-
- @Override
- public List createCapacityResponse(List extends Capacity> result, DecimalFormat format) {
- List capacityResponses = new ArrayList();
- //List summedCapacities = sumCapacities(result);
- for (Capacity summedCapacity : result) {
- CapacityResponse capacityResponse = new CapacityResponse();
- capacityResponse.setCapacityTotal(summedCapacity.getTotalCapacity());
- capacityResponse.setCapacityType(summedCapacity.getCapacityType());
- capacityResponse.setCapacityUsed(summedCapacity.getUsedCapacity());
- if (summedCapacity.getPodId() != null) {
- capacityResponse.setPodId(summedCapacity.getPodId());
- HostPodVO pod = ApiDBUtils.findPodById(summedCapacity.getPodId());
- if (pod != null) {
- capacityResponse.setPodName(pod.getName());
- }
- }
- if (summedCapacity.getClusterId() != null) {
- capacityResponse.setClusterId(summedCapacity.getClusterId());
- ClusterVO cluster = ApiDBUtils.findClusterById(summedCapacity.getClusterId());
- if (cluster != null) {
- capacityResponse.setClusterName(cluster.getName());
- if (summedCapacity.getPodId() == null){
- long podId = cluster.getPodId();
- capacityResponse.setPodId(podId);
- capacityResponse.setPodName(ApiDBUtils.findPodById(podId).getName());
- }
- }
- }
- capacityResponse.setZoneId(summedCapacity.getDataCenterId());
- capacityResponse.setZoneName(ApiDBUtils.findZoneById(summedCapacity.getDataCenterId()).getName());
- if (summedCapacity.getTotalCapacity() != 0) {
- capacityResponse.setPercentUsed(format.format((float) summedCapacity.getUsedCapacity() / (float) summedCapacity.getTotalCapacity() * 100f));
- } else {
- capacityResponse.setPercentUsed(format.format(0L));
- }
-
- capacityResponse.setObjectName("capacity");
- capacityResponses.add(capacityResponse);
- }
-
- return capacityResponses;
- }
-
- @Override
- public TemplatePermissionsResponse createTemplatePermissionsResponse(List accountNames, Long id, boolean isAdmin) {
- Long templateOwnerDomain = null;
- VirtualMachineTemplate template = ApiDBUtils.findTemplateById(id);
- Account templateOwner = ApiDBUtils.findAccountById(template.getAccountId());
- if (isAdmin) {
- // FIXME: we have just template id and need to get template owner from that
- 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);
- }
-
- //Set accounts
- List projectIds = new ArrayList();
- List regularAccounts = new ArrayList();
- for (String accountName : accountNames) {
- Account account = ApiDBUtils.findAccountByNameDomain(accountName, templateOwner.getDomainId());
- if (account.getType() != Account.ACCOUNT_TYPE_PROJECT) {
- regularAccounts.add(accountName);
- } else {
- //convert account to projectIds
- Project project = ApiDBUtils.findProjectByProjectAccountId(account.getId());
- projectIds.add(project.getId());
- }
- }
-
- if (!projectIds.isEmpty()) {
- response.setProjectIds(projectIds);
- }
-
- if (!regularAccounts.isEmpty()) {
- response.setAccountNames(regularAccounts);
- }
-
- response.setObjectName("templatepermission");
- return response;
- }
-
- @Override
- public AsyncJobResponse queryJobResult(QueryAsyncJobResultCmd cmd) {
- AsyncJobResult result = ApiDBUtils._asyncMgr.queryAsyncJobResult(cmd);
- AsyncJobResponse response = new AsyncJobResponse();
- response.setId(result.getJobId());
- response.setJobStatus(result.getJobStatus());
- response.setJobProcStatus(result.getProcessStatus());
- response.setJobResultCode(result.getResultCode());
- response.setJobResult((ResponseObject) ApiSerializerHelper.fromSerializedString(result.getResult()));
-
- Object resultObject = result.getResultObject();
- if (resultObject != null) {
- Class> clz = resultObject.getClass();
- if (clz.isPrimitive() || clz.getSuperclass() == Number.class || clz == String.class || clz == Date.class) {
- response.setJobResultType("text");
- } else {
- response.setJobResultType("object");
- }
- }
-
- return response;
- }
-
- @Override
- public SecurityGroupResponse createSecurityGroupResponseFromIngressRule(List extends IngressRule> ingressRules) {
- SecurityGroupResponse response = new SecurityGroupResponse();
- Map securiytGroupAccounts = new HashMap();
- Map allowedSecurityGroups = new HashMap();
- Map allowedSecuriytGroupAccounts = new HashMap();
-
- if ((ingressRules != null) && !ingressRules.isEmpty()) {
- SecurityGroup securityGroup = ApiDBUtils.findSecurityGroupById(ingressRules.get(0).getSecurityGroupId());
- response.setId(securityGroup.getId());
- response.setName(securityGroup.getName());
- response.setDescription(securityGroup.getDescription());
-
- Account account = securiytGroupAccounts.get(securityGroup.getAccountId());
-
- if (account == null) {
- account = ApiDBUtils.findAccountById(securityGroup.getAccountId());
- securiytGroupAccounts.put(securityGroup.getAccountId(), account);
- }
-
- populateAccount(response, account.getId());
- populateDomain(response, account.getDomainId());
-
- List responses = new ArrayList();
- for (IngressRule ingressRule : ingressRules) {
- IngressRuleResponse ingressData = new IngressRuleResponse();
-
- ingressData.setRuleId(ingressRule.getId());
- ingressData.setProtocol(ingressRule.getProtocol());
- if ("icmp".equalsIgnoreCase(ingressRule.getProtocol())) {
- ingressData.setIcmpType(ingressRule.getStartPort());
- ingressData.setIcmpCode(ingressRule.getEndPort());
- } else {
- ingressData.setStartPort(ingressRule.getStartPort());
- ingressData.setEndPort(ingressRule.getEndPort());
- }
-
- Long allowedSecurityGroupId = ingressRule.getAllowedNetworkId();
- if (allowedSecurityGroupId != null) {
- SecurityGroup allowedSecurityGroup = allowedSecurityGroups.get(allowedSecurityGroupId);
- if (allowedSecurityGroup == null) {
- allowedSecurityGroup = ApiDBUtils.findSecurityGroupById(allowedSecurityGroupId);
- allowedSecurityGroups.put(allowedSecurityGroupId, allowedSecurityGroup);
- }
-
- ingressData.setSecurityGroupName(allowedSecurityGroup.getName());
-
- Account allowedAccount = allowedSecuriytGroupAccounts.get(allowedSecurityGroup.getAccountId());
- if (allowedAccount == null) {
- allowedAccount = ApiDBUtils.findAccountById(allowedSecurityGroup.getAccountId());
- allowedSecuriytGroupAccounts.put(allowedAccount.getId(), allowedAccount);
- }
-
- ingressData.setAccountName(allowedAccount.getAccountName());
- } else {
- ingressData.setCidr(ingressRule.getAllowedSourceIpCidr());
- }
-
- ingressData.setObjectName("ingressrule");
- responses.add(ingressData);
- }
- response.setIngressRules(responses);
- response.setObjectName("securitygroup");
-
- }
- return response;
- }
-
- @Override
- public SecurityGroupResponse createSecurityGroupResponseFromEgressRule(List extends EgressRule> egressRules) {
- SecurityGroupResponse response = new SecurityGroupResponse();
- Map securiytGroupAccounts = new HashMap();
- Map allowedSecurityGroups = new HashMap();
- Map allowedSecuriytGroupAccounts = new HashMap();
-
- if ((egressRules != null) && !egressRules.isEmpty()) {
- SecurityGroup securityGroup = ApiDBUtils.findSecurityGroupById(egressRules.get(0).getSecurityGroupId());
- response.setId(securityGroup.getId());
- response.setName(securityGroup.getName());
- response.setDescription(securityGroup.getDescription());
-
- Account account = securiytGroupAccounts.get(securityGroup.getAccountId());
-
- if (account == null) {
- account = ApiDBUtils.findAccountById(securityGroup.getAccountId());
- securiytGroupAccounts.put(securityGroup.getAccountId(), account);
- }
-
- populateAccount(response, account.getId());
- populateDomain(response, account.getDomainId());
-
-
- List responses = new ArrayList();
- for (EgressRule egressRule : egressRules) {
- EgressRuleResponse egressData = new EgressRuleResponse();
-
- egressData.setRuleId(egressRule.getId());
- egressData.setProtocol(egressRule.getProtocol());
- if ("icmp".equalsIgnoreCase(egressRule.getProtocol())) {
- egressData.setIcmpType(egressRule.getStartPort());
- egressData.setIcmpCode(egressRule.getEndPort());
- } else {
- egressData.setStartPort(egressRule.getStartPort());
- egressData.setEndPort(egressRule.getEndPort());
- }
-
- Long allowedSecurityGroupId = egressRule.getAllowedNetworkId();
- if (allowedSecurityGroupId != null) {
- SecurityGroup allowedSecurityGroup = allowedSecurityGroups.get(allowedSecurityGroupId);
- if (allowedSecurityGroup == null) {
- allowedSecurityGroup = ApiDBUtils.findSecurityGroupById(allowedSecurityGroupId);
- allowedSecurityGroups.put(allowedSecurityGroupId, allowedSecurityGroup);
- }
-
- egressData.setSecurityGroupName(allowedSecurityGroup.getName());
-
- Account allowedAccount = allowedSecuriytGroupAccounts.get(allowedSecurityGroup.getAccountId());
- if (allowedAccount == null) {
- allowedAccount = ApiDBUtils.findAccountById(allowedSecurityGroup.getAccountId());
- allowedSecuriytGroupAccounts.put(allowedAccount.getId(), allowedAccount);
- }
-
- egressData.setAccountName(allowedAccount.getAccountName());
- } else {
- egressData.setCidr(egressRule.getAllowedDestinationIpCidr());
- }
-
- egressData.setObjectName("egressrule");
- responses.add(egressData);
- }
- response.setEgressRules(responses);
- response.setObjectName("securitygroup");
-
- }
- return response;
- }
-
- @Override
- public NetworkOfferingResponse createNetworkOfferingResponse(NetworkOffering offering) {
- NetworkOfferingResponse response = new NetworkOfferingResponse();
- response.setId(offering.getId());
- response.setName(offering.getName());
- response.setDisplayText(offering.getDisplayText());
- response.setTags(offering.getTags());
- response.setTrafficType(offering.getTrafficType().toString());
- response.setMaxconnections(offering.getConcurrentConnections());
- response.setIsDefault(offering.isDefault());
- response.setSpecifyVlan(offering.getSpecifyVlan());
- response.setAvailability(offering.getAvailability().toString());
- response.setNetworkRate(ApiDBUtils.getNetworkRate(offering.getId()));
- response.setRedundantRouter(offering.getRedundantRouter());
-
- if (offering.getGuestType() != null) {
- response.setGuestIpType(offering.getGuestType().toString());
- }
-
- response.setObjectName("networkoffering");
- return response;
- }
-
- @Override
- public NetworkResponse createNetworkResponse(Network network) {
- // need to get network profile in order to retrieve dns information from there
- NetworkProfile profile = ApiDBUtils.getNetworkProfile(network.getId());
- NetworkResponse response = new NetworkResponse();
- response.setId(network.getId());
- response.setName(network.getName());
- response.setDisplaytext(network.getDisplayText());
- if (network.getBroadcastDomainType() != null) {
- response.setBroadcastDomainType(network.getBroadcastDomainType().toString());
- }
- if (network.getBroadcastUri() != null) {
- response.setBroadcastUri(network.getBroadcastUri().toString());
- }
-
- if (network.getTrafficType() != null) {
- response.setTrafficType(network.getTrafficType().name());
- }
-
- if (network.getGuestType() != null) {
- response.setType(network.getGuestType().name());
- }
-
- // get start ip and end ip of corresponding vlan
- List extends Vlan> vlan = ApiDBUtils.listVlanByNetworkId(network.getId());
- if (vlan != null && !vlan.isEmpty()) {
- Vlan singleVlan = vlan.get(0);
- String ipRange = singleVlan.getIpRange();
- String[] range = ipRange.split("-");
- response.setStartIp(range[0]);
- response.setEndIp(range[1]);
- response.setGateway(singleVlan.getVlanGateway());
- response.setNetmask(singleVlan.getVlanNetmask());
- response.setVlan(singleVlan.getVlanTag());
- }
-
- response.setZoneId(network.getDataCenterId());
-
- // populate network offering information
- NetworkOffering networkOffering = ApiDBUtils.findNetworkOfferingById(network.getNetworkOfferingId());
- if (networkOffering != null) {
- response.setNetworkOfferingId(networkOffering.getId());
- response.setNetworkOfferingName(networkOffering.getName());
- response.setNetworkOfferingDisplayText(networkOffering.getDisplayText());
- response.setIsSystem(networkOffering.isSystemOnly());
- response.setNetworkOfferingAvailability(networkOffering.getAvailability().toString());
- }
-
- response.setIsShared(network.getIsShared());
- response.setIsDefault(network.isDefault());
- response.setState(network.getState().toString());
- response.setRelated(network.getRelated());
- response.setNetworkDomain(network.getNetworkDomain());
-
- response.setDns1(profile.getDns1());
- response.setDns2(profile.getDns2());
-
- response.setIsSecurityGroupEnabled(network.isSecurityGroupEnabled());
- response.setTags(network.getTags());
-
- // populate capability
- Map> serviceCapabilitiesMap = ApiDBUtils.getNetworkCapabilities(networkOffering.getId(), network.getDataCenterId());
- List serviceResponses = new ArrayList();
- if (serviceCapabilitiesMap != null) {
- for (Service service : serviceCapabilitiesMap.keySet()) {
- ServiceResponse serviceResponse = new ServiceResponse();
- serviceResponse.setName(service.getName());
-
- // set list of capabilities for the service
- List capabilityResponses = new ArrayList();
- Map serviceCapabilities = serviceCapabilitiesMap.get(service);
- if (serviceCapabilities != null) {
- for (Capability capability : serviceCapabilities.keySet()) {
- CapabilityResponse capabilityResponse = new CapabilityResponse();
- String capabilityValue = serviceCapabilities.get(capability);
- capabilityResponse.setName(capability.getName());
- capabilityResponse.setValue(capabilityValue);
- capabilityResponse.setObjectName("capability");
- capabilityResponses.add(capabilityResponse);
- }
- serviceResponse.setCapabilities(capabilityResponses);
- }
-
- serviceResponse.setObjectName("service");
- serviceResponses.add(serviceResponse);
- }
- }
- response.setServices(serviceResponses);
-
- populateOwner(response, network);
-
- Long dedicatedDomainId = ApiDBUtils.getDedicatedNetworkDomain(network.getId());
- if (dedicatedDomainId != null) {
- Domain domain = ApiDBUtils.findDomainById(dedicatedDomainId);
- response.setDomainId(dedicatedDomainId);
- response.setDomainName(domain.getName());
- }
-
- response.setObjectName("network");
- return response;
- }
-
- @Override
- public Long getSecurityGroupId (String groupName, long accountId) {
- SecurityGroup sg = ApiDBUtils.getSecurityGroup(groupName, accountId);
- if (sg == null) {
- return null;
- } else {
- return sg.getId();
- }
- }
-
- @Override
- public ProjectResponse createProjectResponse(Project project) {
- ProjectResponse response = new ProjectResponse();
- response.setId(project.getId());
- response.setName(project.getName());
- response.setDisplaytext(project.getDisplayText());
- response.setState(project.getState().toString());
-
- Domain domain = ApiDBUtils.findDomainById(project.getDomainId());
- response.setDomainId(domain.getId());
- response.setDomain(domain.getName());
-
- response.setOwner(ApiDBUtils.getProjectOwner(project.getId()).getAccountName());
-
- response.setObjectName("project");
- return response;
- }
-
-
- public FirewallResponse createFirewallResponse(FirewallRule fwRule) {
- FirewallResponse response = new FirewallResponse();
-
- response.setId(fwRule.getId());
- response.setProtocol(fwRule.getProtocol());
- if (fwRule.getSourcePortStart() != null) {
- response.setStartPort(Integer.toString(fwRule.getSourcePortStart()));
- }
-
- if (fwRule.getSourcePortEnd() != null) {
- response.setEndPort(Integer.toString(fwRule.getSourcePortEnd()));
- }
-
- List cidrs = ApiDBUtils.findFirewallSourceCidrs(fwRule.getId());
- response.setCidrList(StringUtils.join(cidrs, ","));
-
- IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId());
- response.setPublicIpAddressId(ip.getId());
- response.setPublicIpAddress(ip.getAddress().addr());
-
- FirewallRule.State state = fwRule.getState();
- String stateToSet = state.toString();
- if (state.equals(FirewallRule.State.Revoke)) {
- stateToSet = "Deleting";
- }
-
- response.setIcmpCode(fwRule.getIcmpCode());
- response.setIcmpType(fwRule.getIcmpType());
-
- response.setState(stateToSet);
- response.setObjectName("firewallrule");
- return response;
- }
-
-
-
- public UserVmData newUserVmData(UserVm userVm){
- UserVmData userVmData = new UserVmData();
- userVmData.setId(userVm.getId());
- userVmData.setName(userVm.getHostName());
- userVmData.setCreated(userVm.getCreated());
- userVmData.setGuestOsId(userVm.getGuestOSId());
- userVmData.setHaEnable(userVm.isHaEnabled());
- if (userVm.getState() != null) {
- userVmData.setState(userVm.getState().toString());
- }
- if (userVm.getDisplayName() != null) {
- userVmData.setDisplayName(userVm.getDisplayName());
- } else {
- userVmData.setDisplayName(userVm.getHostName());
- }
- userVmData.setDomainId(userVm.getDomainId());
-
- if (userVm.getHypervisorType() != null) {
- userVmData.setHypervisor(userVm.getHypervisorType().toString());
- }
-
- if (userVm.getPassword() != null) {
- userVmData.setPassword(userVm.getPassword());
- }
- return userVmData;
- }
-
- public UserVmResponse newUserVmResponse(UserVmData userVmData, boolean caller_is_admin){
- UserVmResponse userVmResponse = new UserVmResponse();
- userVmResponse.setHypervisor(userVmData.getHypervisor());
- if(userVmData.getUuid() != null && !userVmData.getUuid().isEmpty())
- userVmResponse.setId(userVmData.getUuid());
- else
- userVmResponse.setId(String.valueOf(userVmData.getId()));
- userVmResponse.setName(userVmData.getName());
- userVmResponse.setDisplayName(userVmData.getDisplayName());
- userVmResponse.setIpAddress(userVmData.getIpAddress());
-
- populateAccount(userVmResponse, userVmData.getAccountId());
- populateDomain(userVmResponse, userVmData.getDomainId());
-
- userVmResponse.setCreated(userVmData.getCreated());
- userVmResponse.setState(userVmData.getState());
- userVmResponse.setHaEnable(userVmData.getHaEnable());
- userVmResponse.setGroupId(userVmData.getGroupId());
- userVmResponse.setGroup(userVmData.getGroup());
- userVmResponse.setZoneId(userVmData.getZoneId());
- userVmResponse.setZoneName(userVmData.getZoneName());
- if (caller_is_admin){
- userVmResponse.setHostId(userVmData.getHostId());
- userVmResponse.setHostName(userVmData.getHostName());
- }
- userVmResponse.setTemplateId(userVmData.getTemplateId());
- userVmResponse.setTemplateName(userVmData.getTemplateName());
- userVmResponse.setTemplateDisplayText(userVmData.getTemplateDisplayText());
- userVmResponse.setPasswordEnabled(userVmData.getPasswordEnabled());
- userVmResponse.setIsoId(userVmData.getIsoId());
- userVmResponse.setIsoName(userVmData.getIsoName());
- userVmResponse.setIsoDisplayText(userVmData.getIsoDisplayText());
- userVmResponse.setServiceOfferingId(userVmData.getServiceOfferingId());
- userVmResponse.setServiceOfferingName(userVmData.getServiceOfferingName());
- userVmResponse.setCpuNumber(userVmData.getCpuNumber());
- userVmResponse.setCpuSpeed(userVmData.getCpuSpeed());
- userVmResponse.setMemory(userVmData.getMemory());
- userVmResponse.setCpuUsed(userVmData.getCpuUsed());
- userVmResponse.setNetworkKbsRead(userVmData.getNetworkKbsRead());
- userVmResponse.setNetworkKbsWrite(userVmData.getNetworkKbsWrite());
- userVmResponse.setGuestOsId(userVmData.getGuestOsId());
- userVmResponse.setRootDeviceId(userVmData.getRootDeviceId());
- userVmResponse.setRootDeviceType(userVmData.getRootDeviceType());
- userVmResponse.setPassword(userVmData.getPassword());
- userVmResponse.setJobId(userVmData.getJobId());
- userVmResponse.setJobStatus(userVmData.getJobStatus());
- userVmResponse.setForVirtualNetwork(userVmData.getForVirtualNetwork());
-
- Set securityGroupResponse = new HashSet();
- for (SecurityGroupData sgd: userVmData.getSecurityGroupList()){
- SecurityGroupResponse sgr = new SecurityGroupResponse();
- sgr.setId(sgd.getId());
- sgr.setName(sgd.getName());
- sgr.setDescription(sgd.getDescription());
-
- Account account = ApiDBUtils.findAccountByNameDomain(sgd.getAccountName(), sgd.getDomainId());
- if (account != null) {
- populateAccount(sgr, account.getId());
- populateDomain(sgr, sgd.getDomainId());
- }
-
- sgr.setObjectName(sgd.getObjectName());
- securityGroupResponse.add(sgr);
- }
- userVmResponse.setSecurityGroupList(new ArrayList(securityGroupResponse));
-
- Set nicResponses = new HashSet();
- for (NicData nd: userVmData.getNics()){
- NicResponse nr = new NicResponse();
- nr.setId(nd.getId());
- nr.setNetworkid(nd.getNetworkid());
- nr.setNetmask(nd.getNetmask());
- nr.setGateway(nd.getGateway());
- nr.setIpaddress(nd.getIpaddress());
- nr.setIsolationUri(nd.getIsolationUri());
- nr.setBroadcastUri(nd.getBroadcastUri());
- nr.setTrafficType(nd.getTrafficType());
- nr.setType(nd.getType());
- nr.setIsDefault(nd.getIsDefault());
- nr.setMacAddress(nd.getMacAddress());
- nr.setObjectName(nd.getObjectName());
- nicResponses.add(nr);
- }
- userVmResponse.setNics(new ArrayList(nicResponses));
-
- return userVmResponse;
- }
-
- public HypervisorCapabilitiesResponse createHypervisorCapabilitiesResponse(HypervisorCapabilities hpvCapabilities){
- HypervisorCapabilitiesResponse hpvCapabilitiesResponse = new HypervisorCapabilitiesResponse();
- hpvCapabilitiesResponse.setId(hpvCapabilities.getId());
- hpvCapabilitiesResponse.setHypervisor(hpvCapabilities.getHypervisorType());
- hpvCapabilitiesResponse.setHypervisorVersion(hpvCapabilities.getHypervisorVersion());
- hpvCapabilitiesResponse.setIsSecurityGroupEnabled(hpvCapabilities.isSecurityGroupEnabled());
- hpvCapabilitiesResponse.setMaxGuestsLimit(hpvCapabilities.getMaxGuestsLimit());
- return hpvCapabilitiesResponse;
- }
-
- private void populateOwner(ControlledEntityResponse response, ControlledEntity object) {
- Account account = ApiDBUtils.findAccountByIdIncludingRemoved(object.getAccountId());
-
- if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
- //find the project
- Project project = ApiDBUtils.findProjectByProjectAccountId(account.getId());
- response.setProjectId(project.getId());
- response.setProjectName(project.getName());
- } else {
- response.setAccountName(account.getAccountName());
- }
-
- Domain domain = ApiDBUtils.findDomainById(object.getDomainId());
- if (domain != null) {
- response.setDomainId(domain.getId());
- response.setDomainName(domain.getName());
- }
- }
-
- private void populateAccount(ControlledEntityResponse response, long accountId) {
- Account account = ApiDBUtils.findAccountByIdIncludingRemoved(accountId);
- if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
- //find the project
- Project project = ApiDBUtils.findProjectByProjectAccountId(account.getId());
- response.setProjectId(project.getId());
- response.setProjectName(project.getName());
- } else {
- response.setAccountName(account.getAccountName());
- }
- }
-
- private void populateDomain(ControlledEntityResponse response, long domainId) {
- Domain domain = ApiDBUtils.findDomainById(domainId);
-
- response.setDomainId(domain.getId());
- response.setDomainName(domain.getName());
-
- }
-
- @Override
- public ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount) {
- Account account = ApiDBUtils.findAccountById(projectAccount.getAccountId());
- ProjectAccountResponse projectAccountResponse = new ProjectAccountResponse();
-
- long projectId = projectAccount.getProjectId();
- projectAccountResponse.setProjectId(projectId);
- projectAccountResponse.setProjectName(ApiDBUtils.findProjectById(projectId).getName());
-
- projectAccountResponse.setId(account.getId());
- projectAccountResponse.setAccountName(account.getAccountName());
- projectAccountResponse.setAccountType(account.getType());
- projectAccountResponse.setRole(projectAccount.getAccountRole().toString());
- populateDomain(projectAccountResponse, account.getDomainId());
-
- // add all the users for an account as part of the response obj
- List usersForAccount = ApiDBUtils.listUsersByAccount(account.getAccountId());
- List userResponseList = new ArrayList();
- for (UserVO user : usersForAccount) {
- UserResponse userResponse = createUserResponse(user);
- userResponseList.add(userResponse);
- }
-
- projectAccountResponse.setUsers(userResponseList);
- projectAccountResponse.setObjectName("projectaccount");
-
- return projectAccountResponse;
- }
-
- @Override
- public ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite) {
- ProjectInvitationResponse response = new ProjectInvitationResponse();
- response.setId(invite.getId());
- response.setProjectId(invite.getProjectId());
- response.setProjectName(ApiDBUtils.findProjectById(invite.getProjectId()).getName());
- response.setInvitationState(invite.getState().toString());
-
- if (invite.getAccountId() != null) {
- Account account = ApiDBUtils.findAccountById(invite.getAccountId());
- response.setAccountName(account.getAccountName());
-
- } else {
- response.setEmail(invite.getEmail());
- }
-
- populateDomain(response, invite.getDomainId());
-
- response.setObjectName("projectinvitation");
- return response;
- }
-
- @Override
- public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm){
- SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse();
- vmResponse.setId(vm.getId());
- vmResponse.setSystemVmType(vm.getType().toString().toLowerCase());
- vmResponse.setName(vm.getHostName());
- if (vm.getHostId() != null) {
- vmResponse.setHostId(vm.getHostId());
- }
- if (vm.getState() != null) {
- vmResponse.setState(vm.getState().toString());
- }
- if (vm.getType() == Type.DomainRouter) {
- VirtualRouter router = (VirtualRouter)vm;
- if(router.getRole() != null){
- vmResponse.setRole(router.getRole().toString());
- }
- }
- vmResponse.setObjectName("systemvminstance");
- return vmResponse;
- }
-}
+/**
+ * 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;
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.acl.ControlledEntity;
+import com.cloud.api.commands.QueryAsyncJobResultCmd;
+import com.cloud.api.response.AccountResponse;
+import com.cloud.api.response.ApiResponseSerializer;
+import com.cloud.api.response.AsyncJobResponse;
+import com.cloud.api.response.CapabilityResponse;
+import com.cloud.api.response.CapacityResponse;
+import com.cloud.api.response.ClusterResponse;
+import com.cloud.api.response.ConfigurationResponse;
+import com.cloud.api.response.ControlledEntityResponse;
+import com.cloud.api.response.CreateCmdResponse;
+import com.cloud.api.response.DiskOfferingResponse;
+import com.cloud.api.response.DomainResponse;
+import com.cloud.api.response.DomainRouterResponse;
+import com.cloud.api.response.EgressRuleResponse;
+import com.cloud.api.response.EventResponse;
+import com.cloud.api.response.ExtractResponse;
+import com.cloud.api.response.FirewallResponse;
+import com.cloud.api.response.FirewallRuleResponse;
+import com.cloud.api.response.HostResponse;
+import com.cloud.api.response.HypervisorCapabilitiesResponse;
+import com.cloud.api.response.IPAddressResponse;
+import com.cloud.api.response.IngressRuleResponse;
+import com.cloud.api.response.IngressRuleResultObject;
+import com.cloud.api.response.InstanceGroupResponse;
+import com.cloud.api.response.IpForwardingRuleResponse;
+import com.cloud.api.response.ListResponse;
+import com.cloud.api.response.LoadBalancerResponse;
+import com.cloud.api.response.NetworkOfferingResponse;
+import com.cloud.api.response.NetworkResponse;
+import com.cloud.api.response.NicResponse;
+import com.cloud.api.response.PodResponse;
+import com.cloud.api.response.ProjectAccountResponse;
+import com.cloud.api.response.ProjectInvitationResponse;
+import com.cloud.api.response.ProjectResponse;
+import com.cloud.api.response.RemoteAccessVpnResponse;
+import com.cloud.api.response.ResourceCountResponse;
+import com.cloud.api.response.ResourceLimitResponse;
+import com.cloud.api.response.SecurityGroupResponse;
+import com.cloud.api.response.SecurityGroupResultObject;
+import com.cloud.api.response.ServiceOfferingResponse;
+import com.cloud.api.response.ServiceResponse;
+import com.cloud.api.response.SnapshotPolicyResponse;
+import com.cloud.api.response.SnapshotResponse;
+import com.cloud.api.response.StoragePoolResponse;
+import com.cloud.api.response.SwiftResponse;
+import com.cloud.api.response.SystemVmInstanceResponse;
+import com.cloud.api.response.SystemVmResponse;
+import com.cloud.api.response.TemplatePermissionsResponse;
+import com.cloud.api.response.TemplateResponse;
+import com.cloud.api.response.UserResponse;
+import com.cloud.api.response.UserVmResponse;
+import com.cloud.api.response.VlanIpRangeResponse;
+import com.cloud.api.response.VolumeResponse;
+import com.cloud.api.response.VpnUsersResponse;
+import com.cloud.api.response.ZoneResponse;
+import com.cloud.async.AsyncJob;
+import com.cloud.async.AsyncJobResult;
+import com.cloud.capacity.Capacity;
+import com.cloud.capacity.CapacityVO;
+import com.cloud.capacity.dao.CapacityDaoImpl.SummedCapacity;
+import com.cloud.configuration.Configuration;
+import com.cloud.configuration.Resource.ResourceOwnerType;
+import com.cloud.configuration.Resource.ResourceType;
+import com.cloud.configuration.ResourceCount;
+import com.cloud.configuration.ResourceLimit;
+import com.cloud.dc.ClusterVO;
+import com.cloud.dc.DataCenter;
+import com.cloud.dc.DataCenter.NetworkType;
+import com.cloud.dc.DataCenterVO;
+import com.cloud.dc.HostPodVO;
+import com.cloud.dc.Pod;
+import com.cloud.dc.Vlan;
+import com.cloud.dc.Vlan.VlanType;
+import com.cloud.dc.VlanVO;
+import com.cloud.domain.Domain;
+import com.cloud.event.Event;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.host.Host;
+import com.cloud.host.HostStats;
+import com.cloud.host.HostVO;
+import com.cloud.hypervisor.HypervisorCapabilities;
+import com.cloud.network.IPAddressVO;
+import com.cloud.network.IpAddress;
+import com.cloud.network.Network;
+import com.cloud.network.Network.Capability;
+import com.cloud.network.Network.Service;
+import com.cloud.network.NetworkProfile;
+import com.cloud.network.Networks.TrafficType;
+import com.cloud.network.RemoteAccessVpn;
+import com.cloud.network.VpnUser;
+import com.cloud.network.router.VirtualRouter;
+import com.cloud.network.rules.FirewallRule;
+import com.cloud.network.rules.LoadBalancer;
+import com.cloud.network.rules.PortForwardingRule;
+import com.cloud.network.rules.StaticNatRule;
+import com.cloud.network.security.EgressRule;
+import com.cloud.network.security.IngressRule;
+import com.cloud.network.security.SecurityGroup;
+import com.cloud.network.security.SecurityGroupRules;
+import com.cloud.offering.DiskOffering;
+import com.cloud.offering.NetworkOffering;
+import com.cloud.offering.ServiceOffering;
+import com.cloud.org.Cluster;
+import com.cloud.projects.Project;
+import com.cloud.projects.ProjectAccount;
+import com.cloud.projects.ProjectInvitation;
+import com.cloud.server.Criteria;
+import com.cloud.storage.DiskOfferingVO;
+import com.cloud.storage.GuestOS;
+import com.cloud.storage.GuestOSCategoryVO;
+import com.cloud.storage.Snapshot;
+import com.cloud.storage.Storage.ImageFormat;
+import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.storage.Storage.TemplateType;
+import com.cloud.storage.StoragePool;
+import com.cloud.storage.StoragePoolVO;
+import com.cloud.storage.StorageStats;
+import com.cloud.storage.Swift;
+import com.cloud.storage.UploadVO;
+import com.cloud.storage.VMTemplateHostVO;
+import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
+import com.cloud.storage.VMTemplateSwiftVO;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.Volume;
+import com.cloud.storage.VolumeVO;
+import com.cloud.storage.snapshot.SnapshotPolicy;
+import com.cloud.template.VirtualMachineTemplate;
+import com.cloud.test.PodZoneConfig;
+import com.cloud.user.Account;
+import com.cloud.user.User;
+import com.cloud.user.UserAccount;
+import com.cloud.user.UserContext;
+import com.cloud.user.UserStatisticsVO;
+import com.cloud.user.UserVO;
+import com.cloud.uservm.UserVm;
+import com.cloud.utils.StringUtils;
+import com.cloud.utils.net.NetUtils;
+import com.cloud.vm.ConsoleProxyVO;
+import com.cloud.vm.InstanceGroup;
+import com.cloud.vm.NicProfile;
+import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachine.State;
+import com.cloud.vm.VirtualMachine.Type;
+import com.cloud.vm.VmStats;
+import com.cloud.vm.dao.UserVmData;
+import com.cloud.vm.dao.UserVmData.NicData;
+import com.cloud.vm.dao.UserVmData.SecurityGroupData;
+
+public class ApiResponseHelper implements ResponseGenerator {
+
+ public final Logger s_logger = Logger.getLogger(ApiResponseHelper.class);
+ private static final DecimalFormat s_percentFormat = new DecimalFormat("##.##");
+
+ @Override
+ public UserResponse createUserResponse(User user) {
+ UserResponse userResponse = new UserResponse();
+ Account account = ApiDBUtils.findAccountById(user.getAccountId());
+ userResponse.setAccountName(account.getAccountName());
+ userResponse.setAccountType(account.getType());
+ userResponse.setCreated(user.getCreated());
+ userResponse.setDomainId(account.getDomainId());
+ userResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName());
+ userResponse.setEmail(user.getEmail());
+ userResponse.setFirstname(user.getFirstname());
+ userResponse.setId(user.getId());
+ userResponse.setLastname(user.getLastname());
+ userResponse.setState(user.getState().toString());
+ userResponse.setTimezone(user.getTimezone());
+ userResponse.setUsername(user.getUsername());
+ userResponse.setApiKey(user.getApiKey());
+ userResponse.setSecretKey(user.getSecretKey());
+ userResponse.setObjectName("user");
+
+ return userResponse;
+ }
+
+ // this method is used for response generation via createAccount (which creates an account + user)
+ @Override
+ public AccountResponse createUserAccountResponse(UserAccount user) {
+ return createAccountResponse(ApiDBUtils.findAccountById(user.getAccountId()));
+ }
+
+ @Override
+ public AccountResponse createAccountResponse(Account account) {
+ boolean accountIsAdmin = (account.getType() == Account.ACCOUNT_TYPE_ADMIN);
+ AccountResponse accountResponse = new AccountResponse();
+ accountResponse.setId(account.getId());
+ accountResponse.setName(account.getAccountName());
+ accountResponse.setAccountType(account.getType());
+ accountResponse.setDomainId(account.getDomainId());
+ accountResponse.setDomainName(ApiDBUtils.findDomainById(account.getDomainId()).getName());
+ accountResponse.setState(account.getState().toString());
+ accountResponse.setNetworkDomain(account.getNetworkDomain());
+
+ // get network stat
+ List stats = ApiDBUtils.listUserStatsBy(account.getId());
+ if (stats == null) {
+ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error searching for user stats");
+ }
+
+ Long bytesSent = 0L;
+ Long bytesReceived = 0L;
+ for (UserStatisticsVO stat : stats) {
+ Long rx = stat.getNetBytesReceived() + stat.getCurrentBytesReceived();
+ Long tx = stat.getNetBytesSent() + stat.getCurrentBytesSent();
+ bytesReceived = bytesReceived + Long.valueOf(rx);
+ bytesSent = bytesSent + Long.valueOf(tx);
+ }
+ accountResponse.setBytesReceived(bytesReceived);
+ accountResponse.setBytesSent(bytesSent);
+
+ // Get resource limits and counts
+
+ Long vmLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.user_vm, account.getId());
+ String vmLimitDisplay = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit);
+ Long vmTotal = ApiDBUtils.getResourceCount(ResourceType.user_vm, account.getId());
+ String vmAvail = (accountIsAdmin || vmLimit == -1) ? "Unlimited" : String.valueOf(vmLimit - vmTotal);
+ accountResponse.setVmLimit(vmLimitDisplay);
+ accountResponse.setVmTotal(vmTotal);
+ accountResponse.setVmAvailable(vmAvail);
+
+ Long ipLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.public_ip, account.getId());
+ String ipLimitDisplay = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit);
+ Long ipTotal = ApiDBUtils.getResourceCount(ResourceType.public_ip, account.getId());
+ String ipAvail = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit - ipTotal);
+ accountResponse.setIpLimit(ipLimitDisplay);
+ accountResponse.setIpTotal(ipTotal);
+ accountResponse.setIpAvailable(ipAvail);
+
+ Long volumeLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.volume, account.getId());
+ String volumeLimitDisplay = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit);
+ Long volumeTotal = ApiDBUtils.getResourceCount(ResourceType.volume, account.getId());
+ String volumeAvail = (accountIsAdmin || volumeLimit == -1) ? "Unlimited" : String.valueOf(volumeLimit - volumeTotal);
+ accountResponse.setVolumeLimit(volumeLimitDisplay);
+ accountResponse.setVolumeTotal(volumeTotal);
+ accountResponse.setVolumeAvailable(volumeAvail);
+
+ Long snapshotLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.snapshot, account.getId());
+ String snapshotLimitDisplay = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit);
+ Long snapshotTotal = ApiDBUtils.getResourceCount(ResourceType.snapshot, account.getId());
+ String snapshotAvail = (accountIsAdmin || snapshotLimit == -1) ? "Unlimited" : String.valueOf(snapshotLimit - snapshotTotal);
+ accountResponse.setSnapshotLimit(snapshotLimitDisplay);
+ accountResponse.setSnapshotTotal(snapshotTotal);
+ accountResponse.setSnapshotAvailable(snapshotAvail);
+
+ Long templateLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.template, account.getId());
+ String templateLimitDisplay = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit);
+ Long templateTotal = ApiDBUtils.getResourceCount(ResourceType.template, account.getId());
+ String templateAvail = (accountIsAdmin || templateLimit == -1) ? "Unlimited" : String.valueOf(templateLimit - templateTotal);
+ accountResponse.setTemplateLimit(templateLimitDisplay);
+ accountResponse.setTemplateTotal(templateTotal);
+ accountResponse.setTemplateAvailable(templateAvail);
+
+ // Get stopped and running VMs
+ int vmStopped = 0;
+ int vmRunning = 0;
+
+ Long[] accountIds = new Long[1];
+ accountIds[0] = account.getId();
+
+ Criteria c1 = new Criteria();
+ c1.addCriteria(Criteria.ACCOUNTID, accountIds);
+ List extends UserVm> virtualMachines = ApiDBUtils.searchForUserVMs(c1);
+
+ // get Running/Stopped VMs
+ for (Iterator extends UserVm> iter = virtualMachines.iterator(); iter.hasNext();) {
+ // count how many stopped/running vms we have
+ UserVm vm = iter.next();
+
+ if (vm.getState() == State.Stopped) {
+ vmStopped++;
+ } else if (vm.getState() == State.Running) {
+ vmRunning++;
+ }
+ }
+
+ accountResponse.setVmStopped(vmStopped);
+ accountResponse.setVmRunning(vmRunning);
+ accountResponse.setObjectName("account");
+
+ // adding all the users for an account as part of the response obj
+ List usersForAccount = ApiDBUtils.listUsersByAccount(account.getAccountId());
+ List userResponseList = new ArrayList();
+ for (UserVO user : usersForAccount) {
+ UserResponse userResponse = createUserResponse(user);
+ userResponseList.add(userResponse);
+ }
+
+ accountResponse.setUsers(userResponseList);
+ return accountResponse;
+ }
+
+
+ @Override
+ public UserResponse createUserResponse(UserAccount user) {
+ UserResponse userResponse = new UserResponse();
+ userResponse.setAccountName(user.getAccountName());
+ userResponse.setAccountType(user.getType());
+ userResponse.setCreated(user.getCreated());
+ userResponse.setDomainId(user.getDomainId());
+ userResponse.setDomainName(ApiDBUtils.findDomainById(user.getDomainId()).getName());
+ userResponse.setEmail(user.getEmail());
+ userResponse.setFirstname(user.getFirstname());
+ userResponse.setId(user.getId());
+ userResponse.setLastname(user.getLastname());
+ userResponse.setState(user.getState());
+ userResponse.setTimezone(user.getTimezone());
+ userResponse.setUsername(user.getUsername());
+ userResponse.setApiKey(user.getApiKey());
+ userResponse.setSecretKey(user.getSecretKey());
+ userResponse.setObjectName("user");
+
+ return userResponse;
+ }
+
+ @Override
+ public DomainResponse createDomainResponse(Domain domain) {
+ DomainResponse domainResponse = new DomainResponse();
+ domainResponse.setDomainName(domain.getName());
+ domainResponse.setId(domain.getId());
+ domainResponse.setLevel(domain.getLevel());
+ domainResponse.setNetworkDomain(domain.getNetworkDomain());
+ domainResponse.setParentDomainId(domain.getParent());
+ if (domain.getParent() != null) {
+ domainResponse.setParentDomainName(ApiDBUtils.findDomainById(domain.getParent()).getName());
+ }
+ if (domain.getChildCount() > 0) {
+ domainResponse.setHasChild(true);
+ }
+ domainResponse.setObjectName("domain");
+ return domainResponse;
+ }
+
+ @Override
+ public DiskOfferingResponse createDiskOfferingResponse(DiskOffering offering) {
+ DiskOfferingResponse diskOfferingResponse = new DiskOfferingResponse();
+ diskOfferingResponse.setId(offering.getId());
+ diskOfferingResponse.setName(offering.getName());
+ diskOfferingResponse.setDisplayText(offering.getDisplayText());
+ diskOfferingResponse.setCreated(offering.getCreated());
+ diskOfferingResponse.setDiskSize(offering.getDiskSize() / (1024 * 1024 * 1024));
+ if (offering.getDomainId() != null) {
+ diskOfferingResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName());
+ diskOfferingResponse.setDomainId(offering.getDomainId());
+ }
+ diskOfferingResponse.setTags(offering.getTags());
+ diskOfferingResponse.setCustomized(offering.isCustomized());
+ diskOfferingResponse.setObjectName("diskoffering");
+ return diskOfferingResponse;
+ }
+
+ @Override
+ public ResourceLimitResponse createResourceLimitResponse(ResourceLimit limit) {
+ ResourceLimitResponse resourceLimitResponse = new ResourceLimitResponse();
+ if (limit.getResourceOwnerType() == ResourceOwnerType.Domain) {
+ populateDomain(resourceLimitResponse, limit.getOwnerId());
+ } else if (limit.getResourceOwnerType() == ResourceOwnerType.Account) {
+ Account accountTemp = ApiDBUtils.findAccountById(limit.getOwnerId());
+ populateAccount(resourceLimitResponse, limit.getOwnerId());
+ populateDomain(resourceLimitResponse, accountTemp.getDomainId());
+ }
+ resourceLimitResponse.setResourceType(Integer.valueOf(limit.getType().getOrdinal()).toString());
+ resourceLimitResponse.setMax(limit.getMax());
+ resourceLimitResponse.setObjectName("resourcelimit");
+
+ return resourceLimitResponse;
+ }
+
+ @Override
+ public ResourceCountResponse createResourceCountResponse(ResourceCount resourceCount) {
+ ResourceCountResponse resourceCountResponse = new ResourceCountResponse();
+
+ if (resourceCount.getResourceOwnerType() == ResourceOwnerType.Account) {
+ Account accountTemp = ApiDBUtils.findAccountById(resourceCount.getOwnerId());
+ if (accountTemp != null) {
+ populateAccount(resourceCountResponse, accountTemp.getId());
+ populateDomain(resourceCountResponse, accountTemp.getDomainId());
+ }
+ } else if (resourceCount.getResourceOwnerType() == ResourceOwnerType.Domain) {
+ populateDomain(resourceCountResponse, resourceCount.getOwnerId());
+ }
+
+ resourceCountResponse.setResourceType(Integer.valueOf(resourceCount.getType().getOrdinal()).toString());
+ resourceCountResponse.setResourceCount(resourceCount.getCount());
+ resourceCountResponse.setObjectName("resourcecount");
+ return resourceCountResponse;
+ }
+
+ @Override
+ public ServiceOfferingResponse createServiceOfferingResponse(ServiceOffering offering) {
+ ServiceOfferingResponse offeringResponse = new ServiceOfferingResponse();
+ offeringResponse.setId(offering.getId());
+ offeringResponse.setName(offering.getName());
+ offeringResponse.setIsSystemOffering(offering.getSystemUse());
+ offeringResponse.setDefaultUse(offering.getDefaultUse());
+ offeringResponse.setSystemVmType(offering.getSystemVmType());
+ offeringResponse.setDisplayText(offering.getDisplayText());
+ offeringResponse.setCpuNumber(offering.getCpu());
+ offeringResponse.setCpuSpeed(offering.getSpeed());
+ offeringResponse.setMemory(offering.getRamSize());
+ offeringResponse.setCreated(offering.getCreated());
+ offeringResponse.setStorageType(offering.getUseLocalStorage() ? ServiceOffering.StorageType.local.toString() : ServiceOffering.StorageType.shared.toString());
+ offeringResponse.setOfferHa(offering.getOfferHA());
+ offeringResponse.setLimitCpuUse(offering.getLimitCpuUse());
+ offeringResponse.setTags(offering.getTags());
+ if (offering.getDomainId() != null) {
+ offeringResponse.setDomain(ApiDBUtils.findDomainById(offering.getDomainId()).getName());
+ offeringResponse.setDomainId(offering.getDomainId());
+ }
+ offeringResponse.setNetworkRate(offering.getRateMbps());
+ offeringResponse.setHostTag(offering.getHostTag());
+ offeringResponse.setObjectName("serviceoffering");
+
+ return offeringResponse;
+ }
+
+ @Override
+ public ConfigurationResponse createConfigurationResponse(Configuration cfg) {
+ ConfigurationResponse cfgResponse = new ConfigurationResponse();
+ cfgResponse.setCategory(cfg.getCategory());
+ cfgResponse.setDescription(cfg.getDescription());
+ cfgResponse.setName(cfg.getName());
+ cfgResponse.setValue(cfg.getValue());
+ cfgResponse.setObjectName("configuration");
+
+ return cfgResponse;
+ }
+
+ @Override
+ public SnapshotResponse createSnapshotResponse(Snapshot snapshot) {
+ SnapshotResponse snapshotResponse = new SnapshotResponse();
+ snapshotResponse.setId(snapshot.getId());
+
+ populateOwner(snapshotResponse, snapshot);
+
+ VolumeVO volume = findVolumeById(snapshot.getVolumeId());
+ String snapshotTypeStr = snapshot.getType().name();
+ snapshotResponse.setSnapshotType(snapshotTypeStr);
+ snapshotResponse.setVolumeId(snapshot.getVolumeId());
+ if (volume != null) {
+ snapshotResponse.setVolumeName(volume.getName());
+ snapshotResponse.setVolumeType(volume.getVolumeType().name());
+ }
+ snapshotResponse.setCreated(snapshot.getCreated());
+ snapshotResponse.setName(snapshot.getName());
+ snapshotResponse.setIntervalType(ApiDBUtils.getSnapshotIntervalTypes(snapshot.getId()));
+ snapshotResponse.setState(snapshot.getStatus());
+ snapshotResponse.setObjectName("snapshot");
+ return snapshotResponse;
+ }
+
+ @Override
+ public SnapshotPolicyResponse createSnapshotPolicyResponse(SnapshotPolicy policy) {
+ SnapshotPolicyResponse policyResponse = new SnapshotPolicyResponse();
+ policyResponse.setId(policy.getId());
+ policyResponse.setVolumeId(policy.getVolumeId());
+ policyResponse.setSchedule(policy.getSchedule());
+ policyResponse.setIntervalType(policy.getInterval());
+ policyResponse.setMaxSnaps(policy.getMaxSnaps());
+ policyResponse.setTimezone(policy.getTimezone());
+ policyResponse.setObjectName("snapshotpolicy");
+
+ return policyResponse;
+ }
+
+ @Override
+ public HostResponse createHostResponse(Host host) {
+ HostResponse hostResponse = new HostResponse();
+ hostResponse.setId(host.getId());
+ hostResponse.setCapabilities(host.getCapabilities());
+ hostResponse.setClusterId(host.getClusterId());
+ hostResponse.setCpuNumber(host.getCpus());
+ hostResponse.setZoneId(host.getDataCenterId());
+ hostResponse.setDisconnectedOn(host.getDisconnectedOn());
+ hostResponse.setHypervisor(host.getHypervisorType());
+ hostResponse.setHostType(host.getType());
+ hostResponse.setLastPinged(new Date(host.getLastPinged()));
+ hostResponse.setManagementServerId(host.getManagementServerId());
+ hostResponse.setName(host.getName());
+ hostResponse.setPodId(host.getPodId());
+ hostResponse.setRemoved(host.getRemoved());
+ hostResponse.setCpuSpeed(host.getSpeed());
+ hostResponse.setState(host.getStatus());
+ hostResponse.setIpAddress(host.getPrivateIpAddress());
+ hostResponse.setVersion(host.getVersion());
+ hostResponse.setCreated(host.getCreated());
+
+ GuestOSCategoryVO guestOSCategory = ApiDBUtils.getHostGuestOSCategory(host.getId());
+ if (guestOSCategory != null) {
+ hostResponse.setOsCategoryId(guestOSCategory.getId());
+ hostResponse.setOsCategoryName(guestOSCategory.getName());
+ }
+ hostResponse.setZoneName(ApiDBUtils.findZoneById(host.getDataCenterId()).getName());
+
+ if (host.getPodId() != null) {
+ HostPodVO pod = ApiDBUtils.findPodById(host.getPodId());
+ if (pod != null) {
+ hostResponse.setPodName(pod.getName());
+ }
+ }
+
+ DecimalFormat decimalFormat = new DecimalFormat("#.##");
+ if (host.getType() == Host.Type.Routing) {
+ //set allocated capacities
+ Long mem = ApiDBUtils.getMemoryOrCpuCapacitybyHost(host.getId(),Capacity.CAPACITY_TYPE_MEMORY);
+ Long cpu = ApiDBUtils.getMemoryOrCpuCapacitybyHost(host.getId(),Capacity.CAPACITY_TYPE_CPU);
+
+ hostResponse.setMemoryAllocated(mem);
+ hostResponse.setMemoryTotal(host.getTotalMemory());
+ hostResponse.setHostTags(ApiDBUtils.getHostTags(host.getId()));
+ hostResponse.setHypervisorVersion(host.getHypervisorVersion());
+
+ String cpuAlloc = decimalFormat.format(((float) cpu / (float) (host.getCpus() * host.getSpeed())) * 100f) + "%";
+ hostResponse.setCpuAllocated(cpuAlloc);
+ String cpuWithOverprovisioning = new Float(host.getCpus() * host.getSpeed() * ApiDBUtils.getCpuOverprovisioningFactor()).toString();
+ hostResponse.setCpuWithOverprovisioning(cpuWithOverprovisioning);
+
+ // set CPU/RAM/Network stats
+ String cpuUsed = null;
+ HostStats hostStats = ApiDBUtils.getHostStatistics(host.getId());
+ if (hostStats != null) {
+ float cpuUtil = (float) hostStats.getCpuUtilization();
+ cpuUsed = decimalFormat.format(cpuUtil) + "%";
+ hostResponse.setCpuUsed(cpuUsed);
+ hostResponse.setMemoryUsed( (new Double(hostStats.getUsedMemory())).longValue());
+ hostResponse.setNetworkKbsRead((new Double(hostStats.getNetworkReadKBs())).longValue());
+ hostResponse.setNetworkKbsWrite((new Double(hostStats.getNetworkWriteKBs())).longValue());
+
+ }
+
+ }else if (host.getType() == Host.Type.SecondaryStorage){
+ StorageStats secStorageStats = ApiDBUtils.getSecondaryStorageStatistics(host.getId());
+ if (secStorageStats != null){
+ hostResponse.setDiskSizeTotal(secStorageStats.getCapacityBytes());
+ hostResponse.setDiskSizeAllocated(secStorageStats.getByteUsed());
+ }
+ }
+
+ if (host.getClusterId() != null) {
+ ClusterVO cluster = ApiDBUtils.findClusterById(host.getClusterId());
+ hostResponse.setClusterName(cluster.getName());
+ hostResponse.setClusterType(cluster.getClusterType().toString());
+ }
+
+ hostResponse.setLocalStorageActive(ApiDBUtils.isLocalStorageActiveOnHost(host));
+
+ Set possibleEvents = host.getStatus().getPossibleEvents();
+ if ((possibleEvents != null) && !possibleEvents.isEmpty()) {
+ String events = "";
+ Iterator iter = possibleEvents.iterator();
+ while (iter.hasNext()) {
+ com.cloud.host.Status.Event event = iter.next();
+ events += event.toString();
+ if (iter.hasNext()) {
+ events += "; ";
+ }
+ }
+ hostResponse.setEvents(events);
+ }
+
+ hostResponse.setAllocationState(host.getResourceState().toString());
+
+ hostResponse.setObjectName("host");
+
+ return hostResponse;
+ }
+
+ @Override
+ public SwiftResponse createSwiftResponse(Swift swift) {
+ SwiftResponse swiftResponse = new SwiftResponse();
+ swiftResponse.setId(swift.getId());
+ swiftResponse.setUrl(swift.getUrl());
+ swiftResponse.setObjectName("Swift");
+ return swiftResponse;
+ }
+
+ @Override
+ public VlanIpRangeResponse createVlanIpRangeResponse(Vlan vlan) {
+ Long podId = ApiDBUtils.getPodIdForVlan(vlan.getId());
+
+ VlanIpRangeResponse vlanResponse = new VlanIpRangeResponse();
+ vlanResponse.setId(vlan.getId());
+ vlanResponse.setForVirtualNetwork(vlan.getVlanType().equals(VlanType.VirtualNetwork));
+ vlanResponse.setVlan(vlan.getVlanTag());
+ vlanResponse.setZoneId(vlan.getDataCenterId());
+
+ if (podId != null) {
+ HostPodVO pod = ApiDBUtils.findPodById(podId);
+ vlanResponse.setPodId(podId);
+ if (pod != null) {
+ vlanResponse.setPodName(pod.getName());
+ }
+ }
+
+ vlanResponse.setGateway(vlan.getVlanGateway());
+ vlanResponse.setNetmask(vlan.getVlanNetmask());
+
+ // get start ip and end ip of corresponding vlan
+ String ipRange = vlan.getIpRange();
+ String[] range = ipRange.split("-");
+ vlanResponse.setStartIp(range[0]);
+ vlanResponse.setEndIp(range[1]);
+
+ vlanResponse.setNetworkId(vlan.getNetworkId());
+ Account owner = ApiDBUtils.getVlanAccount(vlan.getId());
+ if (owner != null) {
+ populateAccount(vlanResponse, owner.getId());
+ populateDomain(vlanResponse, owner.getDomainId());
+ }
+
+ vlanResponse.setObjectName("vlan");
+ return vlanResponse;
+ }
+
+ @Override
+ public IPAddressResponse createIPAddressResponse(IpAddress ipAddress) {
+ VlanVO vlan = ApiDBUtils.findVlanById(ipAddress.getVlanId());
+ boolean forVirtualNetworks = vlan.getVlanType().equals(VlanType.VirtualNetwork);
+ long zoneId = ipAddress.getDataCenterId();
+
+ IPAddressResponse ipResponse = new IPAddressResponse();
+ ipResponse.setId(ipAddress.getId());
+ ipResponse.setIpAddress(ipAddress.getAddress().toString());
+ if (ipAddress.getAllocatedTime() != null) {
+ ipResponse.setAllocated(ipAddress.getAllocatedTime());
+ }
+ ipResponse.setZoneId(zoneId);
+ ipResponse.setZoneName(ApiDBUtils.findZoneById(ipAddress.getDataCenterId()).getName());
+ ipResponse.setSourceNat(ipAddress.isSourceNat());
+
+ // get account information
+ populateOwner(ipResponse, ipAddress);
+
+ ipResponse.setForVirtualNetwork(forVirtualNetworks);
+ ipResponse.setStaticNat(ipAddress.isOneToOneNat());
+
+ if (ipAddress.getAssociatedWithVmId() != null) {
+ UserVm vm = ApiDBUtils.findUserVmById(ipAddress.getAssociatedWithVmId());
+ ipResponse.setVirtualMachineId(vm.getId());
+ ipResponse.setVirtualMachineName(vm.getHostName());
+ ipResponse.setVirtualMachineDisplayName(vm.getDisplayName());
+ }
+
+ ipResponse.setAssociatedNetworkId(ipAddress.getAssociatedWithNetworkId());
+
+ // Network id the ip is associated withif associated networkId is null, try to get this information from vlan
+ Long associatedNetworkId = ipAddress.getAssociatedWithNetworkId();
+ Long vlanNetworkId = ApiDBUtils.getVlanNetworkId(ipAddress.getVlanId());
+ if (associatedNetworkId == null) {
+ associatedNetworkId = vlanNetworkId;
+ }
+
+ ipResponse.setAssociatedNetworkId(associatedNetworkId);
+
+ // Network id the ip belongs to
+ Long networkId;
+ if (vlanNetworkId != null) {
+ networkId = vlanNetworkId;
+ } else {
+ networkId = ApiDBUtils.getPublicNetworkIdByZone(zoneId);
+ }
+
+ ipResponse.setNetworkId(networkId);
+ ipResponse.setState(ipAddress.getState().toString());
+
+ // show this info to admin only
+ Account account = UserContext.current().getCaller();
+ if ((account == null) || account.getType() == Account.ACCOUNT_TYPE_ADMIN) {
+ ipResponse.setVlanId(ipAddress.getVlanId());
+ ipResponse.setVlanName(ApiDBUtils.findVlanById(ipAddress.getVlanId()).getVlanTag());
+ }
+ ipResponse.setObjectName("ipaddress");
+ return ipResponse;
+ }
+
+ @Override
+ public LoadBalancerResponse createLoadBalancerResponse(LoadBalancer loadBalancer) {
+ LoadBalancerResponse lbResponse = new LoadBalancerResponse();
+ lbResponse.setId(loadBalancer.getId());
+ lbResponse.setName(loadBalancer.getName());
+ lbResponse.setDescription(loadBalancer.getDescription());
+ List cidrs = ApiDBUtils.findFirewallSourceCidrs(loadBalancer.getId());
+ lbResponse.setCidrList(StringUtils.join(cidrs, ","));
+
+ IPAddressVO publicIp = ApiDBUtils.findIpAddressById(loadBalancer.getSourceIpAddressId());
+ lbResponse.setPublicIpId(publicIp.getId());
+ lbResponse.setPublicIp(publicIp.getAddress().addr());
+ lbResponse.setPublicPort(Integer.toString(loadBalancer.getSourcePortStart()));
+ lbResponse.setPrivatePort(Integer.toString(loadBalancer.getDefaultPortStart()));
+ lbResponse.setAlgorithm(loadBalancer.getAlgorithm());
+ FirewallRule.State state = loadBalancer.getState();
+ String stateToSet = state.toString();
+ if (state.equals(FirewallRule.State.Revoke)) {
+ stateToSet = "Deleting";
+ }
+ lbResponse.setState(stateToSet);
+ populateOwner(lbResponse, loadBalancer);
+ lbResponse.setZoneId(publicIp.getDataCenterId());
+
+ lbResponse.setObjectName("loadbalancer");
+ return lbResponse;
+ }
+
+ @Override
+ public PodResponse createPodResponse(Pod pod, Boolean showCapacities) {
+ String[] ipRange = new String[2];
+ if (pod.getDescription() != null && pod.getDescription().length() > 0) {
+ ipRange = pod.getDescription().split("-");
+ } else {
+ ipRange[0] = pod.getDescription();
+ }
+
+ PodResponse podResponse = new PodResponse();
+ podResponse.setId(pod.getId());
+ podResponse.setName(pod.getName());
+ podResponse.setZoneId(pod.getDataCenterId());
+ podResponse.setZoneName(PodZoneConfig.getZoneName(pod.getDataCenterId()));
+ podResponse.setNetmask(NetUtils.getCidrNetmask(pod.getCidrSize()));
+ podResponse.setStartIp(ipRange[0]);
+ podResponse.setEndIp(((ipRange.length > 1) && (ipRange[1] != null)) ? ipRange[1] : "");
+ podResponse.setGateway(pod.getGateway());
+ podResponse.setAllocationState(pod.getAllocationState().toString());
+ if (showCapacities != null && showCapacities){
+ List capacities = ApiDBUtils.getCapacityByClusterPodZone(null,pod.getId(),null);
+ Set capacityResponses = new HashSet();
+ float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
+
+ for (SummedCapacity capacity : capacities){
+ CapacityResponse capacityResponse = new CapacityResponse();
+ capacityResponse.setCapacityType(capacity.getCapacityType());
+ capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
+ if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU){
+ capacityResponse.setCapacityTotal(new Long((long)(capacity.getTotalCapacity()*cpuOverprovisioningFactor)));
+ }else if(capacity.getCapacityType() == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED){
+ List c = ApiDBUtils.findNonSharedStorageForClusterPodZone(null, pod.getId() ,null);
+ capacityResponse.setCapacityTotal(capacity.getTotalCapacity() - c.get(0).getTotalCapacity());
+ capacityResponse.setCapacityUsed(capacity.getUsedCapacity() - c.get(0).getUsedCapacity());
+ }else{
+ capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
+ }
+ if (capacityResponse.getCapacityTotal() != 0) {
+ capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
+ } else {
+ capacityResponse.setPercentUsed(s_percentFormat.format(0L));
+ }
+ capacityResponses.add(capacityResponse);
+ }
+ // Do it for stats as well.
+ capacityResponses.addAll(getStatsCapacityresponse(null, null, pod.getId(), pod.getDataCenterId()));
+ podResponse.setCapacitites(new ArrayList(capacityResponses));
+ }
+ podResponse.setObjectName("pod");
+ return podResponse;
+ }
+
+ @Override
+ public ZoneResponse createZoneResponse(DataCenter dataCenter, Boolean showCapacities) {
+ Account account = UserContext.current().getCaller();
+ ZoneResponse zoneResponse = new ZoneResponse();
+ zoneResponse.setId(dataCenter.getId());
+ zoneResponse.setName(dataCenter.getName());
+ zoneResponse.setSecurityGroupsEnabled(ApiDBUtils.isSecurityGroupEnabledInZone(dataCenter.getId()));
+
+ 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());
+ }
+
+ if (showCapacities != null && showCapacities){
+ List capacities = ApiDBUtils.getCapacityByClusterPodZone(dataCenter.getId(),null,null);
+ Set capacityResponses = new HashSet();
+ float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
+
+ for (SummedCapacity capacity : capacities){
+ CapacityResponse capacityResponse = new CapacityResponse();
+ capacityResponse.setCapacityType(capacity.getCapacityType());
+ capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
+ if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU){
+ capacityResponse.setCapacityTotal(new Long((long)(capacity.getTotalCapacity()*cpuOverprovisioningFactor)));
+ }else if(capacity.getCapacityType() == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED){
+ List c = ApiDBUtils.findNonSharedStorageForClusterPodZone(dataCenter.getId(), null ,null);
+ capacityResponse.setCapacityTotal(capacity.getTotalCapacity() - c.get(0).getTotalCapacity());
+ capacityResponse.setCapacityUsed(capacity.getUsedCapacity() - c.get(0).getUsedCapacity());
+ }else{
+ capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
+ }
+ if (capacityResponse.getCapacityTotal() != 0) {
+ capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
+ } else {
+ capacityResponse.setPercentUsed(s_percentFormat.format(0L));
+ }
+ capacityResponses.add(capacityResponse);
+ }
+ // Do it for stats as well.
+ capacityResponses.addAll(getStatsCapacityresponse(null, null, null, dataCenter.getId()));
+
+ zoneResponse.setCapacitites(new ArrayList(capacityResponses));
+ }
+
+ zoneResponse.setDomain(dataCenter.getDomain());
+ zoneResponse.setDomainId(dataCenter.getDomainId());
+ zoneResponse.setType(dataCenter.getNetworkType().toString());
+ zoneResponse.setAllocationState(dataCenter.getAllocationState().toString());
+ zoneResponse.setZoneToken(dataCenter.getZoneToken());
+ zoneResponse.setDhcpProvider(dataCenter.getDhcpProvider());
+ zoneResponse.setObjectName("zone");
+ return zoneResponse;
+ }
+
+ private List getStatsCapacityresponse(Long poolId, Long clusterId, Long podId, Long zoneId){
+ List capacities = new ArrayList();
+ capacities.add(ApiDBUtils.getStoragePoolUsedStats(poolId, clusterId, podId, zoneId));
+ if(clusterId == null && podId == null){
+ capacities.add(ApiDBUtils.getSecondaryStorageUsedStats(poolId, zoneId));
+ }
+
+ List capacityResponses = new ArrayList();
+ for (CapacityVO capacity : capacities){
+ CapacityResponse capacityResponse = new CapacityResponse();
+ capacityResponse.setCapacityType(capacity.getCapacityType());
+ capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
+ capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
+ if (capacityResponse.getCapacityTotal() != 0) {
+ capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
+ } else {
+ capacityResponse.setPercentUsed(s_percentFormat.format(0L));
+ }
+ capacityResponses.add(capacityResponse);
+ }
+
+ return capacityResponses;
+ }
+
+ @Override
+ public VolumeResponse createVolumeResponse(Volume volume) {
+ VolumeResponse volResponse = new VolumeResponse();
+ volResponse.setId(volume.getId());
+
+ if (volume.getName() != null) {
+ volResponse.setName(volume.getName());
+ } else {
+ volResponse.setName("");
+ }
+
+ volResponse.setZoneId(volume.getDataCenterId());
+ volResponse.setZoneName(ApiDBUtils.findZoneById(volume.getDataCenterId()).getName());
+
+ volResponse.setVolumeType(volume.getVolumeType().toString());
+ volResponse.setDeviceId(volume.getDeviceId());
+
+ Long instanceId = volume.getInstanceId();
+ if (instanceId != null && volume.getState() != Volume.State.Destroy) {
+ VMInstanceVO vm = ApiDBUtils.findVMInstanceById(instanceId);
+ if(vm != null){
+ volResponse.setVirtualMachineId(vm.getId());
+ volResponse.setVirtualMachineName(vm.getHostName());
+ UserVm userVm = ApiDBUtils.findUserVmById(vm.getId());
+ if (userVm != null) {
+ volResponse.setVirtualMachineDisplayName(userVm.getDisplayName());
+ volResponse.setVirtualMachineState(vm.getState().toString());
+ } else {
+ s_logger.error("User Vm with Id: "+instanceId+" does not exist for volume "+volume.getId());
+ }
+ } else {
+ s_logger.error("Vm with Id: "+instanceId+" does not exist for volume "+volume.getId());
+ }
+ }
+
+ // Show the virtual size of the volume
+ volResponse.setSize(volume.getSize());
+
+ volResponse.setCreated(volume.getCreated());
+ volResponse.setState(volume.getState().toString());
+
+ populateOwner(volResponse, volume);
+
+ String storageType;
+ try {
+ if (volume.getPoolId() == null) {
+ if (volume.getState() == Volume.State.Allocated) {
+ /* set it as shared, so the UI can attach it to VM */
+ storageType = "shared";
+ } else {
+ storageType = "unknown";
+ }
+ } else {
+ storageType = ApiDBUtils.volumeIsOnSharedStorage(volume.getId()) ? ServiceOffering.StorageType.shared.toString() : ServiceOffering.StorageType.local.toString();
+ }
+ } 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);
+ if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
+ volResponse.setServiceOfferingId(volume.getDiskOfferingId());
+ } else {
+ volResponse.setDiskOfferingId(volume.getDiskOfferingId());
+ }
+
+ DiskOfferingVO diskOffering = ApiDBUtils.findDiskOfferingById(volume.getDiskOfferingId());
+ if (volume.getVolumeType().equals(Volume.Type.ROOT)) {
+ volResponse.setServiceOfferingName(diskOffering.getName());
+ volResponse.setServiceOfferingDisplayText(diskOffering.getDisplayText());
+ } else {
+ volResponse.setDiskOfferingName(diskOffering.getName());
+ volResponse.setDiskOfferingDisplayText(diskOffering.getDisplayText());
+ }
+
+ Long poolId = volume.getPoolId();
+ String poolName = (poolId == null) ? "none" : ApiDBUtils.findStoragePoolById(poolId).getName();
+ volResponse.setStoragePoolName(poolName);
+ // volResponse.setSourceId(volume.getSourceId());
+ // if (volume.getSourceType() != null) {
+ // volResponse.setSourceType(volume.getSourceType().toString());
+ // }
+ volResponse.setHypervisor(ApiDBUtils.getVolumeHyperType(volume.getId()).toString());
+ volResponse.setAttached(volume.getAttached());
+ volResponse.setDestroyed(volume.getState() == Volume.State.Destroy);
+ VMTemplateVO template = ApiDBUtils.findTemplateById(volume.getTemplateId());
+ boolean isExtractable = template != null && template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM);
+ volResponse.setExtractable(isExtractable);
+ volResponse.setObjectName("volume");
+ return volResponse;
+ }
+
+ @Override
+ public InstanceGroupResponse createInstanceGroupResponse(InstanceGroup group) {
+ InstanceGroupResponse groupResponse = new InstanceGroupResponse();
+ groupResponse.setId(group.getId());
+ groupResponse.setName(group.getName());
+ groupResponse.setCreated(group.getCreated());
+
+ populateOwner(groupResponse, group);
+
+ groupResponse.setObjectName("instancegroup");
+ return groupResponse;
+ }
+
+ @Override
+ public StoragePoolResponse createStoragePoolResponse(StoragePool pool) {
+ StoragePoolResponse poolResponse = new StoragePoolResponse();
+ poolResponse.setId(pool.getId());
+ poolResponse.setName(pool.getName());
+ poolResponse.setState(pool.getStatus());
+ poolResponse.setPath(pool.getPath());
+ poolResponse.setIpAddress(pool.getHostAddress());
+ poolResponse.setZoneId(pool.getDataCenterId());
+ poolResponse.setZoneName(ApiDBUtils.findZoneById(pool.getDataCenterId()).getName());
+ if (pool.getPoolType() != null) {
+ poolResponse.setType(pool.getPoolType().toString());
+ }
+ if (pool.getPodId() != null) {
+ poolResponse.setPodId(pool.getPodId());
+ HostPodVO pod = ApiDBUtils.findPodById(pool.getPodId());
+ if (pod != null) {
+ poolResponse.setPodName(pod.getName());
+ }
+ }
+ if (pool.getCreated() != null) {
+ poolResponse.setCreated(pool.getCreated());
+ }
+
+ StorageStats stats = ApiDBUtils.getStoragePoolStatistics(pool.getId());
+ long allocatedSize = ApiDBUtils.getStorageCapacitybyPool(pool.getId(),Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED);
+ poolResponse.setDiskSizeTotal(pool.getCapacityBytes());
+ poolResponse.setDiskSizeAllocated(allocatedSize);
+
+ if (stats != null) {
+ Long used = stats.getByteUsed();
+ poolResponse.setDiskSizeUsed(used);
+ }
+
+ if (pool.getClusterId() != null) {
+ ClusterVO cluster = ApiDBUtils.findClusterById(pool.getClusterId());
+ poolResponse.setClusterId(cluster.getId());
+ poolResponse.setClusterName(cluster.getName());
+ }
+ poolResponse.setTags(ApiDBUtils.getStoragePoolTags(pool.getId()));
+ poolResponse.setObjectName("storagepool");
+ return poolResponse;
+ }
+
+ @Override
+ public ClusterResponse createClusterResponse(Cluster cluster, Boolean showCapacities) {
+ ClusterResponse clusterResponse = new ClusterResponse();
+ clusterResponse.setId(cluster.getId());
+ clusterResponse.setName(cluster.getName());
+ clusterResponse.setPodId(cluster.getPodId());
+ clusterResponse.setZoneId(cluster.getDataCenterId());
+ clusterResponse.setHypervisorType(cluster.getHypervisorType().toString());
+ clusterResponse.setClusterType(cluster.getClusterType().toString());
+ clusterResponse.setAllocationState(cluster.getAllocationState().toString());
+ clusterResponse.setManagedState(cluster.getManagedState().toString());
+ HostPodVO pod = ApiDBUtils.findPodById(cluster.getPodId());
+ if (pod != null) {
+ clusterResponse.setPodName(pod.getName());
+ }
+ DataCenterVO zone = ApiDBUtils.findZoneById(cluster.getDataCenterId());
+ clusterResponse.setZoneName(zone.getName());
+ if (showCapacities != null && showCapacities){
+ List capacities = ApiDBUtils.getCapacityByClusterPodZone(null,null,cluster.getId());
+ Set capacityResponses = new HashSet();
+ float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
+
+ for (SummedCapacity capacity : capacities){
+ CapacityResponse capacityResponse = new CapacityResponse();
+ capacityResponse.setCapacityType(capacity.getCapacityType());
+ capacityResponse.setCapacityUsed(capacity.getUsedCapacity());
+
+ if (capacity.getCapacityType() == Capacity.CAPACITY_TYPE_CPU){
+ capacityResponse.setCapacityTotal(new Long((long)(capacity.getTotalCapacity()*cpuOverprovisioningFactor)));
+ }else if(capacity.getCapacityType() == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED){
+ List c = ApiDBUtils.findNonSharedStorageForClusterPodZone(null, null, cluster.getId());
+ capacityResponse.setCapacityTotal(capacity.getTotalCapacity() - c.get(0).getTotalCapacity());
+ capacityResponse.setCapacityUsed(capacity.getUsedCapacity() - c.get(0).getUsedCapacity());
+ }else{
+ capacityResponse.setCapacityTotal(capacity.getTotalCapacity());
+ }
+ if (capacityResponse.getCapacityTotal() != 0) {
+ capacityResponse.setPercentUsed(s_percentFormat.format((float) capacityResponse.getCapacityUsed() / (float) capacityResponse.getCapacityTotal() * 100f));
+ } else {
+ capacityResponse.setPercentUsed(s_percentFormat.format(0L));
+ }
+ capacityResponses.add(capacityResponse);
+ }
+ // Do it for stats as well.
+ capacityResponses.addAll(getStatsCapacityresponse(null, cluster.getId(), pod.getId(), pod.getDataCenterId()));
+ clusterResponse.setCapacitites(new ArrayList(capacityResponses));
+ }
+ clusterResponse.setObjectName("cluster");
+ return clusterResponse;
+ }
+
+ @Override
+ public FirewallRuleResponse createPortForwardingRuleResponse(PortForwardingRule fwRule) {
+ FirewallRuleResponse response = new FirewallRuleResponse();
+ response.setId(fwRule.getId());
+ response.setPrivateStartPort(Integer.toString(fwRule.getDestinationPortStart()));
+ response.setPrivateEndPort(Integer.toString(fwRule.getDestinationPortEnd()));
+ response.setProtocol(fwRule.getProtocol());
+ response.setPublicStartPort(Integer.toString(fwRule.getSourcePortStart()));
+ response.setPublicEndPort(Integer.toString(fwRule.getSourcePortEnd()));
+ List cidrs = ApiDBUtils.findFirewallSourceCidrs(fwRule.getId());
+ response.setCidrList(StringUtils.join(cidrs, ","));
+
+ IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId());
+ response.setPublicIpAddressId(ip.getId());
+ response.setPublicIpAddress(ip.getAddress().addr());
+
+ if (ip != null && fwRule.getDestinationIpAddress() != null) {
+ UserVm vm = ApiDBUtils.findUserVmById(fwRule.getVirtualMachineId());
+ if (vm != null) {
+ response.setVirtualMachineId(vm.getId());
+ response.setVirtualMachineName(vm.getHostName());
+ response.setVirtualMachineDisplayName(vm.getDisplayName());
+ }
+ }
+ FirewallRule.State state = fwRule.getState();
+ String stateToSet = state.toString();
+ if (state.equals(FirewallRule.State.Revoke)) {
+ stateToSet = "Deleting";
+ }
+ response.setState(stateToSet);
+ response.setObjectName("portforwardingrule");
+ return response;
+ }
+
+ @Override
+ public IpForwardingRuleResponse createIpForwardingRuleResponse(StaticNatRule fwRule) {
+ IpForwardingRuleResponse response = new IpForwardingRuleResponse();
+ response.setId(fwRule.getId());
+ response.setProtocol(fwRule.getProtocol());
+
+ IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId());
+ response.setPublicIpAddressId(ip.getId());
+ response.setPublicIpAddress(ip.getAddress().addr());
+
+ if (ip != null && fwRule.getDestIpAddress() != null) {
+ UserVm vm = ApiDBUtils.findUserVmById(ip.getAssociatedWithVmId());
+ if (vm != null) {// vm might be destroyed
+ response.setVirtualMachineId(vm.getId());
+ response.setVirtualMachineName(vm.getHostName());
+ response.setVirtualMachineDisplayName(vm.getDisplayName());
+ }
+ }
+ FirewallRule.State state = fwRule.getState();
+ String stateToSet = state.toString();
+ if (state.equals(FirewallRule.State.Revoke)) {
+ stateToSet = "Deleting";
+ }
+
+ response.setStartPort(fwRule.getSourcePortStart());
+ response.setEndPort(fwRule.getSourcePortEnd());
+ response.setProtocol(fwRule.getProtocol());
+ response.setState(stateToSet);
+ response.setObjectName("ipforwardingrule");
+ return response;
+ }
+
+
+ @Override
+ public List createUserVmResponse(String objectName, UserVm... userVms) {
+ return createUserVmResponse(objectName, 0, userVms);
+ }
+
+ @Override
+ public List createUserVmResponse(String objectName, int details, UserVm... userVms) {
+ Account caller = UserContext.current().getCaller();
+ boolean caller_is_admin = ((caller == null) || (caller.getType() == Account.ACCOUNT_TYPE_ADMIN));
+
+ Hashtable vmDataList = new Hashtable();
+ // Initialise the vmdatalist with the input data
+ for (UserVm userVm : userVms) {
+ UserVmData userVmData = newUserVmData(userVm);
+ vmDataList.put(userVm.getId(), userVmData);
+ }
+
+ vmDataList = ApiDBUtils.listVmDetails(vmDataList, details);
+
+ //initialize vmresponse from vmdatalist
+ List vmResponses = new ArrayList();
+ DecimalFormat decimalFormat = new DecimalFormat("#.##");
+ for (UserVmData uvd: vmDataList.values()){
+ UserVmResponse userVmResponse = newUserVmResponse(uvd, caller_is_admin);
+
+ // stats calculation
+ String cpuUsed = null;
+ // VmStats vmStats = ApiDBUtils.getVmStatistics(userVmResponse.getId());
+ VmStats vmStats = ApiDBUtils.getVmStatistics(uvd.getId());
+ if (vmStats != null) {
+ float cpuUtil = (float) vmStats.getCPUUtilization();
+ cpuUsed = decimalFormat.format(cpuUtil) + "%";
+ userVmResponse.setCpuUsed(cpuUsed);
+
+ Double networkKbRead = Double.valueOf(vmStats.getNetworkReadKBs());
+ userVmResponse.setNetworkKbsRead(networkKbRead.longValue());
+
+ Double networkKbWrite = Double.valueOf(vmStats.getNetworkWriteKBs());
+ userVmResponse.setNetworkKbsWrite(networkKbWrite.longValue());
+ }
+ userVmResponse.setObjectName(objectName);
+
+ vmResponses.add(userVmResponse);
+ }
+ return vmResponses;
+ }
+
+ userVmResponse.setId(userVm.getId());
+ userVmResponse.setName(userVm.getInstanceName());
+ userVmResponse.setDisplayName(userVm.getDisplayName());
+ userVmResponse.setIpAddress(userVm.getPrivateIpAddress());
+ userVmResponse.setHaEnable(userVm.isHaEnabled());
+
+ @Override
+ public DomainRouterResponse createDomainRouterResponse(VirtualRouter router) {
+ Map serviceOfferings = new HashMap();
+
+ DomainRouterResponse routerResponse = new DomainRouterResponse();
+ routerResponse.setId(router.getId());
+ routerResponse.setZoneId(router.getDataCenterIdToDeployIn());
+ routerResponse.setName(router.getHostName());
+ routerResponse.setPodId(router.getPodIdToDeployIn());
+ routerResponse.setTemplateId(router.getTemplateId());
+ routerResponse.setCreated(router.getCreated());
+ routerResponse.setState(router.getState());
+ routerResponse.setIsRedundantRouter(router.getIsRedundantRouter());
+ routerResponse.setRedundantState(router.getRedundantState().toString());
+
+ if (router.getHostId() != null) {
+ routerResponse.setHostId(router.getHostId());
+ routerResponse.setHostName(ApiDBUtils.findHostById(router.getHostId()).getName());
+ }
+
+ // Service Offering Info
+ ServiceOffering offering = serviceOfferings.get(router.getServiceOfferingId());
+
+ if (offering == null) {
+ offering = ApiDBUtils.findServiceOfferingById(router.getServiceOfferingId());
+ serviceOfferings.put(offering.getId(), offering);
+ }
+ routerResponse.setServiceOfferingId(offering.getId());
+ routerResponse.setServiceOfferingName(offering.getName());
+
+ populateOwner(routerResponse, router);
+
+ List nicProfiles = ApiDBUtils.getNics(router);
+ for (NicProfile singleNicProfile : nicProfiles) {
+ Network network = ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId());
+ if (network != null) {
+ if (network.getTrafficType() == TrafficType.Public) {
+ routerResponse.setPublicIp(singleNicProfile.getIp4Address());
+ routerResponse.setPublicMacAddress(singleNicProfile.getMacAddress());
+ routerResponse.setPublicNetmask(singleNicProfile.getNetmask());
+ routerResponse.setGateway(singleNicProfile.getGateway());
+ routerResponse.setPublicNetworkId(singleNicProfile.getNetworkId());
+ } else if (network.getTrafficType() == TrafficType.Control) {
+ routerResponse.setLinkLocalIp(singleNicProfile.getIp4Address());
+ routerResponse.setLinkLocalMacAddress(singleNicProfile.getMacAddress());
+ routerResponse.setLinkLocalNetmask(singleNicProfile.getNetmask());
+ routerResponse.setLinkLocalNetworkId(singleNicProfile.getNetworkId());
+ } else if (network.getTrafficType() == TrafficType.Guest) {
+ routerResponse.setGuestIpAddress(singleNicProfile.getIp4Address());
+ routerResponse.setGuestMacAddress(singleNicProfile.getMacAddress());
+ routerResponse.setGuestNetmask(singleNicProfile.getNetmask());
+ routerResponse.setGuestNetworkId(singleNicProfile.getNetworkId());
+ routerResponse.setNetworkDomain(network.getNetworkDomain());
+ }
+ }
+ }
+ DataCenter zone = ApiDBUtils.findZoneById(router.getDataCenterIdToDeployIn());
+ if (zone != null) {
+ routerResponse.setZoneName(zone.getName());
+ routerResponse.setDns1(zone.getDns1());
+ routerResponse.setDns2(zone.getDns2());
+ }
+
+ routerResponse.setObjectName("domainrouter");
+ return routerResponse;
+ }
+
+ @Override
+ public SystemVmResponse createSystemVmResponse(VirtualMachine vm) {
+ SystemVmResponse vmResponse = new SystemVmResponse();
+ if (vm.getType() == Type.SecondaryStorageVm || vm.getType() == Type.ConsoleProxy) {
+ // SystemVm vm = (SystemVm) systemVM;
+
+ if(vm.getUuid() != null && !vm.getUuid().isEmpty())
+ vmResponse.setId(vm.getUuid());
+ else
+ vmResponse.setId(String.valueOf(vm.getId()));
+ vmResponse.setObjectId(vm.getId());
+ vmResponse.setSystemVmType(vm.getType().toString().toLowerCase());
+ vmResponse.setZoneId(vm.getDataCenterIdToDeployIn());
+
+ vmResponse.setName(vm.getHostName());
+ vmResponse.setPodId(vm.getPodIdToDeployIn());
+ vmResponse.setTemplateId(vm.getTemplateId());
+ vmResponse.setCreated(vm.getCreated());
+
+ if (vm.getHostId() != null) {
+ vmResponse.setHostId(vm.getHostId());
+ vmResponse.setHostName(ApiDBUtils.findHostById(vm.getHostId()).getName());
+ }
+
+ if (vm.getState() != null) {
+ vmResponse.setState(vm.getState().toString());
+ }
+
+ // for console proxies, add the active sessions
+ if (vm.getType() == Type.ConsoleProxy) {
+ ConsoleProxyVO proxy = ApiDBUtils.findConsoleProxy(vm.getId());
+ //proxy can be already destroyed
+ if (proxy != null) {
+ vmResponse.setActiveViewerSessions(proxy.getActiveSession());
+ }
+ }
+
+ DataCenter zone = ApiDBUtils.findZoneById(vm.getDataCenterIdToDeployIn());
+ if (zone != null) {
+ vmResponse.setZoneName(zone.getName());
+ vmResponse.setDns1(zone.getDns1());
+ vmResponse.setDns2(zone.getDns2());
+ }
+
+ List nicProfiles = ApiDBUtils.getNics(vm);
+ for (NicProfile singleNicProfile : nicProfiles) {
+ Network network = ApiDBUtils.findNetworkById(singleNicProfile.getNetworkId());
+ if (network != null) {
+ TrafficType trafficType = TrafficType.Public;
+ if (zone.getNetworkType() == NetworkType.Basic || zone.isSecurityGroupEnabled()) {
+ trafficType = TrafficType.Guest;
+ }
+ if (network.getTrafficType() == trafficType) {
+ vmResponse.setPublicIp(singleNicProfile.getIp4Address());
+ vmResponse.setPublicMacAddress(singleNicProfile.getMacAddress());
+ vmResponse.setPublicNetmask(singleNicProfile.getNetmask());
+ vmResponse.setGateway(singleNicProfile.getGateway());
+ } else if (network.getTrafficType() == TrafficType.Management) {
+ vmResponse.setPrivateIp(singleNicProfile.getIp4Address());
+ vmResponse.setPrivateMacAddress(singleNicProfile.getMacAddress());
+ vmResponse.setPrivateNetmask(singleNicProfile.getNetmask());
+ } else if (network.getTrafficType() == TrafficType.Control) {
+ vmResponse.setLinkLocalIp(singleNicProfile.getIp4Address());
+ vmResponse.setLinkLocalMacAddress(singleNicProfile.getMacAddress());
+ vmResponse.setLinkLocalNetmask(singleNicProfile.getNetmask());
+ }
+ }
+ }
+ }
+ vmResponse.setObjectName("systemvm");
+ return vmResponse;
+ }
+
+ @Override
+ public Host findHostById(Long hostId) {
+ return ApiDBUtils.findHostById(hostId);
+ }
+
+ @Override
+ public User findUserById(Long userId) {
+ return ApiDBUtils.findUserById(userId);
+ }
+
+ @Override
+ public UserVm findUserVmById(Long vmId) {
+ return ApiDBUtils.findUserVmById(vmId);
+
+ }
+
+ @Override
+ public VolumeVO findVolumeById(Long volumeId) {
+ return ApiDBUtils.findVolumeById(volumeId);
+ }
+
+ @Override
+ public Account findAccountByNameDomain(String accountName, Long domainId) {
+ return ApiDBUtils.findAccountByNameDomain(accountName, domainId);
+ }
+
+ @Override
+ public VirtualMachineTemplate findTemplateById(Long templateId) {
+ return ApiDBUtils.findTemplateById(templateId);
+ }
+
+ @Override
+ public VpnUsersResponse createVpnUserResponse(VpnUser vpnUser) {
+ VpnUsersResponse vpnResponse = new VpnUsersResponse();
+ vpnResponse.setId(vpnUser.getId());
+ vpnResponse.setUserName(vpnUser.getUsername());
+
+ populateOwner(vpnResponse, vpnUser);
+
+ vpnResponse.setObjectName("vpnuser");
+ return vpnResponse;
+ }
+
+ @Override
+ public RemoteAccessVpnResponse createRemoteAccessVpnResponse(RemoteAccessVpn vpn) {
+ RemoteAccessVpnResponse vpnResponse = new RemoteAccessVpnResponse();
+ vpnResponse.setPublicIpId(vpn.getServerAddressId());
+ vpnResponse.setPublicIp(ApiDBUtils.findIpAddressById(vpn.getServerAddressId()).getAddress().addr());
+ vpnResponse.setIpRange(vpn.getIpRange());
+ vpnResponse.setPresharedKey(vpn.getIpsecPresharedKey());
+ vpnResponse.setDomainId(vpn.getDomainId());
+
+ populateOwner(vpnResponse, vpn);
+
+ vpnResponse.setState(vpn.getState().toString());
+ vpnResponse.setObjectName("remoteaccessvpn");
+
+ return vpnResponse;
+ }
+
+ @Override
+ public TemplateResponse createIsoResponse(VirtualMachineTemplate result) {
+ TemplateResponse response = new TemplateResponse();
+ response.setId(result.getId());
+ response.setName(result.getName());
+ response.setDisplayText(result.getDisplayText());
+ response.setPublic(result.isPublicTemplate());
+ response.setCreated(result.getCreated());
+ response.setFormat(result.getFormat());
+ response.setOsTypeId(result.getGuestOSId());
+ response.setOsTypeName(ApiDBUtils.findGuestOSById(result.getGuestOSId()).getDisplayName());
+
+ if (result.getFormat() == ImageFormat.ISO) { // Templates are always bootable
+ response.setBootable(result.isBootable());
+ } else {
+ response.setHypervisor(result.getHypervisorType().toString());// hypervisors are associated with templates
+ }
+
+ // add account ID and name
+ Account owner = ApiDBUtils.findAccountById(result.getAccountId());
+ populateAccount(response, owner.getId());
+ populateDomain(response, owner.getDomainId());
+
+ response.setObjectName("iso");
+ return response;
+ }
+
+ @Override
+ public List createTemplateResponses(long templateId, Long zoneId, boolean readyOnly) {
+ List dcs = new ArrayList();
+ if (zoneId == null || zoneId == -1) {
+ dcs.addAll(ApiDBUtils.listZones());
+ List response = new ArrayList();
+ for (DataCenterVO dc : dcs ) {
+ response.addAll(createTemplateResponses(templateId, dc.getId(), readyOnly));
+ }
+ return response;
+ } else {
+ return createTemplateResponses(templateId, zoneId.longValue(), readyOnly);
+ }
+ }
+
+ private List createSwiftTemplateResponses(long templateId) {
+ VirtualMachineTemplate template = findTemplateById(templateId);
+ List responses = new ArrayList();
+ VMTemplateSwiftVO templateSwiftRef = ApiDBUtils.findTemplateSwiftRef(templateId);
+ if (templateSwiftRef == null) {
+ return responses;
+ }
+
+ TemplateResponse templateResponse = new TemplateResponse();
+ templateResponse.setId(template.getId());
+ templateResponse.setName(template.getName());
+ templateResponse.setDisplayText(template.getDisplayText());
+ templateResponse.setPublic(template.isPublicTemplate());
+ templateResponse.setCreated(templateSwiftRef.getCreated());
+
+ templateResponse.setReady(true);
+ templateResponse.setFeatured(template.isFeatured());
+ templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM));
+ templateResponse.setPasswordEnabled(template.getEnablePassword());
+ templateResponse.setCrossZones(template.isCrossZones());
+ templateResponse.setFormat(template.getFormat());
+ if (template.getTemplateType() != null) {
+ templateResponse.setTemplateType(template.getTemplateType().toString());
+ }
+ templateResponse.setHypervisor(template.getHypervisorType().toString());
+
+ GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
+ if (os != null) {
+ templateResponse.setOsTypeId(os.getId());
+ templateResponse.setOsTypeName(os.getDisplayName());
+ } else {
+ templateResponse.setOsTypeId(-1L);
+ templateResponse.setOsTypeName("");
+ }
+
+ Account account = ApiDBUtils.findAccountByIdIncludingRemoved(template.getAccountId());
+ populateAccount(templateResponse, account.getId());
+ populateDomain(templateResponse, account.getDomainId());
+
+ Account caller = UserContext.current().getCaller();
+ boolean isAdmin = false;
+ if ((caller == null) || BaseCmd.isAdmin(caller.getType())) {
+ isAdmin = true;
+ }
+
+ // If the user is an Admin, add the template download status
+ if (isAdmin || caller.getId() == template.getAccountId()) {
+ // add download status
+ templateResponse.setStatus("Successfully Installed");
+ }
+
+ Long templateSize = templateSwiftRef.getSize();
+ if (templateSize > 0) {
+ templateResponse.setSize(templateSize);
+ }
+
+ templateResponse.setChecksum(template.getChecksum());
+ templateResponse.setSourceTemplateId(template.getSourceTemplateId());
+
+ templateResponse.setChecksum(template.getChecksum());
+
+ templateResponse.setTemplateTag(template.getTemplateTag());
+
+ templateResponse.setObjectName("template");
+ responses.add(templateResponse);
+ return responses;
+ }
+
+ @Override
+ public List createTemplateResponses(long templateId, long zoneId, boolean readyOnly) {
+ if (zoneId == 0) {
+ return createSwiftTemplateResponses(templateId);
+ }
+ VirtualMachineTemplate template = findTemplateById(templateId);
+ List responses = new ArrayList();
+ VMTemplateHostVO templateHostRef = ApiDBUtils.findTemplateHostRef(templateId, zoneId, readyOnly);
+ if (templateHostRef == null) {
+ return responses;
+ }
+
+ HostVO host = ApiDBUtils.findHostById(templateHostRef.getHostId());
+ if (host.getType() == Host.Type.LocalSecondaryStorage && host.getStatus() != com.cloud.host.Status.Up) {
+ return responses;
+ }
+
+ TemplateResponse templateResponse = new TemplateResponse();
+ templateResponse.setId(template.getId());
+ templateResponse.setName(template.getName());
+ templateResponse.setDisplayText(template.getDisplayText());
+ templateResponse.setPublic(template.isPublicTemplate());
+ templateResponse.setCreated(templateHostRef.getCreated());
+
+ templateResponse.setReady(templateHostRef.getDownloadState() == Status.DOWNLOADED);
+ templateResponse.setFeatured(template.isFeatured());
+ templateResponse.setExtractable(template.isExtractable() && !(template.getTemplateType() == TemplateType.SYSTEM));
+ templateResponse.setPasswordEnabled(template.getEnablePassword());
+ templateResponse.setCrossZones(template.isCrossZones());
+ templateResponse.setFormat(template.getFormat());
+ if (template.getTemplateType() != null) {
+ templateResponse.setTemplateType(template.getTemplateType().toString());
+ }
+ templateResponse.setHypervisor(template.getHypervisorType().toString());
+
+ GuestOS os = ApiDBUtils.findGuestOSById(template.getGuestOSId());
+ if (os != null) {
+ templateResponse.setOsTypeId(os.getId());
+ templateResponse.setOsTypeName(os.getDisplayName());
+ } else {
+ templateResponse.setOsTypeId(-1L);
+ templateResponse.setOsTypeName("");
+ }
+
+ Account account = ApiDBUtils.findAccountByIdIncludingRemoved(template.getAccountId());
+ populateAccount(templateResponse, account.getId());
+ populateDomain(templateResponse, account.getDomainId());
+
+ DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId);
+
+ // Add the zone ID
+ templateResponse.setZoneId(zoneId);
+ templateResponse.setZoneName(datacenter.getName());
+
+ Account caller = UserContext.current().getCaller();
+ boolean isAdmin = false;
+ if ((caller == null) || BaseCmd.isAdmin(caller.getType())) {
+ isAdmin = true;
+ }
+
+ // If the user is an Admin, add the template download status
+ if (isAdmin || caller.getId() == template.getAccountId()) {
+ // add download status
+ if (templateHostRef.getDownloadState() != Status.DOWNLOADED) {
+ String templateStatus = "Processing";
+ if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
+ if (templateHostRef.getDownloadPercent() == 100) {
+ templateStatus = "Installing Template";
+ } else {
+ templateStatus = templateHostRef.getDownloadPercent() + "% Downloaded";
+ }
+ } else {
+ templateStatus = templateHostRef.getErrorString();
+ }
+ templateResponse.setStatus(templateStatus);
+ } else if (templateHostRef.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) {
+ templateResponse.setStatus("Download Complete");
+ } else {
+ templateResponse.setStatus("Successfully Installed");
+ }
+ }
+
+ Long templateSize = templateHostRef.getSize();
+ if (templateSize > 0) {
+ templateResponse.setSize(templateSize);
+ }
+
+ templateResponse.setChecksum(template.getChecksum());
+ templateResponse.setSourceTemplateId(template.getSourceTemplateId());
+
+ templateResponse.setChecksum(template.getChecksum());
+
+ templateResponse.setTemplateTag(template.getTemplateTag());
+
+ templateResponse.setObjectName("template");
+ responses.add(templateResponse);
+ return responses;
+ }
+ @Override
+ public List createIsoResponses(long isoId, Long zoneId, boolean readyOnly) {
+
+ List isoResponses = new ArrayList();
+ VirtualMachineTemplate iso = findTemplateById(isoId);
+ if ( iso.getTemplateType() == TemplateType.PERHOST) {
+ TemplateResponse isoResponse = new TemplateResponse();
+ isoResponse.setId(iso.getId());
+ isoResponse.setName(iso.getName());
+ isoResponse.setDisplayText(iso.getDisplayText());
+ isoResponse.setPublic(iso.isPublicTemplate());
+ isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST));
+ isoResponse.setReady(true);
+ isoResponse.setBootable(iso.isBootable());
+ isoResponse.setFeatured(iso.isFeatured());
+ isoResponse.setCrossZones(iso.isCrossZones());
+ isoResponse.setPublic(iso.isPublicTemplate());
+ isoResponse.setCreated(iso.getCreated());
+ isoResponse.setChecksum(iso.getChecksum());
+ isoResponse.setPasswordEnabled(false);
+
+ // add account ID and name
+ Account owner = ApiDBUtils.findAccountById(iso.getAccountId());
+ populateAccount(isoResponse, owner.getId());
+ populateDomain(isoResponse, owner.getDomainId());
+
+ isoResponse.setObjectName("iso");
+ isoResponses.add(isoResponse);
+ return isoResponses;
+ } else {
+ List dcs = new ArrayList();
+ if (zoneId == null || zoneId == -1 ) {
+ dcs.addAll(ApiDBUtils.listZones());
+ for (DataCenterVO dc : dcs ) {
+ isoResponses.addAll(createIsoResponses(iso, dc.getId(), readyOnly));
+ }
+ return isoResponses;
+ } else {
+ return createIsoResponses(iso, zoneId, readyOnly);
+ }
+ }
+ }
+
+ private List createSwiftIsoResponses(VirtualMachineTemplate iso) {
+ long isoId = iso.getId();
+ List isoResponses = new ArrayList();
+ VMTemplateSwiftVO isoSwift = ApiDBUtils.findTemplateSwiftRef(isoId);
+ if (isoSwift == null) {
+ return isoResponses;
+ }
+ TemplateResponse isoResponse = new TemplateResponse();
+ isoResponse.setId(iso.getId());
+ isoResponse.setName(iso.getName());
+ isoResponse.setDisplayText(iso.getDisplayText());
+ isoResponse.setPublic(iso.isPublicTemplate());
+ isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST));
+ isoResponse.setCreated(isoSwift.getCreated());
+ isoResponse.setReady(true);
+ isoResponse.setBootable(iso.isBootable());
+ isoResponse.setFeatured(iso.isFeatured());
+ isoResponse.setCrossZones(iso.isCrossZones());
+ isoResponse.setPublic(iso.isPublicTemplate());
+ isoResponse.setChecksum(iso.getChecksum());
+
+ // TODO: implement
+ GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId());
+ if (os != null) {
+ isoResponse.setOsTypeId(os.getId());
+ isoResponse.setOsTypeName(os.getDisplayName());
+ } else {
+ isoResponse.setOsTypeId(-1L);
+ isoResponse.setOsTypeName("");
+ }
+
+ populateOwner(isoResponse, iso);
+
+ Account account = UserContext.current().getCaller();
+ boolean isAdmin = false;
+ if ((account == null) || BaseCmd.isAdmin(account.getType())) {
+ isAdmin = true;
+ }
+
+ // If the user is an admin, add the template download status
+ if (isAdmin || account.getId() == iso.getAccountId()) {
+ // add download status
+ isoResponse.setStatus("Successfully Installed");
+ }
+ Long isoSize = isoSwift.getSize();
+ if (isoSize > 0) {
+ isoResponse.setSize(isoSize);
+ }
+ isoResponse.setObjectName("iso");
+ isoResponses.add(isoResponse);
+ return isoResponses;
+ }
+
+ @Override
+ public List createIsoResponses(VirtualMachineTemplate iso, long zoneId, boolean readyOnly) {
+ if (zoneId == 0) {
+ return createSwiftIsoResponses(iso);
+ }
+ long isoId = iso.getId();
+ List isoResponses = new ArrayList();
+ VMTemplateHostVO isoHost = ApiDBUtils.findTemplateHostRef(isoId, zoneId, readyOnly);
+ if( isoHost == null ) {
+ return isoResponses;
+ }
+ TemplateResponse isoResponse = new TemplateResponse();
+ isoResponse.setId(iso.getId());
+ isoResponse.setName(iso.getName());
+ isoResponse.setDisplayText(iso.getDisplayText());
+ isoResponse.setPublic(iso.isPublicTemplate());
+ isoResponse.setExtractable(iso.isExtractable() && !(iso.getTemplateType() == TemplateType.PERHOST));
+ isoResponse.setCreated(isoHost.getCreated());
+ isoResponse.setReady(isoHost.getDownloadState() == Status.DOWNLOADED);
+ isoResponse.setBootable(iso.isBootable());
+ isoResponse.setFeatured(iso.isFeatured());
+ isoResponse.setCrossZones(iso.isCrossZones());
+ isoResponse.setPublic(iso.isPublicTemplate());
+ isoResponse.setChecksum(iso.getChecksum());
+
+ // TODO: implement
+ GuestOS os = ApiDBUtils.findGuestOSById(iso.getGuestOSId());
+ if (os != null) {
+ isoResponse.setOsTypeId(os.getId());
+ isoResponse.setOsTypeName(os.getDisplayName());
+ } else {
+ isoResponse.setOsTypeId(-1L);
+ isoResponse.setOsTypeName("");
+ }
+
+ populateOwner(isoResponse, iso);
+
+ Account account = UserContext.current().getCaller();
+ boolean isAdmin = false;
+ if ((account == null) || BaseCmd.isAdmin(account.getType())) {
+ isAdmin = true;
+ }
+ // Add the zone ID
+ DataCenterVO datacenter = ApiDBUtils.findZoneById(zoneId);
+ isoResponse.setZoneId(zoneId);
+ isoResponse.setZoneName(datacenter.getName());
+
+ // If the user is an admin, add the template download status
+ if (isAdmin || account.getId() == iso.getAccountId()) {
+ // add download status
+ if (isoHost.getDownloadState() != Status.DOWNLOADED) {
+ String isoStatus = "Processing";
+ if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOADED) {
+ isoStatus = "Download Complete";
+ } else if (isoHost.getDownloadState() == VMTemplateHostVO.Status.DOWNLOAD_IN_PROGRESS) {
+ if (isoHost.getDownloadPercent() == 100) {
+ isoStatus = "Installing ISO";
+ } else {
+ isoStatus = isoHost.getDownloadPercent() + "% Downloaded";
+ }
+ } else {
+ isoStatus = isoHost.getErrorString();
+ }
+ isoResponse.setStatus(isoStatus);
+ } else {
+ isoResponse.setStatus("Successfully Installed");
+ }
+ }
+
+ Long isoSize = isoHost.getSize();
+ if (isoSize > 0) {
+ isoResponse.setSize(isoSize);
+ }
+
+ isoResponse.setObjectName("iso");
+ isoResponses.add(isoResponse);
+ return isoResponses;
+ }
+
+ @Override
+ public ListResponse createSecurityGroupResponses(List extends SecurityGroupRules> networkGroups) {
+ List groupResultObjs = SecurityGroupResultObject.transposeNetworkGroups(networkGroups);
+
+ ListResponse response = new ListResponse();
+ List netGrpResponses = new ArrayList();
+ for (SecurityGroupResultObject networkGroup : groupResultObjs) {
+ SecurityGroupResponse netGrpResponse = new SecurityGroupResponse();
+ netGrpResponse.setId(networkGroup.getId());
+ netGrpResponse.setName(networkGroup.getName());
+ netGrpResponse.setDescription(networkGroup.getDescription());
+
+ populateOwner(netGrpResponse, networkGroup);
+
+ List ingressRules = networkGroup.getIngressRules();
+ if ((ingressRules != null) && !ingressRules.isEmpty()) {
+ List ingressRulesResponse = new ArrayList();
+
+ for (IngressRuleResultObject ingressRule : ingressRules) {
+ IngressRuleResponse ingressData = new IngressRuleResponse();
+
+ ingressData.setRuleId(ingressRule.getId());
+ ingressData.setProtocol(ingressRule.getProtocol());
+ if ("icmp".equalsIgnoreCase(ingressRule.getProtocol())) {
+ ingressData.setIcmpType(ingressRule.getStartPort());
+ ingressData.setIcmpCode(ingressRule.getEndPort());
+ } else {
+ ingressData.setStartPort(ingressRule.getStartPort());
+ ingressData.setEndPort(ingressRule.getEndPort());
+ }
+
+ if (ingressRule.getAllowedSecurityGroup() != null) {
+ ingressData.setSecurityGroupName(ingressRule.getAllowedSecurityGroup());
+ ingressData.setAccountName(ingressRule.getAllowedSecGroupAcct());
+ } else {
+ ingressData.setCidr(ingressRule.getAllowedSourceIpCidr());
+ }
+
+ ingressData.setObjectName("ingressrule");
+ ingressRulesResponse.add(ingressData);
+ }
+ netGrpResponse.setIngressRules(ingressRulesResponse);
+ }
+ netGrpResponse.setObjectName("securitygroup");
+ netGrpResponses.add(netGrpResponse);
+ }
+
+ response.setResponses(netGrpResponses);
+ return response;
+ }
+
+ @Override
+ public SecurityGroupResponse createSecurityGroupResponse(SecurityGroup group) {
+ SecurityGroupResponse response = new SecurityGroupResponse();
+
+ populateOwner(response, group);
+
+ response.setDescription(group.getDescription());
+ response.setId(group.getId());
+ response.setName(group.getName());
+
+ response.setObjectName("securitygroup");
+ return response;
+
+ }
+
+ @Override
+ public ExtractResponse createExtractResponse(Long uploadId, Long id, Long zoneId, Long accountId, String mode) {
+ UploadVO uploadInfo = ApiDBUtils.findUploadById(uploadId);
+ ExtractResponse response = new ExtractResponse();
+ response.setObjectName("template");
+ response.setId(id);
+ response.setName(ApiDBUtils.findTemplateById(id).getName());
+ response.setZoneId(zoneId);
+ response.setZoneName(ApiDBUtils.findZoneById(zoneId).getName());
+ response.setMode(mode);
+ response.setUploadId(uploadId);
+ response.setState(uploadInfo.getUploadState().toString());
+ response.setAccountId(accountId);
+ response.setUrl(uploadInfo.getUploadUrl());
+ return response;
+
+ }
+
+ @Override
+ public String toSerializedString(CreateCmdResponse response, String responseType) {
+ return ApiResponseSerializer.toSerializedString(response, responseType);
+ }
+
+ @Override
+ public AsyncJobResponse createAsyncJobResponse(AsyncJob job) {
+ AsyncJobResponse jobResponse = new AsyncJobResponse();
+ jobResponse.setAccountId(job.getAccountId());
+ jobResponse.setCmd(job.getCmd());
+ jobResponse.setCreated(job.getCreated());
+
+ if(job.getUuid() != null && !job.getUuid().isEmpty())
+ jobResponse.setId(job.getUuid());
+ else
+ jobResponse.setId(String.valueOf(job.getId()));
+
+ if (job.getInstanceType() != null && job.getInstanceId() != null) {
+ jobResponse.setJobInstanceType(job.getInstanceType().toString());
+ jobResponse.setJobInstanceId(job.getInstanceId());
+ }
+ jobResponse.setJobProcStatus(job.getProcessStatus());
+ jobResponse.setJobResult((ResponseObject) ApiSerializerHelper.fromSerializedString(job.getResult()));
+ jobResponse.setJobResultCode(job.getResultCode());
+ jobResponse.setJobStatus(job.getStatus());
+ jobResponse.setUserId(job.getUserId());
+
+ jobResponse.setObjectName("asyncjobs");
+ return jobResponse;
+ }
+
+ @Override
+ public List createTemplateResponses(long templateId, Long snapshotId, Long volumeId, boolean readyOnly) {
+ VolumeVO volume = null;
+ if (snapshotId != null) {
+ Snapshot snapshot = ApiDBUtils.findSnapshotById(snapshotId);
+ volume = findVolumeById(snapshot.getVolumeId());
+ } else {
+ volume = findVolumeById(volumeId);
+ }
+ return createTemplateResponses(templateId, volume.getDataCenterId(), readyOnly);
+ }
+
+ @Override
+ public List createTemplateResponses(long templateId, Long vmId) {
+ UserVm vm = findUserVmById(vmId);
+ Long hostId = (vm.getHostId() == null ? vm.getLastHostId() : vm.getHostId());
+ Host host = findHostById(hostId);
+ return createTemplateResponses(templateId, host.getDataCenterId(), true);
+ }
+
+ @Override
+ public EventResponse createEventResponse(Event event) {
+ EventResponse responseEvent = new EventResponse();
+ responseEvent.setCreated(event.getCreateDate());
+ responseEvent.setDescription(event.getDescription());
+ responseEvent.setEventType(event.getType());
+ responseEvent.setId(event.getId());
+ responseEvent.setLevel(event.getLevel());
+ responseEvent.setParentId(event.getStartId());
+ responseEvent.setState(event.getState());
+
+ populateOwner(responseEvent, event);
+
+ User user = ApiDBUtils.findUserById(event.getUserId());
+ if (user != null) {
+ responseEvent.setUsername(user.getUsername());
+ }
+
+ responseEvent.setObjectName("event");
+ return responseEvent;
+ }
+
+
+ private List sumCapacities(List extends Capacity> hostCapacities) {
+ Map totalCapacityMap = new HashMap();
+ Map usedCapacityMap = new HashMap();
+
+ Set poolIdsToIgnore = new HashSet();
+ Criteria c = new Criteria();
+ // TODO: implement
+ List extends StoragePoolVO> allStoragePools = ApiDBUtils.searchForStoragePools(c);
+ for (StoragePoolVO pool : allStoragePools) {
+ StoragePoolType poolType = pool.getPoolType();
+ if (!(poolType.isShared())) {// All the non shared storages shouldn't show up in the capacity calculation
+ poolIdsToIgnore.add(pool.getId());
+ }
+ }
+
+ float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor();
+
+ // collect all the capacity types, sum allocated/used and sum total...get one capacity number for each
+ for (Capacity capacity : hostCapacities) {
+
+ //check if zone exist
+ DataCenter zone = ApiDBUtils.findZoneById(capacity.getDataCenterId());
+ if (zone == null) {
+ continue;
+ }
+
+ short capacityType = capacity.getCapacityType();
+
+ //If local storage then ignore
+ if ( (capacityType == Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED || capacityType == Capacity.CAPACITY_TYPE_STORAGE)
+ && poolIdsToIgnore.contains(capacity.getHostOrPoolId())) {
+ continue;
+ }
+
+ String key = capacity.getCapacityType() + "_" + capacity.getDataCenterId();
+ String keyForPodTotal = key + "_-1";
+
+ boolean sumPodCapacity = false;
+ if (capacity.getPodId() != null) {
+ key += "_" + capacity.getPodId();
+ sumPodCapacity = true;
+ }
+
+ Long totalCapacity = totalCapacityMap.get(key);
+ Long usedCapacity = usedCapacityMap.get(key);
+
+ // reset overprovisioning factor to 1
+ float overprovisioningFactor = 1;
+ if (capacityType == Capacity.CAPACITY_TYPE_CPU) {
+ overprovisioningFactor = cpuOverprovisioningFactor;
+ }
+
+ if (totalCapacity == null) {
+ totalCapacity = new Long((long) (capacity.getTotalCapacity() * overprovisioningFactor));
+ } else {
+ totalCapacity = new Long((long) (capacity.getTotalCapacity() * overprovisioningFactor)) + totalCapacity;
+ }
+
+ if (usedCapacity == null) {
+ usedCapacity = new Long(capacity.getUsedCapacity());
+ } else {
+ usedCapacity = new Long(capacity.getUsedCapacity() + usedCapacity);
+ }
+
+ if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType == Capacity.CAPACITY_TYPE_MEMORY) { // Reserved
+ // Capacity
+ // accounts for
+ // stopped vms
+ // that have been
+ // stopped within
+ // an interval
+ usedCapacity += capacity.getReservedCapacity();
+ }
+
+ totalCapacityMap.put(key, totalCapacity);
+ usedCapacityMap.put(key, usedCapacity);
+
+ if (sumPodCapacity) {
+ totalCapacity = totalCapacityMap.get(keyForPodTotal);
+ usedCapacity = usedCapacityMap.get(keyForPodTotal);
+
+ overprovisioningFactor = 1;
+ if (capacityType == Capacity.CAPACITY_TYPE_CPU) {
+ overprovisioningFactor = cpuOverprovisioningFactor;
+ }
+
+ if (totalCapacity == null) {
+ totalCapacity = new Long((long) (capacity.getTotalCapacity() * overprovisioningFactor));
+ } else {
+ totalCapacity = new Long((long) (capacity.getTotalCapacity() * overprovisioningFactor)) + totalCapacity;
+ }
+
+ if (usedCapacity == null) {
+ usedCapacity = new Long(capacity.getUsedCapacity());
+ } else {
+ usedCapacity = new Long(capacity.getUsedCapacity() + usedCapacity);
+ }
+
+ if (capacityType == Capacity.CAPACITY_TYPE_CPU || capacityType == Capacity.CAPACITY_TYPE_MEMORY) { // Reserved
+ // Capacity
+ // accounts
+ // for
+ // stopped
+ // vms that
+ // have been
+ // stopped
+ // within an
+ // interval
+ usedCapacity += capacity.getReservedCapacity();
+ }
+
+ totalCapacityMap.put(keyForPodTotal, totalCapacity);
+ usedCapacityMap.put(keyForPodTotal, usedCapacity);
+ }
+ }
+
+ List summedCapacities = new ArrayList();
+ for (String key : totalCapacityMap.keySet()) {
+ CapacityVO summedCapacity = new CapacityVO();
+
+ StringTokenizer st = new StringTokenizer(key, "_");
+ summedCapacity.setCapacityType(Short.parseShort(st.nextToken()));
+ summedCapacity.setDataCenterId(Long.parseLong(st.nextToken()));
+ if (st.hasMoreTokens()) {
+ summedCapacity.setPodId(Long.parseLong(st.nextToken()));
+ }
+
+ summedCapacity.setTotalCapacity(totalCapacityMap.get(key));
+ summedCapacity.setUsedCapacity(usedCapacityMap.get(key));
+
+ summedCapacities.add(summedCapacity);
+ }
+ return summedCapacities;
+ }
+
+ @Override
+ public List createCapacityResponse(List extends Capacity> result, DecimalFormat format) {
+ List capacityResponses = new ArrayList();
+ //List summedCapacities = sumCapacities(result);
+ for (Capacity summedCapacity : result) {
+ CapacityResponse capacityResponse = new CapacityResponse();
+ capacityResponse.setCapacityTotal(summedCapacity.getTotalCapacity());
+ capacityResponse.setCapacityType(summedCapacity.getCapacityType());
+ capacityResponse.setCapacityUsed(summedCapacity.getUsedCapacity());
+ if (summedCapacity.getPodId() != null) {
+ capacityResponse.setPodId(summedCapacity.getPodId());
+ HostPodVO pod = ApiDBUtils.findPodById(summedCapacity.getPodId());
+ if (pod != null) {
+ capacityResponse.setPodName(pod.getName());
+ }
+ }
+ if (summedCapacity.getClusterId() != null) {
+ capacityResponse.setClusterId(summedCapacity.getClusterId());
+ ClusterVO cluster = ApiDBUtils.findClusterById(summedCapacity.getClusterId());
+ if (cluster != null) {
+ capacityResponse.setClusterName(cluster.getName());
+ if (summedCapacity.getPodId() == null){
+ long podId = cluster.getPodId();
+ capacityResponse.setPodId(podId);
+ capacityResponse.setPodName(ApiDBUtils.findPodById(podId).getName());
+ }
+ }
+ }
+ capacityResponse.setZoneId(summedCapacity.getDataCenterId());
+ capacityResponse.setZoneName(ApiDBUtils.findZoneById(summedCapacity.getDataCenterId()).getName());
+ if (summedCapacity.getTotalCapacity() != 0) {
+ capacityResponse.setPercentUsed(format.format((float) summedCapacity.getUsedCapacity() / (float) summedCapacity.getTotalCapacity() * 100f));
+ } else {
+ capacityResponse.setPercentUsed(format.format(0L));
+ }
+
+ capacityResponse.setObjectName("capacity");
+ capacityResponses.add(capacityResponse);
+ }
+
+ return capacityResponses;
+ }
+
+ @Override
+ public TemplatePermissionsResponse createTemplatePermissionsResponse(List accountNames, Long id, boolean isAdmin) {
+ Long templateOwnerDomain = null;
+ VirtualMachineTemplate template = ApiDBUtils.findTemplateById(id);
+ Account templateOwner = ApiDBUtils.findAccountById(template.getAccountId());
+ if (isAdmin) {
+ // FIXME: we have just template id and need to get template owner from that
+ 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);
+ }
+
+ //Set accounts
+ List projectIds = new ArrayList();
+ List regularAccounts = new ArrayList();
+ for (String accountName : accountNames) {
+ Account account = ApiDBUtils.findAccountByNameDomain(accountName, templateOwner.getDomainId());
+ if (account.getType() != Account.ACCOUNT_TYPE_PROJECT) {
+ regularAccounts.add(accountName);
+ } else {
+ //convert account to projectIds
+ Project project = ApiDBUtils.findProjectByProjectAccountId(account.getId());
+ projectIds.add(project.getId());
+ }
+ }
+
+ if (!projectIds.isEmpty()) {
+ response.setProjectIds(projectIds);
+ }
+
+ if (!regularAccounts.isEmpty()) {
+ response.setAccountNames(regularAccounts);
+ }
+
+ response.setObjectName("templatepermission");
+ return response;
+ }
+
+ @Override
+ public AsyncJobResponse queryJobResult(QueryAsyncJobResultCmd cmd) {
+ AsyncJobResult result = ApiDBUtils._asyncMgr.queryAsyncJobResult(cmd);
+ AsyncJobResponse response = new AsyncJobResponse();
+
+ if(result.getUuid() != null && !result.getUuid().isEmpty())
+ response.setId(result.getUuid());
+ else
+ response.setId(String.valueOf(result.getJobId()));
+ response.setJobStatus(result.getJobStatus());
+ response.setJobProcStatus(result.getProcessStatus());
+ response.setJobResultCode(result.getResultCode());
+ response.setJobResult((ResponseObject) ApiSerializerHelper.fromSerializedString(result.getResult()));
+
+ Object resultObject = result.getResultObject();
+ if (resultObject != null) {
+ Class> clz = resultObject.getClass();
+ if (clz.isPrimitive() || clz.getSuperclass() == Number.class || clz == String.class || clz == Date.class) {
+ response.setJobResultType("text");
+ } else {
+ response.setJobResultType("object");
+ }
+ }
+
+ return response;
+ }
+
+ @Override
+ public SecurityGroupResponse createSecurityGroupResponseFromIngressRule(List extends IngressRule> ingressRules) {
+ SecurityGroupResponse response = new SecurityGroupResponse();
+ Map securiytGroupAccounts = new HashMap();
+ Map allowedSecurityGroups = new HashMap();
+ Map allowedSecuriytGroupAccounts = new HashMap();
+
+ if ((ingressRules != null) && !ingressRules.isEmpty()) {
+ SecurityGroup securityGroup = ApiDBUtils.findSecurityGroupById(ingressRules.get(0).getSecurityGroupId());
+ response.setId(securityGroup.getId());
+ response.setName(securityGroup.getName());
+ response.setDescription(securityGroup.getDescription());
+
+ Account account = securiytGroupAccounts.get(securityGroup.getAccountId());
+
+ if (account == null) {
+ account = ApiDBUtils.findAccountById(securityGroup.getAccountId());
+ securiytGroupAccounts.put(securityGroup.getAccountId(), account);
+ }
+
+ populateAccount(response, account.getId());
+ populateDomain(response, account.getDomainId());
+
+ List responses = new ArrayList();
+ for (IngressRule ingressRule : ingressRules) {
+ IngressRuleResponse ingressData = new IngressRuleResponse();
+
+ ingressData.setRuleId(ingressRule.getId());
+ ingressData.setProtocol(ingressRule.getProtocol());
+ if ("icmp".equalsIgnoreCase(ingressRule.getProtocol())) {
+ ingressData.setIcmpType(ingressRule.getStartPort());
+ ingressData.setIcmpCode(ingressRule.getEndPort());
+ } else {
+ ingressData.setStartPort(ingressRule.getStartPort());
+ ingressData.setEndPort(ingressRule.getEndPort());
+ }
+
+ Long allowedSecurityGroupId = ingressRule.getAllowedNetworkId();
+ if (allowedSecurityGroupId != null) {
+ SecurityGroup allowedSecurityGroup = allowedSecurityGroups.get(allowedSecurityGroupId);
+ if (allowedSecurityGroup == null) {
+ allowedSecurityGroup = ApiDBUtils.findSecurityGroupById(allowedSecurityGroupId);
+ allowedSecurityGroups.put(allowedSecurityGroupId, allowedSecurityGroup);
+ }
+
+ ingressData.setSecurityGroupName(allowedSecurityGroup.getName());
+
+ Account allowedAccount = allowedSecuriytGroupAccounts.get(allowedSecurityGroup.getAccountId());
+ if (allowedAccount == null) {
+ allowedAccount = ApiDBUtils.findAccountById(allowedSecurityGroup.getAccountId());
+ allowedSecuriytGroupAccounts.put(allowedAccount.getId(), allowedAccount);
+ }
+
+ ingressData.setAccountName(allowedAccount.getAccountName());
+ } else {
+ ingressData.setCidr(ingressRule.getAllowedSourceIpCidr());
+ }
+
+ ingressData.setObjectName("ingressrule");
+ responses.add(ingressData);
+ }
+ response.setIngressRules(responses);
+ response.setObjectName("securitygroup");
+
+ }
+ return response;
+ }
+
+ @Override
+ public SecurityGroupResponse createSecurityGroupResponseFromEgressRule(List extends EgressRule> egressRules) {
+ SecurityGroupResponse response = new SecurityGroupResponse();
+ Map securiytGroupAccounts = new HashMap();
+ Map allowedSecurityGroups = new HashMap();
+ Map allowedSecuriytGroupAccounts = new HashMap();
+
+ if ((egressRules != null) && !egressRules.isEmpty()) {
+ SecurityGroup securityGroup = ApiDBUtils.findSecurityGroupById(egressRules.get(0).getSecurityGroupId());
+ response.setId(securityGroup.getId());
+ response.setName(securityGroup.getName());
+ response.setDescription(securityGroup.getDescription());
+
+ Account account = securiytGroupAccounts.get(securityGroup.getAccountId());
+
+ if (account == null) {
+ account = ApiDBUtils.findAccountById(securityGroup.getAccountId());
+ securiytGroupAccounts.put(securityGroup.getAccountId(), account);
+ }
+
+ populateAccount(response, account.getId());
+ populateDomain(response, account.getDomainId());
+
+
+ List responses = new ArrayList();
+ for (EgressRule egressRule : egressRules) {
+ EgressRuleResponse egressData = new EgressRuleResponse();
+
+ egressData.setRuleId(egressRule.getId());
+ egressData.setProtocol(egressRule.getProtocol());
+ if ("icmp".equalsIgnoreCase(egressRule.getProtocol())) {
+ egressData.setIcmpType(egressRule.getStartPort());
+ egressData.setIcmpCode(egressRule.getEndPort());
+ } else {
+ egressData.setStartPort(egressRule.getStartPort());
+ egressData.setEndPort(egressRule.getEndPort());
+ }
+
+ Long allowedSecurityGroupId = egressRule.getAllowedNetworkId();
+ if (allowedSecurityGroupId != null) {
+ SecurityGroup allowedSecurityGroup = allowedSecurityGroups.get(allowedSecurityGroupId);
+ if (allowedSecurityGroup == null) {
+ allowedSecurityGroup = ApiDBUtils.findSecurityGroupById(allowedSecurityGroupId);
+ allowedSecurityGroups.put(allowedSecurityGroupId, allowedSecurityGroup);
+ }
+
+ egressData.setSecurityGroupName(allowedSecurityGroup.getName());
+
+ Account allowedAccount = allowedSecuriytGroupAccounts.get(allowedSecurityGroup.getAccountId());
+ if (allowedAccount == null) {
+ allowedAccount = ApiDBUtils.findAccountById(allowedSecurityGroup.getAccountId());
+ allowedSecuriytGroupAccounts.put(allowedAccount.getId(), allowedAccount);
+ }
+
+ egressData.setAccountName(allowedAccount.getAccountName());
+ } else {
+ egressData.setCidr(egressRule.getAllowedDestinationIpCidr());
+ }
+
+ egressData.setObjectName("egressrule");
+ responses.add(egressData);
+ }
+ response.setEgressRules(responses);
+ response.setObjectName("securitygroup");
+
+ }
+ return response;
+ }
+
+ @Override
+ public NetworkOfferingResponse createNetworkOfferingResponse(NetworkOffering offering) {
+ NetworkOfferingResponse response = new NetworkOfferingResponse();
+ response.setId(offering.getId());
+ response.setName(offering.getName());
+ response.setDisplayText(offering.getDisplayText());
+ response.setTags(offering.getTags());
+ response.setTrafficType(offering.getTrafficType().toString());
+ response.setMaxconnections(offering.getConcurrentConnections());
+ response.setIsDefault(offering.isDefault());
+ response.setSpecifyVlan(offering.getSpecifyVlan());
+ response.setAvailability(offering.getAvailability().toString());
+ response.setNetworkRate(ApiDBUtils.getNetworkRate(offering.getId()));
+ response.setRedundantRouter(offering.getRedundantRouter());
+
+ if (offering.getGuestType() != null) {
+ response.setGuestIpType(offering.getGuestType().toString());
+ }
+
+ response.setObjectName("networkoffering");
+ return response;
+ }
+
+ @Override
+ public NetworkResponse createNetworkResponse(Network network) {
+ // need to get network profile in order to retrieve dns information from there
+ NetworkProfile profile = ApiDBUtils.getNetworkProfile(network.getId());
+ NetworkResponse response = new NetworkResponse();
+ response.setId(network.getId());
+ response.setName(network.getName());
+ response.setDisplaytext(network.getDisplayText());
+ if (network.getBroadcastDomainType() != null) {
+ response.setBroadcastDomainType(network.getBroadcastDomainType().toString());
+ }
+ if (network.getBroadcastUri() != null) {
+ response.setBroadcastUri(network.getBroadcastUri().toString());
+ }
+
+ if (network.getTrafficType() != null) {
+ response.setTrafficType(network.getTrafficType().name());
+ }
+
+ if (network.getGuestType() != null) {
+ response.setType(network.getGuestType().name());
+ }
+
+ // get start ip and end ip of corresponding vlan
+ List extends Vlan> vlan = ApiDBUtils.listVlanByNetworkId(network.getId());
+ if (vlan != null && !vlan.isEmpty()) {
+ Vlan singleVlan = vlan.get(0);
+ String ipRange = singleVlan.getIpRange();
+ String[] range = ipRange.split("-");
+ response.setStartIp(range[0]);
+ response.setEndIp(range[1]);
+ response.setGateway(singleVlan.getVlanGateway());
+ response.setNetmask(singleVlan.getVlanNetmask());
+ response.setVlan(singleVlan.getVlanTag());
+ }
+
+ response.setZoneId(network.getDataCenterId());
+
+ // populate network offering information
+ NetworkOffering networkOffering = ApiDBUtils.findNetworkOfferingById(network.getNetworkOfferingId());
+ if (networkOffering != null) {
+ response.setNetworkOfferingId(networkOffering.getId());
+ response.setNetworkOfferingName(networkOffering.getName());
+ response.setNetworkOfferingDisplayText(networkOffering.getDisplayText());
+ response.setIsSystem(networkOffering.isSystemOnly());
+ response.setNetworkOfferingAvailability(networkOffering.getAvailability().toString());
+ }
+
+ response.setIsShared(network.getIsShared());
+ response.setIsDefault(network.isDefault());
+ response.setState(network.getState().toString());
+ response.setRelated(network.getRelated());
+ response.setNetworkDomain(network.getNetworkDomain());
+
+ response.setDns1(profile.getDns1());
+ response.setDns2(profile.getDns2());
+
+ response.setIsSecurityGroupEnabled(network.isSecurityGroupEnabled());
+ response.setTags(network.getTags());
+
+ // populate capability
+ Map> serviceCapabilitiesMap = ApiDBUtils.getNetworkCapabilities(networkOffering.getId(), network.getDataCenterId());
+ List serviceResponses = new ArrayList();
+ if (serviceCapabilitiesMap != null) {
+ for (Service service : serviceCapabilitiesMap.keySet()) {
+ ServiceResponse serviceResponse = new ServiceResponse();
+ serviceResponse.setName(service.getName());
+
+ // set list of capabilities for the service
+ List capabilityResponses = new ArrayList();
+ Map serviceCapabilities = serviceCapabilitiesMap.get(service);
+ if (serviceCapabilities != null) {
+ for (Capability capability : serviceCapabilities.keySet()) {
+ CapabilityResponse capabilityResponse = new CapabilityResponse();
+ String capabilityValue = serviceCapabilities.get(capability);
+ capabilityResponse.setName(capability.getName());
+ capabilityResponse.setValue(capabilityValue);
+ capabilityResponse.setObjectName("capability");
+ capabilityResponses.add(capabilityResponse);
+ }
+ serviceResponse.setCapabilities(capabilityResponses);
+ }
+
+ serviceResponse.setObjectName("service");
+ serviceResponses.add(serviceResponse);
+ }
+ }
+ response.setServices(serviceResponses);
+
+ populateOwner(response, network);
+
+ Long dedicatedDomainId = ApiDBUtils.getDedicatedNetworkDomain(network.getId());
+ if (dedicatedDomainId != null) {
+ Domain domain = ApiDBUtils.findDomainById(dedicatedDomainId);
+ response.setDomainId(dedicatedDomainId);
+ response.setDomainName(domain.getName());
+ }
+
+ response.setObjectName("network");
+ return response;
+ }
+
+ @Override
+ public Long getSecurityGroupId (String groupName, long accountId) {
+ SecurityGroup sg = ApiDBUtils.getSecurityGroup(groupName, accountId);
+ if (sg == null) {
+ return null;
+ } else {
+ return sg.getId();
+ }
+ }
+
+ @Override
+ public ProjectResponse createProjectResponse(Project project) {
+ ProjectResponse response = new ProjectResponse();
+ response.setId(project.getId());
+ response.setName(project.getName());
+ response.setDisplaytext(project.getDisplayText());
+ response.setState(project.getState().toString());
+
+ Domain domain = ApiDBUtils.findDomainById(project.getDomainId());
+ response.setDomainId(domain.getId());
+ response.setDomain(domain.getName());
+
+ response.setOwner(ApiDBUtils.getProjectOwner(project.getId()).getAccountName());
+
+ response.setObjectName("project");
+ return response;
+ }
+
+
+ public FirewallResponse createFirewallResponse(FirewallRule fwRule) {
+ FirewallResponse response = new FirewallResponse();
+
+ response.setId(fwRule.getId());
+ response.setProtocol(fwRule.getProtocol());
+ if (fwRule.getSourcePortStart() != null) {
+ response.setStartPort(Integer.toString(fwRule.getSourcePortStart()));
+ }
+
+ if (fwRule.getSourcePortEnd() != null) {
+ response.setEndPort(Integer.toString(fwRule.getSourcePortEnd()));
+ }
+
+ List cidrs = ApiDBUtils.findFirewallSourceCidrs(fwRule.getId());
+ response.setCidrList(StringUtils.join(cidrs, ","));
+
+ IpAddress ip = ApiDBUtils.findIpAddressById(fwRule.getSourceIpAddressId());
+ response.setPublicIpAddressId(ip.getId());
+ response.setPublicIpAddress(ip.getAddress().addr());
+
+ FirewallRule.State state = fwRule.getState();
+ String stateToSet = state.toString();
+ if (state.equals(FirewallRule.State.Revoke)) {
+ stateToSet = "Deleting";
+ }
+
+ response.setIcmpCode(fwRule.getIcmpCode());
+ response.setIcmpType(fwRule.getIcmpType());
+
+ response.setState(stateToSet);
+ response.setObjectName("firewallrule");
+ return response;
+ }
+
+
+
+ public UserVmData newUserVmData(UserVm userVm){
+ UserVmData userVmData = new UserVmData();
+ userVmData.setId(userVm.getId());
+ userVmData.setName(userVm.getHostName());
+ userVmData.setCreated(userVm.getCreated());
+ userVmData.setGuestOsId(userVm.getGuestOSId());
+ userVmData.setHaEnable(userVm.isHaEnabled());
+ if (userVm.getState() != null) {
+ userVmData.setState(userVm.getState().toString());
+ }
+ if (userVm.getDisplayName() != null) {
+ userVmData.setDisplayName(userVm.getDisplayName());
+ } else {
+ userVmData.setDisplayName(userVm.getHostName());
+ }
+ userVmData.setDomainId(userVm.getDomainId());
+
+ if (userVm.getHypervisorType() != null) {
+ userVmData.setHypervisor(userVm.getHypervisorType().toString());
+ }
+
+ if (userVm.getPassword() != null) {
+ userVmData.setPassword(userVm.getPassword());
+ }
+ return userVmData;
+ }
+
+ public UserVmResponse newUserVmResponse(UserVmData userVmData, boolean caller_is_admin){
+ UserVmResponse userVmResponse = new UserVmResponse();
+ userVmResponse.setHypervisor(userVmData.getHypervisor());
+ if(userVmData.getUuid() != null && !userVmData.getUuid().isEmpty())
+ userVmResponse.setId(userVmData.getUuid());
+ else
+ userVmResponse.setId(String.valueOf(userVmData.getId()));
+ userVmResponse.setName(userVmData.getName());
+ userVmResponse.setDisplayName(userVmData.getDisplayName());
+ userVmResponse.setIpAddress(userVmData.getIpAddress());
+
+ populateAccount(userVmResponse, userVmData.getAccountId());
+ populateDomain(userVmResponse, userVmData.getDomainId());
+
+ userVmResponse.setCreated(userVmData.getCreated());
+ userVmResponse.setState(userVmData.getState());
+ userVmResponse.setHaEnable(userVmData.getHaEnable());
+ userVmResponse.setGroupId(userVmData.getGroupId());
+ userVmResponse.setGroup(userVmData.getGroup());
+ userVmResponse.setZoneId(userVmData.getZoneId());
+ userVmResponse.setZoneName(userVmData.getZoneName());
+ if (caller_is_admin){
+ userVmResponse.setHostId(userVmData.getHostId());
+ userVmResponse.setHostName(userVmData.getHostName());
+ }
+ userVmResponse.setTemplateId(userVmData.getTemplateId());
+ userVmResponse.setTemplateName(userVmData.getTemplateName());
+ userVmResponse.setTemplateDisplayText(userVmData.getTemplateDisplayText());
+ userVmResponse.setPasswordEnabled(userVmData.getPasswordEnabled());
+ userVmResponse.setIsoId(userVmData.getIsoId());
+ userVmResponse.setIsoName(userVmData.getIsoName());
+ userVmResponse.setIsoDisplayText(userVmData.getIsoDisplayText());
+ userVmResponse.setServiceOfferingId(userVmData.getServiceOfferingId());
+ userVmResponse.setServiceOfferingName(userVmData.getServiceOfferingName());
+ userVmResponse.setCpuNumber(userVmData.getCpuNumber());
+ userVmResponse.setCpuSpeed(userVmData.getCpuSpeed());
+ userVmResponse.setMemory(userVmData.getMemory());
+ userVmResponse.setCpuUsed(userVmData.getCpuUsed());
+ userVmResponse.setNetworkKbsRead(userVmData.getNetworkKbsRead());
+ userVmResponse.setNetworkKbsWrite(userVmData.getNetworkKbsWrite());
+ userVmResponse.setGuestOsId(userVmData.getGuestOsId());
+ userVmResponse.setRootDeviceId(userVmData.getRootDeviceId());
+ userVmResponse.setRootDeviceType(userVmData.getRootDeviceType());
+ userVmResponse.setPassword(userVmData.getPassword());
+ userVmResponse.setJobId(userVmData.getJobId());
+ userVmResponse.setJobStatus(userVmData.getJobStatus());
+ userVmResponse.setForVirtualNetwork(userVmData.getForVirtualNetwork());
+
+ Set securityGroupResponse = new HashSet();
+ for (SecurityGroupData sgd: userVmData.getSecurityGroupList()){
+ SecurityGroupResponse sgr = new SecurityGroupResponse();
+ sgr.setId(sgd.getId());
+ sgr.setName(sgd.getName());
+ sgr.setDescription(sgd.getDescription());
+
+ Account account = ApiDBUtils.findAccountByNameDomain(sgd.getAccountName(), sgd.getDomainId());
+ if (account != null) {
+ populateAccount(sgr, account.getId());
+ populateDomain(sgr, sgd.getDomainId());
+ }
+
+ sgr.setObjectName(sgd.getObjectName());
+ securityGroupResponse.add(sgr);
+ }
+ userVmResponse.setSecurityGroupList(new ArrayList(securityGroupResponse));
+
+ Set nicResponses = new HashSet();
+ for (NicData nd: userVmData.getNics()){
+ NicResponse nr = new NicResponse();
+ nr.setId(nd.getId());
+ nr.setNetworkid(nd.getNetworkid());
+ nr.setNetmask(nd.getNetmask());
+ nr.setGateway(nd.getGateway());
+ nr.setIpaddress(nd.getIpaddress());
+ nr.setIsolationUri(nd.getIsolationUri());
+ nr.setBroadcastUri(nd.getBroadcastUri());
+ nr.setTrafficType(nd.getTrafficType());
+ nr.setType(nd.getType());
+ nr.setIsDefault(nd.getIsDefault());
+ nr.setMacAddress(nd.getMacAddress());
+ nr.setObjectName(nd.getObjectName());
+ nicResponses.add(nr);
+ }
+ userVmResponse.setNics(new ArrayList(nicResponses));
+
+ return userVmResponse;
+ }
+
+ public HypervisorCapabilitiesResponse createHypervisorCapabilitiesResponse(HypervisorCapabilities hpvCapabilities){
+ HypervisorCapabilitiesResponse hpvCapabilitiesResponse = new HypervisorCapabilitiesResponse();
+ hpvCapabilitiesResponse.setId(hpvCapabilities.getId());
+ hpvCapabilitiesResponse.setHypervisor(hpvCapabilities.getHypervisorType());
+ hpvCapabilitiesResponse.setHypervisorVersion(hpvCapabilities.getHypervisorVersion());
+ hpvCapabilitiesResponse.setIsSecurityGroupEnabled(hpvCapabilities.isSecurityGroupEnabled());
+ hpvCapabilitiesResponse.setMaxGuestsLimit(hpvCapabilities.getMaxGuestsLimit());
+ return hpvCapabilitiesResponse;
+ }
+
+ private void populateOwner(ControlledEntityResponse response, ControlledEntity object) {
+ Account account = ApiDBUtils.findAccountByIdIncludingRemoved(object.getAccountId());
+
+ if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
+ //find the project
+ Project project = ApiDBUtils.findProjectByProjectAccountId(account.getId());
+ response.setProjectId(project.getId());
+ response.setProjectName(project.getName());
+ } else {
+ response.setAccountName(account.getAccountName());
+ }
+
+ Domain domain = ApiDBUtils.findDomainById(object.getDomainId());
+ if (domain != null) {
+ response.setDomainId(domain.getId());
+ response.setDomainName(domain.getName());
+ }
+ }
+
+ private void populateAccount(ControlledEntityResponse response, long accountId) {
+ Account account = ApiDBUtils.findAccountByIdIncludingRemoved(accountId);
+ if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) {
+ //find the project
+ Project project = ApiDBUtils.findProjectByProjectAccountId(account.getId());
+ response.setProjectId(project.getId());
+ response.setProjectName(project.getName());
+ } else {
+ response.setAccountName(account.getAccountName());
+ }
+ }
+
+ private void populateDomain(ControlledEntityResponse response, long domainId) {
+ Domain domain = ApiDBUtils.findDomainById(domainId);
+
+ response.setDomainId(domain.getId());
+ response.setDomainName(domain.getName());
+
+ }
+
+ @Override
+ public ProjectAccountResponse createProjectAccountResponse(ProjectAccount projectAccount) {
+ Account account = ApiDBUtils.findAccountById(projectAccount.getAccountId());
+ ProjectAccountResponse projectAccountResponse = new ProjectAccountResponse();
+
+ long projectId = projectAccount.getProjectId();
+ projectAccountResponse.setProjectId(projectId);
+ projectAccountResponse.setProjectName(ApiDBUtils.findProjectById(projectId).getName());
+
+ projectAccountResponse.setId(account.getId());
+ projectAccountResponse.setAccountName(account.getAccountName());
+ projectAccountResponse.setAccountType(account.getType());
+ projectAccountResponse.setRole(projectAccount.getAccountRole().toString());
+ populateDomain(projectAccountResponse, account.getDomainId());
+
+ // add all the users for an account as part of the response obj
+ List usersForAccount = ApiDBUtils.listUsersByAccount(account.getAccountId());
+ List userResponseList = new ArrayList();
+ for (UserVO user : usersForAccount) {
+ UserResponse userResponse = createUserResponse(user);
+ userResponseList.add(userResponse);
+ }
+
+ projectAccountResponse.setUsers(userResponseList);
+ projectAccountResponse.setObjectName("projectaccount");
+
+ return projectAccountResponse;
+ }
+
+ @Override
+ public ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite) {
+ ProjectInvitationResponse response = new ProjectInvitationResponse();
+ response.setId(invite.getId());
+ response.setProjectId(invite.getProjectId());
+ response.setProjectName(ApiDBUtils.findProjectById(invite.getProjectId()).getName());
+ response.setInvitationState(invite.getState().toString());
+
+ if (invite.getAccountId() != null) {
+ Account account = ApiDBUtils.findAccountById(invite.getAccountId());
+ response.setAccountName(account.getAccountName());
+
+ } else {
+ response.setEmail(invite.getEmail());
+ }
+
+ populateDomain(response, invite.getDomainId());
+
+ response.setObjectName("projectinvitation");
+ return response;
+ }
+
+ @Override
+ public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm){
+ SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse();
+ vmResponse.setId(vm.getId());
+ vmResponse.setSystemVmType(vm.getType().toString().toLowerCase());
+ vmResponse.setName(vm.getHostName());
+ if (vm.getHostId() != null) {
+ vmResponse.setHostId(vm.getHostId());
+ }
+ if (vm.getState() != null) {
+ vmResponse.setState(vm.getState().toString());
+ }
+ if (vm.getType() == Type.DomainRouter) {
+ VirtualRouter router = (VirtualRouter)vm;
+ if(router.getRole() != null){
+ vmResponse.setRole(router.getRole().toString());
+ }
+ }
+ vmResponse.setObjectName("systemvminstance");
+ return vmResponse;
+ }
+}
diff --git a/server/src/com/cloud/api/IdentityTypeAdapter.java b/server/src/com/cloud/api/IdentityTypeAdapter.java
new file mode 100644
index 00000000000..49541a48c0f
--- /dev/null
+++ b/server/src/com/cloud/api/IdentityTypeAdapter.java
@@ -0,0 +1,57 @@
+/**
+ * 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;
+
+import java.lang.reflect.Type;
+
+import com.cloud.identity.dao.IdentityDao;
+import com.cloud.identity.dao.IdentityDaoImpl;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+
+public class IdentityTypeAdapter implements JsonSerializer, JsonDeserializer {
+ @Override
+ public JsonElement serialize(IdentityProxy src, Type srcType, JsonSerializationContext context) {
+ assert(src != null);
+ assert(src.getTableName() != null);
+
+ if(src.getValue() == null)
+ return null;
+
+ IdentityDao identityDao = new IdentityDaoImpl();
+ if(src.getValue() == null)
+ return context.serialize(null);
+
+ return new JsonPrimitive(identityDao.getIdentityUuid(src.getTableName(), String.valueOf(src.getValue())));
+ }
+
+ @Override
+ public IdentityProxy deserialize(JsonElement json, Type type,
+ JsonDeserializationContext context) throws JsonParseException {
+
+ // this is a place holder implementation to guard our assumption - IdentityProxy is only used
+ // on one-direction
+ assert(false);
+ return null;
+ }
+}
diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java
index 652b922c815..ced590a7964 100644
--- a/server/src/com/cloud/async/AsyncJobManagerImpl.java
+++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java
@@ -330,7 +330,8 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe
jobResult.setJobStatus(job.getStatus());
jobResult.setProcessStatus(job.getProcessStatus());
jobResult.setResult(job.getResult());
- jobResult.setResultCode(job.getResultCode());
+ jobResult.setResultCode(job.getResultCode());
+ jobResult.setUuid(job.getUuid());
if(job.getStatus() == AsyncJobResult.STATUS_SUCCEEDED ||
job.getStatus() == AsyncJobResult.STATUS_FAILED) {
diff --git a/server/src/com/cloud/async/AsyncJobResult.java b/server/src/com/cloud/async/AsyncJobResult.java
index 8fd4e4d0f96..ef869b00f73 100644
--- a/server/src/com/cloud/async/AsyncJobResult.java
+++ b/server/src/com/cloud/async/AsyncJobResult.java
@@ -30,7 +30,8 @@ public class AsyncJobResult {
private int jobStatus;
private int processStatus;
private int resultCode;
- private String result;
+ private String result;
+ private String uuid;
public AsyncJobResult(long jobId) {
this.jobId = jobId;
@@ -54,6 +55,14 @@ public class AsyncJobResult {
public void setJobId(long jobId) {
this.jobId = jobId;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
}
public int getJobStatus() {
diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java
index eeb08f0baef..b8ff604d1c5 100755
--- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java
+++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java
@@ -22,7 +22,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import com.cloud.Identity.dao.IdentityDaoImpl;
import com.cloud.agent.manager.ClusteredAgentManagerImpl;
import com.cloud.alert.AlertManagerImpl;
import com.cloud.alert.dao.AlertDaoImpl;
@@ -66,6 +65,8 @@ import com.cloud.host.dao.HostDetailsDaoImpl;
import com.cloud.host.dao.HostTagsDaoImpl;
import com.cloud.hypervisor.HypervisorGuruManagerImpl;
import com.cloud.hypervisor.dao.HypervisorCapabilitiesDaoImpl;
+import com.cloud.identity.IdentityServiceImpl;
+import com.cloud.identity.dao.IdentityDaoImpl;
import com.cloud.keystore.KeystoreDaoImpl;
import com.cloud.keystore.KeystoreManagerImpl;
import com.cloud.maint.UpgradeManagerImpl;
@@ -332,6 +333,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
addManager("HypervisorGuruManager", HypervisorGuruManagerImpl.class);
addManager("ClusterFenceManager", ClusterFenceManagerImpl.class);
addManager("ResourceManager", ResourceManagerImpl.class);
+ addManager("IdentityManager", IdentityServiceImpl.class);
addManager("OCFS2Manager", OCFS2ManagerImpl.class);
addManager("FirewallManager", FirewallManagerImpl.class);
diff --git a/server/src/com/cloud/identity/IdentityServiceImpl.java b/server/src/com/cloud/identity/IdentityServiceImpl.java
new file mode 100644
index 00000000000..87c56dbe804
--- /dev/null
+++ b/server/src/com/cloud/identity/IdentityServiceImpl.java
@@ -0,0 +1,67 @@
+/**
+ * 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.identity;
+
+import java.util.Map;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+
+import com.cloud.api.IdentityMapper;
+import com.cloud.api.IdentityService;
+import com.cloud.identity.dao.IdentityDao;
+import com.cloud.utils.component.Inject;
+import com.cloud.utils.component.Manager;
+
+@Local(value = { IdentityService.class })
+public class IdentityServiceImpl implements Manager, IdentityService {
+ private String _name;
+
+ @Inject private IdentityDao _identityDao;
+
+ public Long getIdentityId(IdentityMapper mapper, String identityString) {
+ return _identityDao.getIdentityId(mapper, identityString);
+ }
+
+ public String getIdentityUuid(String tableName, String identityString) {
+ return _identityDao.getIdentityUuid(tableName, identityString);
+ }
+
+ @Override
+ public boolean configure(String name, Map params)
+ throws ConfigurationException {
+ _name = name;
+
+ return true;
+ }
+
+ @Override
+ public String getName() {
+ return _name;
+ }
+
+ @Override
+ public boolean start() {
+ return true;
+ }
+
+ @Override
+ public boolean stop() {
+ return true;
+ }
+}
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 128cabd5ed6..416fcd72a39 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -1161,6 +1161,7 @@ CREATE TABLE `cloud`.`async_job` (
`last_updated` datetime COMMENT 'date created',
`last_polled` datetime COMMENT 'date polled',
`removed` datetime COMMENT 'date removed',
+ `uuid` varchar(255),
PRIMARY KEY (`id`),
INDEX `i_async_job__removed`(`removed`),
INDEX `i_async__user_id`(`user_id`),
@@ -1169,7 +1170,8 @@ CREATE TABLE `cloud`.`async_job` (
INDEX `i_async__job_cmd`(`job_cmd`),
INDEX `i_async__created`(`created`),
INDEX `i_async__last_updated`(`last_updated`),
- INDEX `i_async__last_poll`(`last_polled`)
+ INDEX `i_async__last_poll`(`last_polled`),
+ CONSTRAINT `uc_async__uuid` UNIQUE (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `cloud`.`sync_queue` (
diff --git a/setup/db/db/schema-2213to30.sql b/setup/db/db/schema-2213to30.sql
index 7312089f83e..da51ede9545 100755
--- a/setup/db/db/schema-2213to30.sql
+++ b/setup/db/db/schema-2213to30.sql
@@ -119,3 +119,6 @@ ALTER TABLE `cloud`.`user_statistics` ADD COLUMN `agg_bytes_received` bigint uns
ALTER TABLE `cloud`.`user_statistics` ADD COLUMN `agg_bytes_sent` bigint unsigned NOT NULL default '0';
ALTER TABLE `cloud`.`vm_instance` ADD COLUMN `uuid` varchar(255);
ALTER TABLE `cloud`.`vm_instance` ADD CONSTRAINT `uc_vm_instance_uuid` UNIQUE (`uuid`);
+
+ALTER TABLE `cloud`.`async_job` ADD COLUMN `uuid` varchar(255);
+ALTER TABLE `cloud`.`async_job` ADD CONSTRAINT `uc_async__uuid` UNIQUE (`uuid`);