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);
+     }
  }