CS-14770. ec2-run-instances and ec2-describe-instances don't return keypair information.

Changing CS deployVirtualMachine and listVirtualMachine api response to include ssh keypair information.
Component: AWSAPI.
This commit is contained in:
Likitha Shetty 2012-07-26 20:51:26 +05:30
parent 05f4690807
commit ddcb3d7b30
11 changed files with 80 additions and 8 deletions

View File

@ -154,6 +154,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;
}
@ -344,4 +347,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;
}
}

View File

@ -1347,7 +1347,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface {
param7.setPrivateDnsName( "" );
param7.setDnsName( "" );
param7.setReason( "" );
param7.setKeyName( "" );
param7.setKeyName( inst.getKeyPairName());
param7.setAmiLaunchIndex( "" );
param7.setInstanceType( inst.getServiceOffering());
@ -1669,7 +1669,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface {
param7.setPrivateDnsName( "" );
param7.setDnsName( "" );
param7.setReason( "" );
param7.setKeyName( "" );
param7.setKeyName( inst.getKeyPairName());
param7.setAmiLaunchIndex( "" );
ProductCodesSetType param9 = new ProductCodesSetType();
@ -1722,7 +1722,7 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface {
param19.setKey("");
param19.setValue("");
param18.addItem( param19 );
param7.setTagSet( param18 );
param7.setTagSet( param18 );
String hypervisor = inst.getHypervisor();
param7.setHypervisor((null != hypervisor ? hypervisor : ""));

View File

@ -1514,6 +1514,8 @@ public class EC2Engine {
vm.setDomainId(resp.getDomainId());
vm.setHypervisor(resp.getHypervisor());
vm.setServiceOffering( svcOffering.getName());
vm.setKeyPairName(resp.getKeyPairName());
instances.addInstance(vm);
countCreated++;
}
@ -1894,7 +1896,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()) {

View File

@ -39,6 +39,7 @@ public class EC2Instance {
private String hypervisor;
private String rootDeviceType;
private String rootDeviceId;
private String keyPairName;
private List<String> groupSet;
private List<EC2TagKeyValue> tagsSet;
@ -59,6 +60,7 @@ public class EC2Instance {
hypervisor = null;
rootDeviceType = null;
rootDeviceId = null;
keyPairName = null;
groupSet = new ArrayList<String>();
tagsSet = new ArrayList<EC2TagKeyValue>();
}
@ -191,6 +193,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 );
}

View File

@ -66,6 +66,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)
@ -339,6 +341,13 @@ public class CloudStackUserVm {
return serviceOfferingName;
}
/**
* @return the sshKeyPairName
*/
public String getKeyPairName() {
return keyPairName;
}
/**
* @return the state
*/

View File

@ -132,10 +132,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;
@ -146,6 +148,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;
@ -155,6 +158,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 {
@ -218,6 +222,8 @@ public class ApiDBUtils {
private static AutoScaleVmGroupPolicyMapDao _asVmGroupPolicyMapDao;
private static AutoScalePolicyDao _asPolicyDao;
private static CounterDao _counterDao;
private static UserVmDetailsDao _userVmDetailsDao;
private static SSHKeyPairDao _sshKeyPairDao;
static {
_ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name);
@ -282,6 +288,9 @@ public class ApiDBUtils {
_asVmGroupPolicyMapDao = locator.getDao(AutoScaleVmGroupPolicyMapDao.class);
_asVmGroupPolicyMapDao = locator.getDao(AutoScaleVmGroupPolicyMapDao.class);
_counterDao = locator.getDao(CounterDao.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
@ -861,4 +870,13 @@ public class ApiDBUtils {
public static CounterVO getCounter(long counterId) {
return _counterDao.findById(counterId);
}
}
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");
}
}

View File

@ -218,6 +218,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;
@ -3297,6 +3298,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;
}
@ -3976,4 +3983,4 @@ public class ApiResponseHelper implements ResponseGenerator {
populateOwner(response, condition);
return response;
}
}
}

View File

@ -27,6 +27,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);
}

View File

@ -57,7 +57,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);

View File

@ -66,6 +66,7 @@ public class UserVmData {
private Long publicIpId;
private String publicIp;
private String instanceName;
private String sshPublicKey;
private boolean initialized;
@ -706,5 +707,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;
}
}

View File

@ -35,7 +35,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();
}