You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by fr...@apache.org on 2013/01/31 23:40:12 UTC
[6/6] git commit: refs/heads/javelin - Merge branch 'ucs' into javelin
Updated Branches:
refs/heads/javelin 1b2b369ec -> 8416d81b9
Merge branch 'ucs' into javelin
Conflicts:
api/src/org/apache/cloudstack/api/ApiConstants.java
plugins/pom.xml
utils/src/com/cloud/utils/exception/CloudRuntimeException.java
utils/src/com/cloud/utils/exception/RuntimeCloudException.java
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/8416d81b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/8416d81b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/8416d81b
Branch: refs/heads/javelin
Commit: 8416d81b990f03407e247eabaa060256c899f794
Parents: 1b2b369 1a1d716
Author: frank <fr...@citrix.com>
Authored: Thu Jan 31 14:44:07 2013 -0800
Committer: frank <fr...@citrix.com>
Committed: Thu Jan 31 14:44:07 2013 -0800
----------------------------------------------------------------------
.../org/apache/cloudstack/api/ApiConstants.java | 1 +
plugins/hypervisors/ucs/pom.xml | 37 ++
.../src/com/cloud/ucs/database/UcsBladeDao.java | 7 +
.../com/cloud/ucs/database/UcsBladeDaoImpl.java | 11 +
.../ucs/src/com/cloud/ucs/database/UcsBladeVO.java | 69 ++++
.../src/com/cloud/ucs/database/UcsManagerDao.java | 16 +
.../com/cloud/ucs/database/UcsManagerDaoImpl.java | 12 +
.../src/com/cloud/ucs/database/UcsManagerVO.java | 78 ++++
.../com/cloud/ucs/manager/AddUcsManagerCmd.java | 108 ++++++
.../cloud/ucs/manager/AddUcsManagerResponse.java | 53 +++
.../ucs/manager/AssociateUcsProfileToBladeCmd.java | 76 ++++
...sociateUcsProfileToBladesInClusterResponse.java | 6 +
.../com/cloud/ucs/manager/ListUcsManagerCmd.java | 62 +++
.../cloud/ucs/manager/ListUcsManagerResponse.java | 42 +++
.../com/cloud/ucs/manager/ListUcsProfileCmd.java | 63 ++++
.../cloud/ucs/manager/ListUcsProfileResponse.java | 20 +
.../src/com/cloud/ucs/manager/StringTemplate.java | 22 ++
.../ucs/src/com/cloud/ucs/manager/UcsCommands.java | 83 +++++
.../src/com/cloud/ucs/manager/UcsHttpClient.java | 33 ++
.../ucs/src/com/cloud/ucs/manager/UcsManager.java | 15 +
.../src/com/cloud/ucs/manager/UcsManagerImpl.java | 288 +++++++++++++++
.../src/com/cloud/ucs/structure/ComputeBlade.java | 165 +++++++++
.../src/com/cloud/ucs/structure/UcsProfile.java | 37 ++
plugins/pom.xml | 5 +-
.../utils/exception/CloudRuntimeException.java | 4 +
utils/src/com/cloud/utils/xmlobject/XmlObject.java | 177 +++++++++
.../com/cloud/utils/xmlobject/XmlObjectParser.java | 107 ++++++
.../com/cloud/utils/xmlobject/TestXmlObject.java | 29 ++
.../com/cloud/utils/xmlobject/TestXmlObject2.java | 37 ++
29 files changed, 1661 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8416d81b/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --cc api/src/org/apache/cloudstack/api/ApiConstants.java
index b80514d,fa136a3..e714ca4
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@@ -427,7 -426,7 +427,8 @@@ public class ApiConstants
public static final String CONDITION_IDS = "conditionids";
public static final String COUNTERPARAM_LIST = "counterparam";
public static final String AUTOSCALE_USER_ID = "autoscaleuserid";
+ public static final String BAREMETAL_DISCOVER_NAME = "baremetaldiscovername";
+ public static final String UCS_DN = "ucsdn";
public enum HostDetails {
all, capacity, events, stats, min;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8416d81b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerCmd.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerCmd.java
index 0000000,6d4e6b2..1e405c1
mode 000000,100755..100755
--- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerCmd.java
+++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AddUcsManagerCmd.java
@@@ -1,0 -1,107 +1,108 @@@
+ package com.cloud.ucs.manager;
+
+ import javax.inject.Inject;
+
+ import org.apache.cloudstack.api.APICommand;
+ import org.apache.cloudstack.api.ApiConstants;
++import org.apache.cloudstack.api.ApiErrorCode;
+ import org.apache.cloudstack.api.BaseCmd;
+ import org.apache.cloudstack.api.BaseCmd.CommandType;
+ import org.apache.cloudstack.api.Parameter;
+ import org.apache.cloudstack.api.ServerApiException;
+ import org.apache.log4j.Logger;
+
+ import com.cloud.exception.ConcurrentOperationException;
+ import com.cloud.exception.InsufficientCapacityException;
+ import com.cloud.exception.NetworkRuleConflictException;
+ import com.cloud.exception.ResourceAllocationException;
+ import com.cloud.exception.ResourceUnavailableException;
+ import com.cloud.server.ManagementService;
+ import com.cloud.user.Account;
+
+ @APICommand(description="Adds a Ucs manager", responseObject=AddUcsManagerResponse.class)
+ public class AddUcsManagerCmd extends BaseCmd {
+ public static final Logger s_logger = Logger.getLogger(AddUcsManagerCmd.class);
+
+ @Inject
+ private UcsManager mgr;
+
+ @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the Zone id for the ucs manager", required=true)
+ private Long zoneId;
+
+ @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="the name of UCS manager")
+ private String name;
+
+ @Parameter(name=ApiConstants.URL, type=CommandType.STRING, description="the name of UCS url")
+ private String url;
+
+ @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, description="the username of UCS")
+ private String username;
+
+ @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, description="the password of UCS")
+ private String password;
+
+ @Override
+ public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
+ ResourceAllocationException, NetworkRuleConflictException {
+ try {
+ AddUcsManagerResponse rsp = mgr.addUcsManager(this);
+ rsp.setObjectName("ucsmanager");
+ rsp.setResponseName(getCommandName());
+ this.setResponseObject(rsp);
+ } catch (Exception e) {
+ s_logger.warn("Exception: ", e);
- throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage());
++ throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
+ }
+ }
+
+ @Override
+ public String getCommandName() {
+ return "addUcsManagerResponse";
+ }
+
+ @Override
+ public long getEntityOwnerId() {
+ return Account.ACCOUNT_ID_SYSTEM;
+ }
+
+ public Long getZoneId() {
+ return zoneId;
+ }
+
+ public void setZoneId(Long zoneId) {
+ this.zoneId = zoneId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8416d81b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladeCmd.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladeCmd.java
index 0000000,2d384d1..7de9f78
mode 000000,100755..100755
--- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladeCmd.java
+++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/AssociateUcsProfileToBladeCmd.java
@@@ -1,0 -1,75 +1,76 @@@
+ package com.cloud.ucs.manager;
+
+ import javax.inject.Inject;
+
+ import org.apache.cloudstack.api.APICommand;
++import org.apache.cloudstack.api.ApiErrorCode;
+ import org.apache.cloudstack.api.BaseCmd;
+ import org.apache.cloudstack.api.ServerApiException;
+ import org.apache.log4j.Logger;
+
+ import com.cloud.exception.ConcurrentOperationException;
+ import com.cloud.exception.InsufficientCapacityException;
+ import com.cloud.exception.NetworkRuleConflictException;
+ import com.cloud.exception.ResourceAllocationException;
+ import com.cloud.exception.ResourceUnavailableException;
+ import com.cloud.user.Account;
+ @APICommand(description="associate a profile to a blade", responseObject=AssociateUcsProfileToBladesInClusterResponse.class)
+ public class AssociateUcsProfileToBladeCmd extends BaseCmd {
+ public static final Logger s_logger = Logger.getLogger(AssociateUcsProfileToBladeCmd.class);
+
+ @Inject
+ private UcsManager mgr;
+
+ private Long ucsManagerId;
+ private String profileDn;
+ private Long bladeId;
+
+ @Override
+ public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
+ ResourceAllocationException, NetworkRuleConflictException {
+ try {
+ mgr.associateProfileToBlade(this);
+ AssociateUcsProfileToBladesInClusterResponse rsp = new AssociateUcsProfileToBladesInClusterResponse();
+ rsp.setResponseName(getCommandName());
+ rsp.setObjectName("associateucsprofiletobalde");
+ this.setResponseObject(rsp);
+ } catch (Exception e) {
+ s_logger.warn("Exception: ", e);
- throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage());
++ throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
+ }
+ }
+
+ @Override
+ public String getCommandName() {
+ return "associateucsprofiletobladeresponse";
+ }
+
+ @Override
+ public long getEntityOwnerId() {
+ return Account.ACCOUNT_ID_SYSTEM;
+ }
+
+ public Long getUcsManagerId() {
+ return ucsManagerId;
+ }
+
+ public void setUcsManagerId(Long ucsManagerId) {
+ this.ucsManagerId = ucsManagerId;
+ }
+
+ public String getProfileDn() {
+ return profileDn;
+ }
+
+ public void setProfileDn(String profileDn) {
+ this.profileDn = profileDn;
+ }
+
+ public Long getBladeId() {
+ return bladeId;
+ }
+
+ public void setBladeId(Long bladeId) {
+ this.bladeId = bladeId;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8416d81b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerCmd.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerCmd.java
index 0000000,53dd0c0..53b09a2
mode 000000,100755..100755
--- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerCmd.java
+++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsManagerCmd.java
@@@ -1,0 -1,61 +1,62 @@@
+ package com.cloud.ucs.manager;
+
+ import javax.inject.Inject;
+
+ import org.apache.cloudstack.api.APICommand;
+ import org.apache.cloudstack.api.ApiConstants;
++import org.apache.cloudstack.api.ApiErrorCode;
+ import org.apache.cloudstack.api.BaseCmd;
+ import org.apache.cloudstack.api.Parameter;
+ import org.apache.cloudstack.api.ServerApiException;
+ import org.apache.cloudstack.api.response.ListResponse;
+ import org.apache.log4j.Logger;
+
+ import com.cloud.exception.ConcurrentOperationException;
+ import com.cloud.exception.InsufficientCapacityException;
+ import com.cloud.exception.NetworkRuleConflictException;
+ import com.cloud.exception.ResourceAllocationException;
+ import com.cloud.exception.ResourceUnavailableException;
+ import com.cloud.server.ManagementService;
+ import com.cloud.user.Account;
+ @APICommand(description="List ucs manager", responseObject=ListUcsManagerResponse.class)
+ public class ListUcsManagerCmd extends BaseCmd {
+ public static final Logger s_logger = Logger.getLogger(ListUcsManagerCmd.class);
+
+ @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="the zone id", required=true)
+ private Long zoneId;
+
+ @Inject
+ private UcsManager mgr;
+
+ @Override
+ public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
+ ResourceAllocationException, NetworkRuleConflictException {
+ try {
+ ListResponse<ListUcsManagerResponse> response = mgr.listUcsManager(this);
+ response.setResponseName(getCommandName());
+ response.setObjectName("ucsmanager");
+ this.setResponseObject(response);
+ } catch (Exception e) {
+ s_logger.warn("Exception: ", e);
- throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage());
++ throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
+ }
+ }
+
+ @Override
+ public String getCommandName() {
+ return "listucsmanagerreponse";
+ }
+
+ @Override
+ public long getEntityOwnerId() {
+ return Account.ACCOUNT_ID_SYSTEM;
+ }
+
+ public Long getZoneId() {
+ return zoneId;
+ }
+
+ public void setZoneId(Long zoneId) {
+ this.zoneId = zoneId;
+ }
+ }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8416d81b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileCmd.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileCmd.java
index 0000000,ce51f82..4d69c74
mode 000000,100755..100755
--- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileCmd.java
+++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/ListUcsProfileCmd.java
@@@ -1,0 -1,62 +1,63 @@@
+ package com.cloud.ucs.manager;
+
+ import javax.inject.Inject;
+
+ import org.apache.cloudstack.api.APICommand;
+ import org.apache.cloudstack.api.ApiConstants;
++import org.apache.cloudstack.api.ApiErrorCode;
+ import org.apache.cloudstack.api.BaseCmd;
+ import org.apache.cloudstack.api.BaseCmd.CommandType;
+ import org.apache.cloudstack.api.Parameter;
+ import org.apache.cloudstack.api.ServerApiException;
+ import org.apache.cloudstack.api.response.ListResponse;
+ import org.apache.log4j.Logger;
+
+ import com.cloud.exception.ConcurrentOperationException;
+ import com.cloud.exception.InsufficientCapacityException;
+ import com.cloud.exception.NetworkRuleConflictException;
+ import com.cloud.exception.ResourceAllocationException;
+ import com.cloud.exception.ResourceUnavailableException;
+ import com.cloud.server.ManagementService;
+ import com.cloud.user.Account;
+ @APICommand(description="List profile in ucs manager", responseObject=ListUcsProfileResponse.class)
+ public class ListUcsProfileCmd extends BaseCmd {
+ public static final Logger s_logger = Logger.getLogger(ListUcsProfileCmd.class);
+
+ @Inject UcsManager mgr;
+
+ @Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="the id for the ucs manager", required=true)
+ private Long ucsManagerId;
+
+ public Long getUcsManagerId() {
+ return ucsManagerId;
+ }
+
+ public void setUcsManagerId(Long ucsManagerId) {
+ this.ucsManagerId = ucsManagerId;
+ }
+
+ @Override
+ public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
+ ResourceAllocationException, NetworkRuleConflictException {
+ try {
+ ListResponse<ListUcsProfileResponse> response = mgr.listUcsProfiles(this);
+ response.setResponseName(getCommandName());
+ response.setObjectName("ucsprofile");
+ this.setResponseObject(response);
+ } catch (Exception e) {
+ s_logger.warn("Exception: ", e);
- throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage());
++ throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage());
+ }
+ }
+
+ @Override
+ public String getCommandName() {
+ return "listucsprofileresponse";
+ }
+
+ @Override
+ public long getEntityOwnerId() {
+ return Account.ACCOUNT_ID_SYSTEM;
+ }
+
+ }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8416d81b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java
----------------------------------------------------------------------
diff --cc plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java
index 0000000,c82c8b4..03a28dd
mode 000000,100755..100755
--- a/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java
+++ b/plugins/hypervisors/ucs/src/com/cloud/ucs/manager/UcsManagerImpl.java
@@@ -1,0 -1,258 +1,288 @@@
+ package com.cloud.ucs.manager;
+
+ import java.io.File;
+ import java.io.StringReader;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.UUID;
+ import java.util.concurrent.TimeUnit;
+
+ import javax.ejb.Local;
+ import javax.inject.Inject;
+ import javax.naming.ConfigurationException;
+ import javax.xml.bind.JAXBContext;
+ import javax.xml.bind.Unmarshaller;
+
+ import org.apache.cloudstack.api.ApiConstants;
+ import org.apache.cloudstack.api.BaseCmd;
+ import org.apache.cloudstack.api.ResponseGenerator;
+ import org.apache.cloudstack.api.ServerApiException;
+ import org.apache.cloudstack.api.response.ClusterResponse;
+ import org.apache.cloudstack.api.response.ListResponse;
+ import org.apache.cxf.helpers.FileUtils;
+ import org.apache.log4j.Logger;
+ import org.springframework.stereotype.Component;
+
+ import com.cloud.dc.ClusterDetailsDao;
+ import com.cloud.dc.dao.ClusterDao;
+ import com.cloud.host.HostVO;
+ import com.cloud.hypervisor.Hypervisor.HypervisorType;
+ import com.cloud.org.Cluster;
+ import com.cloud.resource.ResourceService;
+ import com.cloud.ucs.database.UcsBladeDao;
+ import com.cloud.ucs.database.UcsBladeVO;
+ import com.cloud.ucs.database.UcsManagerDao;
+ import com.cloud.ucs.database.UcsManagerVO;
+ import com.cloud.ucs.structure.ComputeBlade;
+ import com.cloud.ucs.structure.UcsProfile;
+ import com.cloud.utils.db.DB;
+ import com.cloud.utils.db.SearchCriteria.Op;
+ import com.cloud.utils.db.SearchCriteria2;
+ import com.cloud.utils.db.SearchCriteriaService;
+ import com.cloud.utils.db.Transaction;
+ import com.cloud.utils.exception.CloudRuntimeException;
+ import com.cloud.utils.script.Script;
+ import com.cloud.utils.xmlobject.XmlObject;
+ import com.cloud.utils.xmlobject.XmlObjectParser;
+
+ @Local(value = { UcsManager.class })
+ @Component
+ public class UcsManagerImpl implements UcsManager {
+ public static final Logger s_logger = Logger.getLogger(UcsManagerImpl.class);
+
+ @Inject
+ private UcsManagerDao ucsDao;
+ @Inject
+ private ResourceService resourceService;
+ @Inject
+ private ClusterDao clusterDao;
+ @Inject
+ private ClusterDetailsDao clusterDetailsDao;
+ @Inject
+ private UcsBladeDao bladeDao;
+
+ private Map<Long, String> cookies = new HashMap<Long, String>();
+
+ @Override
+ public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+ return true;
+ }
+
+ @Override
+ public boolean start() {
+ return true;
+ }
+
+ @Override
+ public boolean stop() {
+ return true;
+ }
+
+ @Override
+ public String getName() {
+ return "UcsManager";
+ }
+
+ private void discoverBlades(UcsManagerVO ucsMgrVo) {
+ List<ComputeBlade> blades = listBlades(ucsMgrVo.getId());
+ for (ComputeBlade b : blades) {
+ UcsBladeVO vo = new UcsBladeVO();
+ vo.setDn(b.getDn());
+ vo.setUcsManagerId(ucsMgrVo.getId());
+ vo.setUuid(UUID.randomUUID().toString());
+ bladeDao.persist(vo);
+ }
+ }
+
+ @Override
+ @DB
+ public AddUcsManagerResponse addUcsManager(AddUcsManagerCmd cmd) {
+ UcsManagerVO vo = new UcsManagerVO();
+ vo.setUuid(UUID.randomUUID().toString());
+ vo.setPassword(cmd.getPassword());
+ vo.setUrl(cmd.getUrl());
+ vo.setUsername(cmd.getUsername());
+ vo.setZoneId(cmd.getZoneId());
+ vo.setName(cmd.getName());
+
+ Transaction txn = Transaction.currentTxn();
+ txn.start();
+ ucsDao.persist(vo);
+ txn.commit();
+ AddUcsManagerResponse rsp = new AddUcsManagerResponse();
+ rsp.setId(String.valueOf(vo.getId()));
+ rsp.setName(vo.getName());
+ rsp.setUrl(vo.getUrl());
+ rsp.setZoneId(String.valueOf(vo.getZoneId()));
+
+ discoverBlades(vo);
+
+ return rsp;
+ }
+
+ private String getCookie(Long ucsMgrId) {
+ try {
+ String cookie = cookies.get(ucsMgrId);
+ if (cookie == null) {
+ UcsManagerVO mgrvo = ucsDao.findById(ucsMgrId);
+ UcsHttpClient client = new UcsHttpClient(mgrvo.getUrl());
+ String login = UcsCommands.loginCmd(mgrvo.getUsername(), mgrvo.getPassword());
+ cookie = client.call(login);
+ cookies.put(ucsMgrId, cookie);
+ }
+
+ return cookie;
+ } catch (Exception e) {
+ throw new CloudRuntimeException("Cannot get cookie", e);
+ }
+ }
+
+ private List<ComputeBlade> listBlades(Long ucsMgrId) {
+ String cookie = getCookie(ucsMgrId);
+ UcsManagerVO mgrvo = ucsDao.findById(ucsMgrId);
+ UcsHttpClient client = new UcsHttpClient(mgrvo.getUrl());
+ String cmd = UcsCommands.listComputeBlades(cookie);
+ String ret = client.call(cmd);
+ return ComputeBlade.fromXmString(ret);
+ }
+
+ private List<UcsProfile> getUcsProfiles(Long ucsMgrId) {
+ String cookie = getCookie(ucsMgrId);
+ UcsManagerVO mgrvo = ucsDao.findById(ucsMgrId);
+ String cmd = UcsCommands.listProfiles(cookie);
+ UcsHttpClient client = new UcsHttpClient(mgrvo.getUrl());
+ String res = client.call(cmd);
+ List<UcsProfile> profiles = UcsProfile.fromXmlString(res);
+ return profiles;
+ }
+
+ @Override
+ public ListResponse<ListUcsProfileResponse> listUcsProfiles(ListUcsProfileCmd cmd) {
+ List<UcsProfile> profiles = getUcsProfiles(cmd.getUcsManagerId());
+ ListResponse<ListUcsProfileResponse> response = new ListResponse<ListUcsProfileResponse>();
+ List<ListUcsProfileResponse> rs = new ArrayList<ListUcsProfileResponse>();
+ for (UcsProfile p : profiles) {
+ ListUcsProfileResponse r = new ListUcsProfileResponse();
+ r.setObjectName("ucsprofile");
+ r.setDn(p.getDn());
+ rs.add(r);
+ }
+ response.setResponses(rs);
+ return response;
+ }
+
+ private String cloneProfile(Long ucsMgrId, String srcDn, String newProfileName) {
+ UcsManagerVO mgrvo = ucsDao.findById(ucsMgrId);
+ UcsHttpClient client = new UcsHttpClient(mgrvo.getUrl());
+ String cookie = getCookie(ucsMgrId);
+ String cmd = UcsCommands.cloneProfile(cookie, srcDn, newProfileName);
+ String res = client.call(cmd);
+ XmlObject xo = XmlObjectParser.parseFromString(res);
+ return xo.get("lsClone.outConfig.lsServer.dn");
+ }
+
+ private boolean isProfileAssociated(Long ucsMgrId, String dn) {
+ UcsManagerVO mgrvo = ucsDao.findById(ucsMgrId);
+ UcsHttpClient client = new UcsHttpClient(mgrvo.getUrl());
+ String cookie = getCookie(ucsMgrId);
+ String cmd = UcsCommands.configResolveDn(cookie, dn);
+ String res = client.call(cmd);
+ XmlObject xo = XmlObjectParser.parseFromString(res);
+ return xo.get("outConfig.lsServer.assocState").equals("associated");
+ }
+
+ @Override
+ public void associateProfileToBlade(AssociateUcsProfileToBladeCmd cmd) {
+ SearchCriteriaService<UcsBladeVO, UcsBladeVO> q = SearchCriteria2.create(UcsBladeVO.class);
+ q.addAnd(q.getEntity().getUcsManagerId(), Op.EQ, cmd.getUcsManagerId());
+ q.addAnd(q.getEntity().getId(), Op.EQ, cmd.getBladeId());
+ UcsBladeVO bvo = q.find();
+ if (bvo == null) {
+ throw new IllegalArgumentException(String.format("cannot find UCS blade[id:%s, ucs manager id:%s]", cmd.getBladeId(), cmd.getUcsManagerId()));
+ }
+
+ if (bvo.getHostId() != null) {
+ throw new CloudRuntimeException(String.format("blade[id:%s, dn:%s] has been associated with host[id:%s]", bvo.getId(), bvo.getDn(), bvo.getHostId()));
+ }
+
+ UcsManagerVO mgrvo = ucsDao.findById(cmd.getUcsManagerId());
+ String cookie = getCookie(cmd.getUcsManagerId());
+ String pdn = cloneProfile(mgrvo.getId(), cmd.getProfileDn(), "profile-for-blade-" + bvo.getId());
+ String ucscmd = UcsCommands.associateProfileToBlade(cookie, pdn, bvo.getDn());
+ UcsHttpClient client = new UcsHttpClient(mgrvo.getUrl());
+ String res = client.call(ucscmd);
+ int count = 0;
+ int timeout = 600;
+ while (count < timeout) {
+ if (isProfileAssociated(mgrvo.getId(), bvo.getDn())) {
+ break;
+ }
+
+ try {
+ TimeUnit.SECONDS.sleep(2);
+ } catch (InterruptedException e) {
+ throw new CloudRuntimeException(e);
+ }
+
+ count += 2;
+ }
+
+ if (count >= timeout) {
+ throw new CloudRuntimeException(String.format("associating profile[%s] to balde[%s] timeout after 600 seconds", pdn, bvo.getDn()));
+ }
+
+ s_logger.debug(String.format("successfully associated profile[%s] to blade[%s]", pdn, bvo.getDn()));
+ }
+
+ @Override
+ public ListResponse<ListUcsManagerResponse> listUcsManager(ListUcsManagerCmd cmd) {
+ SearchCriteriaService<UcsManagerVO, UcsManagerVO> serv = SearchCriteria2.create(UcsManagerVO.class);
+ serv.addAnd(serv.getEntity().getZoneId(), Op.EQ, cmd.getZoneId());
+ List<UcsManagerVO> vos = serv.list();
+
+ List<ListUcsManagerResponse> rsps = new ArrayList<ListUcsManagerResponse>(vos.size());
+ for (UcsManagerVO vo : vos) {
+ ListUcsManagerResponse rsp = new ListUcsManagerResponse();
+ rsp.setObjectName("ucsmanager");
+ rsp.setId(String.valueOf(vo.getId()));
+ rsp.setName(vo.getName());
+ rsp.setZoneId(String.valueOf(vo.getZoneId()));
+ rsps.add(rsp);
+ }
+ ListResponse<ListUcsManagerResponse> response = new ListResponse<ListUcsManagerResponse>();
+ response.setResponses(rsps);
+ return response;
+ }
++
++ @Override
++ public void setName(String name) {
++ // TODO Auto-generated method stub
++
++ }
++
++ @Override
++ public void setConfigParams(Map<String, Object> params) {
++ // TODO Auto-generated method stub
++
++ }
++
++ @Override
++ public Map<String, Object> getConfigParams() {
++ // TODO Auto-generated method stub
++ return null;
++ }
++
++ @Override
++ public int getRunLevel() {
++ // TODO Auto-generated method stub
++ return 0;
++ }
++
++ @Override
++ public void setRunLevel(int level) {
++ // TODO Auto-generated method stub
++
++ }
+ }
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8416d81b/plugins/pom.xml
----------------------------------------------------------------------
diff --cc plugins/pom.xml
index 12c05ca,6d87b4d..a3a3189
mode 100644,100755..100755
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@@ -41,8 -40,7 +41,9 @@@
<module>hypervisors/ovm</module>
<module>hypervisors/xen</module>
<module>hypervisors/kvm</module>
+ <module>hypervisors/simulator</module>
+ <module>hypervisors/baremetal</module>
+ <module>hypervisors/ucs</module>
<module>network-elements/elastic-loadbalancer</module>
<module>network-elements/ovs</module>
<module>network-elements/nicira-nvp</module>
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8416d81b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java
----------------------------------------------------------------------
diff --cc utils/src/com/cloud/utils/exception/CloudRuntimeException.java
index 3862e22,dabb715..00141f2
--- a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java
+++ b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java
@@@ -24,54 -23,23 +24,58 @@@ import com.cloud.utils.SerialVersionUID
/**
* wrap exceptions that you know there's no point in dealing with.
*/
-public class CloudRuntimeException extends RuntimeCloudException {
+public class CloudRuntimeException extends RuntimeException {
private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException;
-
+
+ // This holds a list of uuids and their names. Add uuid:fieldname pairs
+ protected ArrayList<String> idList = new ArrayList<String>();
+
+ protected int csErrorCode;
+
+
public CloudRuntimeException(String message) {
super(message);
+ setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName()));
}
-
+
public CloudRuntimeException(String message, Throwable th) {
super(message, th);
+ setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName()));
}
-
- protected CloudRuntimeException() {
+
+ public CloudRuntimeException() {
super();
+ setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName()));
+ }
+
+ public void addProxyObject(String uuid) {
+ idList.add(uuid);
+ return;
+ }
+
+ public void addProxyObject(Object voObj, Long id, String idFieldName) {
+ // Get the VO object's table name.
+ String tablename = AnnotationHelper.getTableName(voObj);
+ if (tablename != null) {
+ addProxyObject(tablename, id, idFieldName);
+ }
+ return;
+ }
+
+ public ArrayList<String> getIdProxyList() {
+ return idList;
+ }
+
+ public void setCSErrorCode(int cserrcode) {
+ this.csErrorCode = cserrcode;
+ }
+
+ public int getCSErrorCode() {
+ return this.csErrorCode;
}
+
+ public CloudRuntimeException(Throwable t) {
+ super(t);
+ }
}