Updated Branches: refs/heads/master a52889bb6 -> 8c3450b50
CS-14770. ec2-run-instances and ec2-describe-instances don't return keypair information. Component: AWSAPI. Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/8c3450b5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/8c3450b5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/8c3450b5 Branch: refs/heads/master Commit: 8c3450b503679026afed09510a810b6eaa0a5458 Parents: a52889b Author: Likitha Shetty <[email protected]> Authored: Tue Aug 28 13:52:04 2012 -0700 Committer: Prachi Damle <[email protected]> Committed: Tue Aug 28 13:52:42 2012 -0700 ---------------------------------------------------------------------- api/src/com/cloud/api/response/UserVmResponse.java | 7 ++++++ .../cloud/bridge/service/EC2SoapServiceImpl.java | 4 +- .../cloud/bridge/service/core/ec2/EC2Engine.java | 4 ++- .../cloud/bridge/service/core/ec2/EC2Instance.java | 10 ++++++++ .../com/cloud/stack/models/CloudStackUserVm.java | 9 ++++++++ server/src/com/cloud/api/ApiDBUtils.java | 17 +++++++++++++++ server/src/com/cloud/api/ApiResponseHelper.java | 7 ++++++ server/src/com/cloud/user/dao/SSHKeyPairDao.java | 2 + .../src/com/cloud/user/dao/SSHKeyPairDaoImpl.java | 9 +++++++- server/src/com/cloud/vm/dao/UserVmData.java | 9 ++++++++ .../src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java | 2 +- 11 files changed, 75 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/api/src/com/cloud/api/response/UserVmResponse.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/api/response/UserVmResponse.java b/api/src/com/cloud/api/response/UserVmResponse.java index 652e026..f74c072 100755 --- a/api/src/com/cloud/api/response/UserVmResponse.java +++ b/api/src/com/cloud/api/response/UserVmResponse.java @@ -158,6 +158,9 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp @SerializedName(ApiConstants.TAGS) @Param(description="the list of resource tags associated with vm", responseObject = ResourceTagResponse.class) private List<ResourceTagResponse> tags; + @SerializedName(ApiConstants.SSH_KEYPAIR) @Param(description="ssh key-pair") + private String keyPairName; + public void setHypervisor(String hypervisor) { this.hypervisor = hypervisor; } @@ -348,4 +351,8 @@ public class UserVmResponse extends BaseResponse implements ControlledEntityResp public void setTags(List<ResourceTagResponse> tags) { this.tags = tags; } + + public void setKeyPairName(String keyPairName) { + this.keyPairName = keyPairName; + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java ---------------------------------------------------------------------- diff --git a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java index c23a11d..6ac8c97 100644 --- a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java +++ b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java @@ -1378,7 +1378,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { param7.setPrivateDnsName( "" ); param7.setDnsName( "" ); param7.setReason( "" ); - param7.setKeyName( "" ); + param7.setKeyName( inst.getKeyPairName()); param7.setAmiLaunchIndex( "" ); param7.setInstanceType( inst.getServiceOffering()); @@ -1700,7 +1700,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface { param7.setPrivateDnsName( "" ); param7.setDnsName( "" ); param7.setReason( "" ); - param7.setKeyName( "" ); + param7.setKeyName( inst.getKeyPairName()); param7.setAmiLaunchIndex( "" ); ProductCodesSetType param9 = new ProductCodesSetType(); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java ---------------------------------------------------------------------- diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java index 1363d0d..2d40381 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java @@ -1521,6 +1521,7 @@ public class EC2Engine { vm.setDomainId(resp.getDomainId()); vm.setHypervisor(resp.getHypervisor()); vm.setServiceOffering( svcOffering.getName()); + vm.setKeyPairName(resp.getKeyPairName()); instances.addInstance(vm); countCreated++; } @@ -1905,7 +1906,8 @@ public class EC2Engine { ec2Vm.setRootDeviceType(cloudVm.getRootDeviceType()); ec2Vm.setRootDeviceId(cloudVm.getRootDeviceId()); ec2Vm.setServiceOffering(serviceOfferingIdToInstanceType(cloudVm.getServiceOfferingId().toString())); - + ec2Vm.setKeyPairName(cloudVm.getKeyPairName()); + List<CloudStackNic> nics = cloudVm.getNics(); for(CloudStackNic nic : nics) { if(nic.getIsDefault()) { http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java ---------------------------------------------------------------------- diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java index 6e2d696..9b43cb7 100644 --- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java +++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Instance.java @@ -40,6 +40,7 @@ public class EC2Instance { private String hypervisor; private String rootDeviceType; private String rootDeviceId; + private String keyPairName; private List<String> groupSet; private List<EC2TagKeyValue> tagsSet; @@ -60,6 +61,7 @@ public class EC2Instance { hypervisor = null; rootDeviceType = null; rootDeviceId = null; + keyPairName = null; groupSet = new ArrayList<String>(); tagsSet = new ArrayList<EC2TagKeyValue>(); } @@ -192,6 +194,14 @@ public class EC2Instance { rootDeviceId = param; } + public String getKeyPairName() { + return keyPairName; + } + + public void setKeyPairName(String param) { + keyPairName = param; + } + public void addGroupName( String param ) { groupSet.add( param ); } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/awsapi/src/com/cloud/stack/models/CloudStackUserVm.java ---------------------------------------------------------------------- diff --git a/awsapi/src/com/cloud/stack/models/CloudStackUserVm.java b/awsapi/src/com/cloud/stack/models/CloudStackUserVm.java index e1db2d9..012abc4 100644 --- a/awsapi/src/com/cloud/stack/models/CloudStackUserVm.java +++ b/awsapi/src/com/cloud/stack/models/CloudStackUserVm.java @@ -67,6 +67,8 @@ public class CloudStackUserVm { private String jobId; @SerializedName(ApiConstants.JOB_STATUS) private Integer jobStatus; + @SerializedName(ApiConstants.SSH_KEYPAIR) + private String keyPairName; @SerializedName(ApiConstants.MEMORY) private Integer memory; @SerializedName(ApiConstants.NAME) @@ -340,6 +342,13 @@ public class CloudStackUserVm { return serviceOfferingName; } + /** + * @return the sshKeyPairName + */ + public String getKeyPairName() { + return keyPairName; + } + /** * @return the state */ http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/server/src/com/cloud/api/ApiDBUtils.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index e1e8865..55c8671 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -125,10 +125,12 @@ import com.cloud.user.Account; import com.cloud.user.AccountDetailsDao; import com.cloud.user.AccountVO; import com.cloud.user.ResourceLimitService; +import com.cloud.user.SSHKeyPairVO; import com.cloud.user.User; import com.cloud.user.UserStatisticsVO; import com.cloud.user.UserVO; import com.cloud.user.dao.AccountDao; +import com.cloud.user.dao.SSHKeyPairDao; import com.cloud.user.dao.UserDao; import com.cloud.user.dao.UserStatisticsDao; import com.cloud.uservm.UserVm; @@ -139,6 +141,7 @@ import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.InstanceGroupVO; import com.cloud.vm.NicProfile; +import com.cloud.vm.UserVmDetailVO; import com.cloud.vm.UserVmManager; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; @@ -148,6 +151,7 @@ import com.cloud.vm.dao.ConsoleProxyDao; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.UserVmData; +import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; public class ApiDBUtils { @@ -206,6 +210,8 @@ public class ApiDBUtils { private static HighAvailabilityManager _haMgr; private static VpcManager _vpcMgr; private static TaggedResourceService _taggedResourceService; + private static UserVmDetailsDao _userVmDetailsDao; + private static SSHKeyPairDao _sshKeyPairDao; static { _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); @@ -263,6 +269,8 @@ public class ApiDBUtils { _haMgr = locator.getManager(HighAvailabilityManager.class); _vpcMgr = locator.getManager(VpcManager.class); _taggedResourceService = locator.getManager(TaggedResourceService.class); + _sshKeyPairDao = locator.getDao(SSHKeyPairDao.class); + _userVmDetailsDao = locator.getDao(UserVmDetailsDao.class); // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned _statsCollector = StatsCollector.getInstance(); @@ -803,4 +811,13 @@ public class ApiDBUtils { public static List<? extends ResourceTag> listByResourceTypeAndId(TaggedResourceType type, long resourceId) { return _taggedResourceService.listByResourceTypeAndId(type, resourceId); } + + public static String getKeyPairName(String sshPublicKey) { + SSHKeyPairVO sshKeyPair = _sshKeyPairDao.findByPublicKey(sshPublicKey); + return sshKeyPair.getName(); + } + + public static UserVmDetailVO findPublicKeyByVmId(long vmId) { + return _userVmDetailsDao.findDetail(vmId, "SSH.PublicKey"); + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/server/src/com/cloud/api/ApiResponseHelper.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiResponseHelper.java b/server/src/com/cloud/api/ApiResponseHelper.java index 7334488..aee6af0 100755 --- a/server/src/com/cloud/api/ApiResponseHelper.java +++ b/server/src/com/cloud/api/ApiResponseHelper.java @@ -211,6 +211,7 @@ import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.InstanceGroup; import com.cloud.vm.InstanceGroupVO; import com.cloud.vm.NicProfile; +import com.cloud.vm.UserVmDetailVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; @@ -3332,6 +3333,12 @@ public class ApiResponseHelper implements ResponseGenerator { } userVmResponse.setTags(tagResponses); + UserVmDetailVO userVmDetail = ApiDBUtils.findPublicKeyByVmId(userVmData.getId()); + if (userVmDetail != null && userVmDetail.getValue() != null) { + String keyPairName = ApiDBUtils.getKeyPairName(userVmDetail.getValue()); + userVmResponse.setKeyPairName(keyPairName); + } + return userVmResponse; } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/server/src/com/cloud/user/dao/SSHKeyPairDao.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/user/dao/SSHKeyPairDao.java b/server/src/com/cloud/user/dao/SSHKeyPairDao.java index 84295da..b1833bf 100644 --- a/server/src/com/cloud/user/dao/SSHKeyPairDao.java +++ b/server/src/com/cloud/user/dao/SSHKeyPairDao.java @@ -31,6 +31,8 @@ public interface SSHKeyPairDao extends GenericDao<SSHKeyPairVO, Long> { public SSHKeyPairVO findByName(long accountId, long domainId, String name); + public SSHKeyPairVO findByPublicKey(String publicKey); + public boolean deleteByName(long accountId, long domainId, String name); } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/server/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java b/server/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java index 58999e0..ac16cc9 100644 --- a/server/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java +++ b/server/src/com/cloud/user/dao/SSHKeyPairDaoImpl.java @@ -61,7 +61,14 @@ public class SSHKeyPairDaoImpl extends GenericDaoBase<SSHKeyPairVO, Long> implem sc.addAnd("name", SearchCriteria.Op.EQ, name); return findOneBy(sc); } - + + @Override + public SSHKeyPairVO findByPublicKey(String publicKey) { + SearchCriteria<SSHKeyPairVO> sc = createSearchCriteria(); + sc.addAnd("publicKey", SearchCriteria.Op.EQ, publicKey); + return findOneBy(sc); + } + @Override public boolean deleteByName(long accountId, long domainId, String name) { SSHKeyPairVO pair = findByName(accountId, domainId, name); http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/server/src/com/cloud/vm/dao/UserVmData.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/vm/dao/UserVmData.java b/server/src/com/cloud/vm/dao/UserVmData.java index 4a0d10d..82c737c 100644 --- a/server/src/com/cloud/vm/dao/UserVmData.java +++ b/server/src/com/cloud/vm/dao/UserVmData.java @@ -70,6 +70,7 @@ public class UserVmData { private Long publicIpId; private String publicIp; private String instanceName; + private String sshPublicKey; private boolean initialized; @@ -710,5 +711,13 @@ public class UserVmData { public void setInstanceName(String instanceName) { this.instanceName = instanceName; } + + public String getSshPublicKey() { + return sshPublicKey; + } + + public void setSshPublicKey(String sshPublicKey) { + this.sshPublicKey = sshPublicKey; + } } http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/8c3450b5/server/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java b/server/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java index 6975c8c..b74741b 100644 --- a/server/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java +++ b/server/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java @@ -39,7 +39,7 @@ public class UserVmDetailsDaoImpl extends GenericDaoBase<UserVmDetailVO, Long> i VmSearch.done(); DetailSearch = createSearchBuilder(); - DetailSearch.and("hostId", DetailSearch.entity().getVmId(), SearchCriteria.Op.EQ); + DetailSearch.and("vmId", DetailSearch.entity().getVmId(), SearchCriteria.Op.EQ); DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ); DetailSearch.done(); }
